目录
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)组嵌套