Ansible 是一个自动化配置管理工具, 其服务器端和客户端使用SSH 方式通信,只需在服务器端安装Ansible程序,而客户端无需安装应用程序就能实现快速部署,简化了批量化部署的准备工作,采用22号端口通信也提高了安全性,避免额外开放端口造成一些安全隐患,简化了安全策略。

实验环境

系统版本:CentOS Linux release 7.4.1708 (Core)
Ansible版本:ansible-2.6.1-1.el7
关闭iptables, selinux
服务端名称:test1
客户端名称:test2

安装Ansible
wget下载Ansible安装包到路径 /root
wget https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.6.1-1.el7.ans.src.rpm

安装
yum -y install ansible-2.6.1-1.el7.ans.noarch.rpm

yum安装会关联python的相关包

=======================================================================================================
 Package                                               Arch                     Version                             Repository                                         Size
========================================================
Installing:
 ansible                                               noarch                   2.6.1-1.el7.ans                     /ansible-2.6.1-1.el7.ans.noarch                    52 M
Installing for dependencies:
 PyYAML                                                x86_64                   3.10-11.el7                         base                                              153 k
 libyaml                                               x86_64                   0.1.4-11.el7_0                      base                                               55 k
 python-babel                                          noarch                   0.9.6-8.el7                         base                                              1.4 M
 python-backports                                      x86_64                   1.0-8.el7                           base                                              5.8 k
 python-backports-ssl_match_hostname                   noarch                   3.5.0.1-1.el7                       base                                               13 k
 python-cffi                                           x86_64                   1.6.0-5.el7                         base                                              218 k
 python-enum34                                         noarch                   1.0.4-1.el7                         base                                               52 k
 python-idna                                           noarch                   2.4-1.el7                           base                                               94 k
 python-ipaddress                                      noarch                   1.0.16-2.el7                        base                                               34 k
 python-jinja2                                         noarch                   2.7.2-2.el7                         base                                              515 k
 python-markupsafe                                     x86_64                   0.11-10.el7                         base                                               25 k
 python-paramiko                                       noarch                   2.1.1-4.el7                         extras                                            268 k
 python-ply                                            noarch                   3.4-11.el7                          base                                              123 k
 python-pycparser                                      noarch                   2.14-1.el7                          base                                              104 k
 python-setuptools                                     noarch                   0.9.8-7.el7                         base                                              397 k
 python2-cryptography                                  x86_64                   1.7.2-2.el7                         base                                              502 k
 python2-pyasn1                                        noarch                   0.1.9-7.el7                         base                                              100 k
 sshpass                                               x86_64                   1.06-2.el7                          extras                                             21 k

Transaction Summary
========================================================

安装完成后,Ansible的配置目录在/etc/ansible,

/etc/ansible/
├── ansible.cfg          ansible的配置文件
├── hosts                  存放客户端文件列表
└── roles                   ansible的角色目录

需要将被管理节点的服务器名称添加到hosts文件里,否则ansible将不认识客户端,前提是这台主机名和IP必须先要加入到系统/etc/hosts文件里,才能被认识
例如直接将主机名test2添加到hosts文件内容末尾,不需要指定IP地址
也可以将其按组分类添加,组名称以中括号括起来,例如:

[testservers]
test2

添加完成后,测试ping, 运行命令ansible -m ping all, 表示对所有hosts文件里的主机进行ping测试,-m ping 表示使用ping模块,或者可以对单机或组进行ping 操作, ansible -m ping test2 或 ansible -m ping testservers。Ansible各模块的使用方法可以通过ansible-doc来查阅,例如ansible-doc -l 可以列出所有的模块及其描述,ansible-doc yum 可以指定模块具体查看其使用方法。
返回SUCCESS表示ping 通

test2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

如未添加主机解析或主机不可达,则返回错误

test3 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname test-rs2: Name or service not known\r\n", 
    "unreachable": true
}

Ansible分2种方式对客户端进行管理,一种是ad-hoc命令行方式,如上例的ping测试,另一种是更为强大灵活的playbook方式,playbooks采用yaml格式的配置文件来管理,具体的yaml配置文件语法可参考网络文档

比如利用copy模块将test1主机上的文件拷贝到test2 的/tmp目录下, 利用命令行的方式实现:
ansible -m copy -a "src=/etc/hosts dest=/tmp" test2, 实现类似于scp的功能

如果采用playbooks的方式,例如编写一个名为copy_file.yml的playbook

---
- hosts: test2                                       # 执行的对象为test2主机
  remote_user: root                             # 执行的用户为root账号
  tasks:                                                # 要执行的任务
    - name: copy file to test2                 # 任务的描述信息
      copy: src=/etc/hosts dest=/tmp    # 调用copy模块,指定源文件和目标地址

运行方法为使用ansible-playbook命令,如: ansible-playbook copy_file.yml

如果对test2主机yum 安装一个telnet程序yum_install.yml,playbook内容如下,执行的命令为 ansible-playbook yum_install.yml

---
- hosts: testservers                                        # 对testserver组进行安装
  remote_user: root                                        
  tasks:            
    - name: install telnet
      yum: name=telnet state=installed            # 调用yum模块,指定安装程序名和状态

采用playbook的配置方式可以更加方便地对管理主机进行部署,可以对任务进行分类,包括像新装主机的初始化配置、安装应用程序、拷贝文件,修改权限等等。一路配置下了感觉非常方便快捷,上手很容易,确实是运维的一大利器,比puppet什么的不知道高明到哪里去了, 虽然我们公司用的仍然是puppet,但感觉还是Ansible方便好用啊。


转载于:https://blog.51cto.com/carllai/2150902