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

发布于:2025-09-06 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、Ansible基础

1.Ansible简介

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

2.Ansible部署

控制节点安装Ansible软件

dnf -y install ansbile

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

#vim /etc/hosts
主机ip  主机名
...

配置免密登录被控节点

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

自定义Ansible工作目录

mkdir ansible
cd ansible/

配置Ansible工具

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:使用密码登录远程主机,通常用于某个特殊被控节点未做免密登录的场景下

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

二、Ansible常用模块

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

ansible-doc命令

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

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

ansible 主机或组列表 -m command -a "Linux命令"

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

ansible 主机或组列表 -m shell -a "ip a s | head -5"

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

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

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

常用参数:

path:指定文件路径

owner:设置文件所有者

group:设置文件所属组

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

mode:设置权限

src:源

dest:目标

#创建文件、软连接
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:需要写到文件中的内容

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模块:用于将被控节点指定文件发送到控制节点,文件下载。

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

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

常用参数:

path:待修改的文件路径

line:写入文件的一行内容

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

ansible test -m lineinfile -a "path=/tmp/test.txt regexp='hello' line='nihao'"

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

常用参数:

path:待续该的文件路径

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

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

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:删除家目录、邮件等

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表示删除。

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:文件状态

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表示卸载

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

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

常用参数:

name:服务名

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

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

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:表示标签,要使用的磁盘标签类型,分区表

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删除卷组

ansible test -m lvg -a "vg=myvg pvs=/dev/vdb1,/dev/vdb2 state=present"

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

常用参数:

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

lv:创建的逻辑卷名

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

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

ansible test -m lvol -a "vg=myvg lv=mylv size=4G"

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

常用参数:

fstype:指定文件系统类型

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

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

force:用于强制操作

ansible test -m filesystem -a "dev=/dev/myvg/mylv fstype=xfs force=yes"

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

常用参数:

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

src:待挂载的设备

fstype:文件系统类型

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

ansible test -m mount -a "src=/dev/myvg/mylv path=/data fstype=xfs state=mounted"

网站公告

今日签到

点亮在社区的每一天
去签到