- 介绍
- 工作原理
- 安装(yum install -y xxx)
- 主机清单(/etc/ansible/hosts文件)
- 设置远程主机的免密登录
- 模块
- 查看所有已安装的模块
- 查看具体模块的用法
- 使用模块
- 常用模块
介绍
Ansible 是一个自动化运维工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。
Ansible 用 Python 编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如 Salt、Puppet、Chef等),但它们各有优劣,而Ansible的特点在于它的简洁。让 Ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的另一个优点,如果需要的话,你可以在不止一个地方控制你的整个基础架构
工作原理
1、模块
2、主机清单
安装(yum install -y xxx)
1、epel-release
EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,可以为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包。装上了 EPEL之后,就相当于添加了一个第三方源。
2、ansible
# 安装ansible
yum install -y ansible
# 验证
ansible --version
可以看出,当前版本为2.9.18,陪着文件在/etc/ansible
目录下
主机清单(/etc/ansible/hosts文件)
1、直接写入IP
ip1
ip2
2、主机分组再写入
[groupname]
ip1
ip2
设置远程主机的免密登录
先在本机生成密钥
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''
将密钥同步到远程主机
ssh-copy-id 远程主机IP
输入密码后即可设置成功,随后可使用ssh进行登录验证
模块
查看所有已安装的模块
ansible-doc -l
查看具体模块的用法
ansible-doc module_name
使用模块
ansible pattern [-i inventory] -m module -a argument
选项参数解释
pattern
在 ansible 中, 将其叫做pattern , 即匹配,这里的 all 是匹配所有指定的所有被管理服务器。-i
指定保存被管理服务器的文件。-m
指定要运行的模块,比如这里的 ping 模块和 copy 模块。-a
指定模块的参数, 这里模块 ping 没有指定参数。 模块 copy 指定了 src 和 dest 参数。
1、ping模块:测试主机之间的连通性
# ansible 主机IP|分组名称 -m ping
2、cron模块:定义周期性计划的任务
# 在被管理主机上查看周期性计划的任务
crontab -l
# ansible 主机IP|分组名称 -m cron -a 'name="xxx" job="xxx"'
# 其中name为任务名,job为任务执行语句
3、copy模块:将本机文件复制到远程主机
# ansible 主机IP|分组名称 -m copy -a "src=xxx dest=xxx"
# 其中src为本机文件路径,dest为远程主机文件路径
4、command & shell 模块:在远程服务器上去执行命令
command模块是ad-hoc的默认模块,在执行ad-hoc时,若不指定模块的名字则默认使用此模块。
比较:
shell模块可以执行SHELL的内置命令和特性(如管道符)
command模块无法执行SHELL的内置命令和特性
# ansible all -i hosts -a "echo 'hello'"
172.18.0.4 | CHANGED | rc=0 >>
hello
172.18.0.3 | CHANGED | rc=0 >>
hello
# ansible all -i hosts -m shell -a "echo 'hello'"
172.18.0.4 | CHANGED | rc=0 >>
hello
172.18.0.3 | CHANGED | rc=0 >>
hello
5、script模块:将管理节点上的脚本传递到被管理节点(远程服务器)上进行执行。
例如先在管理节点上新建一个脚本
# cat /root/a.sh
touch /tmp/testfile
执行
[root@qfedu.com ~]# ansible webservers -i hosts -m script -a "/root/a.sh"
172.18.0.4 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 172.18.0.4 closed.\r\n",
"stderr_lines": [
"Shared connection to 172.18.0.4 closed."
],
"stdout": "",
"stdout_lines": []
}
6、yum_repsitory:给远程主机添加 YUM 仓库
常用模块
name
仓库名称,就是仓库文件中第一行的中括号中名称,必须的参数。description
仓库描述信息,添加时必须的参数baseurl
yum存储库 “repodata” 目录所在目录的URL,添加时必须的参数。
它也可以是多个URL的列表。file
仓库文件保存到被管理节点的文件名,不包含.repo
。 默认是name
的值。state
present 确认添加仓库文件, absent 确认删除仓库文件。gpgcheck
是否检查 GPG yes|no, 没有默认值,使用/etc/yum.conf
中的配置。
7、yum 模块:等同于 Linux 上的YUM 命令, 对远程服务器上RPM包进行管理
name 要安装的软件包名, 多个软件包以英文逗号(,) 隔开
state 对当前指定的软件安装、移除操作(present installed latest absent removed)
支持的参数
- present 确认已经安装,但不升级
- installed 确认已经安装
- latest 确保安装,且升级为最新
- absent 和 removed 确认已移除
8、systemd 模块:管理远程节点上的 systemd 服务,就是由 systemd 所管理的服务。