一.ansible介绍
当下有许多的运维自动化工具(配置管理 ),例如:Chef、Ansible、SaltStack、Puppet、Fabric 等。
Ansible 一种集成 IT 系统的配置管理、应用部署、执行特定任务的开源平台,是 AnsibleWorks 公司名下的项目,该公司由 Cobbler 及 Func 的作者于 2012 年创建成立。
Ansible 基于 Python 语言实现,由 Paramiko 和 PyYAML 两个关键模块构建
ansible的特点
部署简单,只需在主控端部署 Ansible 环境,被控端无需做任何操作。
默认使用 SSH(Secure Shell)协议对设备进行管理。
主从集中化管理。
配置简单、功能强大、扩展性强。
支持 API 及自定义模块,可通过 Python 轻松扩展。
通过 Playbooks 来定制强大的配置、状态管理。
对云计算平台、大数据都有很好的支持。
提供一个功能强大、操作性强的 Web 管理界面和 REST API 接口 —- AWX 平台
二.具体搭建步骤
系统环境 | RHEL |
---|---|
server1(172.25.61.1) | (webserver)ansible服务端 |
server2(172.25.61.2) | test 远程客户端 |
server3(172.25.61.3) | db 远程客户端 |
1.获取安装包,解决必要的依赖
[root@server1 ~]# ls
ansible-2.7.8-1.el7.noarch.rpm python-httplib2-0.9.2-0.1.el7.noarch.rpm
libtomcrypt-1.17-25.el7.x86_64.rpm python-keyczar-0.71c-2.el7.noarch.rpm
libtommath-0.42.0-5.el7.x86_64.rpm python-paramiko-2.1.1-0.9.el7.noarch.rpm
python2-crypto-2.6.1-13.el7.x86_64.rpm sshpass-1.06-1.el7.x86_64.rpm
python2-jmespath-0.9.0-1.el7.noarch.rpm
[root@server1 ~]# yum install -y *
2.创建目录及文件
[root@server1 ~]# useradd devops
[root@server1 ~]# su - devops
ansible服务端创建一个普通用户,server2和server3创建同样的用户并配置密码,注意要保持三台机子创建的用户uid与gid要保持一致
[root@server2 ~]# useradd devops
[root@server2 ~]# passwd devops
Changing password for user devops.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
创建一个目录来存放ansible服务的文件
[devops@server1 ~]$ mkdir ansible
[devops@server1 ~]$ ls
ansible
[devops@server1 ~]$ cd ansible/
[devops@server1 ansible]$ ls
ansible.cfg inventory
[devops@server1 ansible]$ cat ansible.cfg
[defaults]
inventory = inventory
[devops@server1 ansible]$ cat inventory
[test]
server2
[db]
server3
[webservers:children]
test
db
server2属于web组,server3主机属于db组,名字可以自己定义,这两组都属于webserver组。
3.添加本地解析
vim /etc/hosts
172.25.61.1 server1
172.25.61.2 server2
172.25.61.3 server3
4.免密操作
ansible的远程部署是通过ssh来进行通行的,所以服务端和客户端之间要做免密操作。
[devops@server1 ~]$ ssh-keygen
[devops@server1 ~]$ ssh-copy-id server2
[devops@server1 ~]$ ssh-copy-id server3
5.测试通信
列出所有主机列表
[devops@server1 ansible]$ ansible all --list-hosts
hosts (2):
server3
server2
检测连接情况,-m表示调用模块,这里调用ping模块
[devops@server1 ansible]$ ansible all -m ping
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}