一. 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 远程客户端
-
获取安装包,解决必要的依赖
[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 *
-
创建目录及文件
[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组。
-
添加本地解析
vim /etc/hosts 172.25.61.1 server1 172.25.61.2 server2 172.25.61.3 server3
-
免密操作
ansible的远程部署是通过ssh来进行通行的,所以服务端和客户端之间要做免密操作。
[devops@server1 ~]$ ssh-keygen
[devops@server1 ~]$ ssh-copy-id server2
[devops@server1 ~]$ ssh-copy-id server3
- 测试通信
列出所有主机列表]
[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"
}
四 、 ansible常用模块
使用ansible的模块如何获取帮助,ansible-doc加上模块来查看帮助
五 、 ansible常用命令及参数
ansible命令基础:ansible <主机或定义的分组> [选项]
-M 指定模块路径
-m 使用模块,默认command模块
-a 模块参数
-i inventory文件路径或可执行脚本
-k 使用交互式登陆密码
-e 定义变量vim
-v 详细信息,-vvvv开启debug模式
[devops@server1 ansible]$ ansible test -a 'df -h'
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 17G 1.1G 16G 6% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 13M 484M 3% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 1014M 121M 894M 12% /boot
tmpfs 100M 0 100M 0% /run/user/0
tmpfs 100M 0 100M 0% /run/user/1001
ansible server1 -m setup #产看指定主机server1上的facts变量信息
ansible * -m setup #查看指定的所有主机上的facts变量信息
ansible-doc -l:列出有哪些可用的模块,按q退出
ansible-doc -l | wc -l:列出有多少个可用的模块
ansible-doc -l | grep user:列出与user有关的模块
ansible-doc user:查看user模块的帮助文档,按q退出。也可以在最后一行输入/passwd,来过滤与passwd有关的内容
ansible test -a 'df -h' 在test组执行df -h命令