Ansible 是一个自动化配置管理工具, 其服务器端和客户端使用SSH 方式通讯,只需在服务器端安装Ansible程序,而客户端无需安装应用程序就能实现快速部署,简化了批量化部署的准备工做,采用22号端口通讯也提升了安全性,避免额外开放端口形成一些安全隐患,简化了安全策略。python
实验环境linux
系统版本: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.rpmbabel
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地址
也能够将其按组分类添加,组名称以中括号括起来,例如: ssh
[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 通ide
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方便好用啊。