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