• 介绍
  • 工作原理
  • 安装(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

ansible功能使用 ansible -e_Ansible

可以看出,当前版本为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 所管理的服务。