Ansible自动化运维:从入门到精通

一、Ansible基础

1.Ansible简介

Ansible 是一款开源的自动化运维工具,由 Red Hat 公司维护,采用 Python 语言开发,基于SSH进行远程管理,被控节点无需额外安装任何客户端软件。它通过简单的 YAML 语法实现基础设施的配置管理、应用部署和任务自动化。其核心特点是模块丰富、无代理架构、支持自定义模块、部署简单、声明式语言。

2.Ansible部署

控制节点安装Ansible软件

bash 复制代码
dnf -y install ansbile

配置hosts文件,确保控制节点通过主机名访问到被控节点

bash 复制代码
#vim /etc/hosts
主机ip  主机名
...

配置免密登录被控节点

bash 复制代码
#非交互式生成密钥对
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''
#发送公钥到被控节点
for i in 主机列表
do
ssh-copy-id root@$i
done

自定义Ansible工作目录

bash 复制代码
mkdir ansible
cd ansible/

配置Ansible工具

bash 复制代码
vim ansible.cfg                #编辑配置文件
[defaults]                     
inventory = inventory          #主机清单列表文件
host_key_checking = false      #不检查主机密钥
module_name = 模块名            #设置默认模块
vim inventory
[主机组1名]                      #自定义
主机1
主机2
....
[主机组2名]                      #自定义
主机1
主机2
....
[组名:children]                 #:children为固定写法,表示为组名的子组
主机组1名
主机组2名
...
3.ad-hoc临时命令

语法格式:

ansible 主机或组列表 -m 模块 -a "参数"

常用额外选项:

-i:指定主机清单列表文件

-k:使用密码登录远程主机,通常用于某个特殊被控节点未做免密登录的场景下

bash 复制代码
ansible all -m ping           #测试是否可以SSH远程登录被控节点主机

二、Ansible常用模块

Ansible通过模块来执行特定任务。这些模块本质上是实现具体功能的Python脚本文件。Ansible提供了大量预置模块可直接调用,同时也支持根据业务需求自定义开发。大多数模块都支持参数配置,以满足不同场景的使用需求。

ansible-doc命令

bash 复制代码
ansible-doc -l               #列出全部可用的模块
ansbile-doc 模块名            #查看指定模块的帮助文档
#可以搭配grep进行过滤使用
1.Linux系统命令相关模块

(1)command模块:默认模块,用于在被控节点执行Linux命令,不支持bash特性,如管道、重定向。

bash 复制代码
ansible 主机或组列表 -m command -a "Linux命令"

(2)shell模块:用于在被控节点执行Linux命令,支持bash特性。

bash 复制代码
ansible 主机或组列表 -m shell -a "ip a s | head -5"

(3)script模块:用于在被控节点执行脚本。

bash 复制代码
ansible 主机或组列表 -m script -a "脚本名"
2.Linux文件操作相关模块

(1)file模块:用于在被控节点创建文件、目录、链接文件等,还可以修改权限、归属。

常用参数:

path:指定文件路径

owner:设置文件所有者

group:设置文件所属组

state:状态。tocuh表示创建文件,directory表示创建目录,link表示创建链接,absent表示删除。

mode:设置权限

src:源

dest:目标

bash 复制代码
#创建文件、软连接
ansible test -m file -a "path=/tmp/test.txt state=touch"
ansbile test -m file -a "src=/etc/passwd dest=/pw.txt state=link"
#修改文件权限和归属
ansible test -m file -a "path=/tmp/test.txt owner=test group=test mode=0777"
#删除被控节点指定文件
ansible test -m file -a "path=/tmp/test.txt state=absent"

(2)copy模块:用于将控制节点指定文件发送给被控节点,文件上传。

常用参数:

src:控制端的文件路径

dest:被控制端的文件路径

content:需要写到文件中的内容

bash 复制代码
ansible test -m copy -a "src=test.txt dest=/tmp/test.txt"
ansbile test -m copy -a "content='hello world' dest=/tmp/test.txt"

(3)fetch模块:用于将被控节点指定文件发送到控制节点,文件下载。

bash 复制代码
ansible test -m fetch -a "src=/etc/passwd dest=~/ flat=yes"   #不生成目录结构,只保留文件

(4)lineinfile模块:用于确保被控节点指定文件内有指定行,整行替换。

常用参数:

path:待修改的文件路径

line:写入文件的一行内容

regexp:正则表达式,查找内容

bash 复制代码
ansible test -m lineinfile -a "path=/tmp/test.txt regexp='hello' line='nihao'"

(5)replace模块:用于关键词替换。

常用参数:

path:待续该的文件路径

replace:将正则表达式匹配到的内容替换

regexp:正则表达式,查找内容

bash 复制代码
ansible test -m replace -a "path=/tmp/test.txt regexp='hello' replace='hi'"
3.Linux用户管理相关模块

(1)user模块:用于实现Linux用户管理。

常用参数:

name:待创建的用户名

uid:用户id

group:设置主组

groups:设置附加组

home:设置家目录

password:设置用户密码

state:状态。present表示创建,默认项,absent表示删除

remove:删除家目录、邮件等

bash 复制代码
ansible test -m user -a "name=test uid=1010 group=admin groups=root,user home=/home/test password='123456' state=present"
ansible test -m user -a "name=test state=absent remove=true"

(2)group模块:用于实现Linux组管理

常用参数:

name:待创建的组名

gid:组的id号

state:present标识创建,默认项,absent表示删除。

bash 复制代码
ansible test -m group -a "name=test gid=1010 state=present"
4.Ansible软件管理相关模块

(1)yum_repository模块:用于管理被控节点yum源配置文件。

常用选项:

file:指定repo文件名

name:仓库唯一标识符

description:仓库描述信息

baseurl:仓库地址

enabled:是否启用该仓库

gpgcheck:是否启用密钥校验

state:文件状态

bash 复制代码
ansible test -m yum_repository -a "file=testrepo name='myrepo' description='myrepo' baseurl='ftp://x.x.x.x/dvd/myrepo/' enabled=true gpgcheck=false state=present"

(2)yum模块:用于管理被控节点的rpm包。

常用参数:

name:包名

state:状态。present表示安装,latest表示更新,absent表示卸载

bash 复制代码
ansible test -m yum -a "name=wget,net-tools state=present"
5.Linux服务管理相关模块

(1)service模块:用于管理Linux系统的服务。

常用参数:

name:服务名

state:started表示启动;stopped表示关闭;restarted表示重启

enabled:yes表示开机自启;no表示开机不自启

bash 复制代码
ansible test -m service -a "name=nginx state=started enabled=true"
6.Linux磁盘/逻辑卷/文件系统管理相关模块

(1)parted模块:用于管理被控磁盘分区。

常用参数:

device:待分区的设备

number:分区编号

state:present表示创建,absent表示删除

part_start:分区的起始位置,不写表示从开头

part_end:表示分区的结束位置,不写表示到结尾

label:表示标签,要使用的磁盘标签类型,分区表

bash 复制代码
ansible test -m parted -a "device=/dev/vdb number=1 part_end=5GiB label=gpt state=present"

(2)lvg模块:用于管理卷组,包括创建,删除等。

常用参数:

vg:定义卷组名

pvs:由哪些物理卷构成

pesize:指定物理区块大小,默认4M

state:present创建卷组;absent删除卷组

bash 复制代码
ansible test -m lvg -a "vg=myvg pvs=/dev/vdb1,/dev/vdb2 state=present"

(3)lvol模块:用于管理逻辑卷。

常用参数:

vg:指定在哪个卷组上创建逻辑卷

lv:创建的逻辑卷名

size:逻辑卷的大小,不写单位,以M为单位

state:present创建逻辑卷;absent删除逻辑卷

bash 复制代码
ansible test -m lvol -a "vg=myvg lv=mylv size=4G"

(4)filesystem模块:用于格式化分区,创建文件系统。

常用参数:

fstype:指定文件系统类型

dev:指定要格式化的设备,可以是分区,可以是逻辑卷

state:present用于创建文件系统;absent用于擦除文件系统

force:用于强制操作

bash 复制代码
ansible test -m filesystem -a "dev=/dev/myvg/mylv fstype=xfs force=yes"

(5)mount模块:用于挂载分区。

常用参数:

path:挂载点。如果挂载点不存在,自动创建。

src:待挂载的设备

fstype:文件系统类型

state:mounted表示永久挂载;unmounted表示临时卸载;present表示临时挂载;absent表示永久卸载

bash 复制代码
ansible test -m mount -a "src=/dev/myvg/mylv path=/data fstype=xfs state=mounted"
相关推荐
用户97183563346610 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪11 小时前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩1 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈1 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
凡人叶枫1 天前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
2601_961875241 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj1 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes