Ansible部署和模块应用
1.Ansible的概述
ansible 自动化运维工具,也叫机器管理工具。也可以实现批量管理成百上千的多台主机,是应用级别跨主机编排工具。
(1)ansible的特性
(1)无客户端agent,不需要在被控制的主机节点上安装任何客户端应用
(2)控制节点是通过ssh协议与被控制的主机节点通信的
(3)基于模块工作的,可以通过模块实现在被控制的主机节点上执行相应的操作
(4)很多模块具有幂等性,可以实现多次模块操作的状态如果没有发生改变,则不会重复执行

2.ansible 环境安装部署
systemctl disable --now firewalld
setenforce 0
vim /etc/selinux/config
disabled
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y epel-release
yum install -y ansible



-
ansible 目录结构
![]()
-
配置主机清单
![]()
![]()
-
配置密钥对验证
![]()
![]()
3.ansible 的常用模块
- ansible命令格式
ansible-doc -l #列出当前ansible支持的模块列表,按q退出
ansible-doc -s 模块名 #查看模块的详细信息
ansible 组名 -m 模块名 -a '模块参数'



(1)command 模块
在远程主机执行linux命令,但不支持管道、重定向等特殊符号,是ansible默认的模块
| 常用的参数 | |
|---|---|
| chdir | 在远程主机上运行命令前提前进入目录 |
| creates | 判断指定文件是否存在,如果存在,不执行后面的操作 |
| removes | 判断指定文件是否存在,如果存在,执行后面的操作 |









(2)shell 模块
在远程主机执行linux命令,支持管道、重定向等特殊符号
chdir 、 creates 、 removes


(3)cron 模块
在远程主机设置crontab计划任务
present表示添加(可以省略),absent表示移除。
| 常用的参数 | |
|---|---|
| minute | 分 |
| hour | 时 |
| day | 日 |
| month | 月 |
| weekday | 周 |
| job | 任务计划要执行的命令 |
| name | 任务计划的名称 |
| user | 指定计划任务属于哪个用户,默认是root用户 |


(4)user 模块
在远程主机管理用户账号
| 常用的参数 | |
|---|---|
| state=present 或 absent | 创建账号或者删除账号,present表示创建,absent表示删除 |
| system=yes 或 no | 是否为系统账号 |
| uid | 用户uid |
| group | 用户基本组 |
| groups | 用户所属附加组 |
| shell | 默认使用的shell |
| create_home=yse 或 no | 是否创建家目录 |
| password | 用户的密码,建议使用加密后的字符串 |
| remove=yes或no | 当state=absent时,是否删除用户的家目录 |





(5)group 模块
在远程主机管理组账号
name 、 gid 、 state=present|absent



(6)copy 模块
复制本地的文件/目录/内容到远程主机
| 常用的参数 | |
|---|---|
| dest | 指出复制文件的目标及位置,使用绝对路径,如果源是目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容 |
| src | 指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录 |
| mode | 指出复制时,目标文件的权限 |
| owner | 指出复制时,目标文件的属主 |
| group | 指出复制时,目标文件的属组 |
| content | 指出复制到目标主机上的内容,不能与src一起使用 |




(7)fetch
将远程主机的文件/目录复制到本地
src 、 dest

(8)file 模块
在远程主机管理文件/目录
path 、 mode 、 owner 、 group 、 state=absent|touch|directory|link 、 src(指定软链接源文件路径,path指定链接文件路径)





(9)hostname 模块
在远程主机设置主机名
name

(10)ping 模块
检测与远程主机的网络连通性

(11)yum/apt 模块
在远程主机通过yum|apt管理软件包
name state=present|latest|absent



(12)service/systemd 模块
在远程主机通过service|systemctl管理服务状态
| 常用的参数 | |
|---|---|
| name | 被管理的服务名称 |
| state=started或stopped或restarted或reloaded | 动作包含启动关闭或者重启 |
| enabled=yes或no | 表示是否设置该服务开机自启 |
| runlevel | 如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动 |




(13)script 模块
在远程主机执行脚本





(14)mount 模块
在远程主机执行挂载和解挂载操作
| 常用的参数 | |
|---|---|
| src | 定义挂载设备的路径 |
| path | 定义挂载到哪个目录,必须指定 |
| fstype | 指定挂载文件的系统类型,必须指定,xfs、iso9660、nfs... |
| opts | 定义挂载的参数,defaults、rw、ro... |
| state | 定义挂载的状态,mounted(进行挂载,修改/etc/fstab信息)、absent(永久性卸载,并修改 /etc/fstab信息)、unmounted(临时卸载,不修改/etc/fstab信息) |







(15)archive 模块
在远程主机压缩文件/目录
| 常用的参数 | |
|---|---|
| path | 必须参数,远程主机上需要被打包压缩的源文件/目录 |
| dest | 打包压缩后的包文件路径(包文件的父目录必须存在);如果包文件已存在,则会被覆盖 |
| format | 指定压缩类型,包括: bz2、gz(默认)、tar、xz、zip |
| remove=yes或no | 是否删除源文件 |



(16)unarchive 模块
将本地或远程主机的压缩包解压缩到远程主机的指定位置
| 常用的参数 | |
|---|---|
| copy | 默认为 copy=yes ,拷贝的文件从 ansible 主机复制到远程主机,copy=no 表示在远程主机上寻找源文件解压 |
| src | tar包源路径,可以是 ansible 主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需设置 copy=no |
| dest | 解压后文件的目标绝对路径 |
| remote_src | 和 copy 功能一样且互斥,设置 remote_src=yes 表示文件在远程主机上,设置为 remote_src=no 表示文件在 ansible 主机上 |




(17)replace 模块
在远程主机通过正则表达式匹配文件内容进行修改
| 常用的参数 | |
|---|---|
| path | 必须参数,指定要修改的文件 |
| regexp | 必须参数,指定一个正则表达式 |
| replace | 替换regexp参数匹配到的字符串 |
| backup=yes或no | 修改源文件前创建一个包含时间戳信息的备份文件 |
| before | 如果指定,则仅替换/删除此匹配之前的内容,可以和after参数结合使用 |
| after | 如果指定,则仅替换/删除此匹配之后的内容,可以和before参数结合使用 |
| owner | 修改文件用户名 |
| group | 修改文件组名 |
| mode | 修改文件权限 |






(18)setup 模块
通过ansible_facts组件收集远程主机的系统信息(facts信息)






4.inventory 主机清单
Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。
如果是名称类似的主机,可以使用列表的方式标识各个主机。
主机清单配置文件/etc/ansible/hosts
(1)格式
[组名]
主机IP[:ssh端口] #ssh端口默认为 22
主机名[:ssh端口]
主机IP[0:255] #设置连续的主机列表范围
主机名[a:z]
主机IP ansible_port= ansible_user= ansible_password= .... #设置主机变量
[组名:vars] #设置组变量
ansible_port=
ansible_user=
ansible_password=
....
[大组名:children] #设置组嵌套
组名1
组名2
....






(2)inventory 中的变量
| Inventory变量名 | 含义 |
|---|---|
| ansible_host | ansible连接节点时的IP地址 |
| ansible_port | 连接对方的端口号,ssh连接时默认为22 |
| ansible_user | 连接对方主机时使用的用户名。不指定时,将使用执行ansible或ansible-playbook命令的用户 |
| ansible_password | 连接时的用户的ssh密码,仅在未使用密钥对验证的情况下有效 |
| ansible_ssh_private_key_file | 指定密钥认证ssh连接时的私钥文件 |
| ansible_ssh_common_args | 提供给ssh、sftp、scp命令的额外参数 |
| ansible_become | 允许进行权限提升 |
| ansible_become_method | 指定提升权限的方式,例如可使用sudo/su/runas等方式 |
| ansible_become_user | 提升为哪个用户的权限,默认提升为root |
| ansible_become_password | 提升为指定用户权限时的密码 |
(1)主机变量




(2)组变量

表示为所有组内的所有主机定义变量

(3)组嵌套








浙公网安备 33010602011771号