Ansible自动化批量管理入门

ansible服务概念介绍

  1. 是基于python语音开发的自动化软件工具
  2. 是基于SSH远程管理服务实现远程管理主机
  3. 批量管理多台主机
  4. 提高运维工作效率
  5. 降低运维工作难度

ansible批量管理特点

优点:

  1. 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  2. 默认使用SSH协议对设备进行管理;
  3. 有大量常规运维操作模块,可实现日常绝大部分操作;
  4. 配置简单、功能强大、扩展性强;
  5. 轻链接、无需客户端(基于ssh,无需安装客户端,如zabbix的客户端要安装agent)
  6. 可读性强(采用YAML格式)

缺点:

  1. 对Windows系统的排斥(服务端无法安装在windows)
  2. 运行效率较低(task任务是串行运行;多台设备同事运行)

ansible批量管理部署

安装ansible

yum -y install epel-release
yum -y install ansible

ansible服务架构信息

  1. 主机清单配置(inventory:默认文件:/etc/ansible/hosts)
  2. 软件模块信息(module 通过其他语言编写而成,能实现某个特定的功能的工具,例如思科配置接口的模块,修改ip地址的模块等等)
  3. 基于秘钥连接主机
  4. 主机需要关闭selinux –不然ansible连接其他主机会报错
  5. 软件剧本功能

配置ansible

/etc/ansible/hosts — 主机清单
/etc/ansible/ansible.cfg — ansible服务配置文件
/etc/ansible/roles — 角色目录

基于密码连接配置

编辑/etc/ansible/host

1
2
3
4
5
6
7
8
9
10
11
12
13
# 方法一 主机+端口+密码
[webserver]
10.1.1.11 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456" 10.1.1.12 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456" 10.1.1.13 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"

# 方法二 主机+端口+密码
[webserver]
10.1.1.1[1:3] ansible_ssh_user=root ansible_ssh_pass="123456"

# 方法二 主机+端口+密码
[webserver]
10.1.1.1[1:3]
[webserver:vars]
ansible_ssh_pass="123456"

基于秘钥连接

1
2
3
4
5
6
7
8
9
10
11
12
13
# 方法一 主机+端口+密钥
[webserver]
10.1.1.11:22
10.1.1.12
10.1.1.13
10.1.1.16

# 方法一 别名主机+端口+密钥
[webserver]
node1 ansible_ssh_host=10.1.1.11 ansible_ssh_port=22
node2 ansible_ssh_host=10.1.1.12 ansible_ssh_port=22
node3 ansible_ssh_host=10.1.1.13 ansible_ssh_port=22
node6 ansible_ssh_host=10.1.1.16 ansible_ssh_port=22

主机组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 主机组变量名+主机+密码
[apache]
10.1.1.16
10.1.1.13
[apache.vars]
ansible_ssh_pass='123456'

# 主机组变量名+主机+密钥
[nginx]
10.1.1.1[1:2]

# 定义多个组,把一个组当另外一个组的组员
[webserver:children] #webserver组包括两个子组:apache nginx
apache
nginx

关闭的HostKeyChecking

1
2
3
4
5
The authenticity of host ‘10.1.1.13 (0.1.1.13)’ can’t be established.
RSA key fingerprint is b7:2f:12:ff:a8:97:a3:09:13:41:c0:e8:ab:7a:6f:ed.
Are you sure you want to continue connecting (yes/no)?

RSA host key for 10.1.1.13 has changed and you have requested strict checking

ansible连接新的host时会报错

修改下ssh的配置就可以了,当然,必须确定远程主机是可信任的

1
2
3
vim /etc/ansible/ansible.cfg 
# uncomment this to disable SSH key host checking
host_key_checking = False

Inventory内置参数

完整的连接行为控制变量参见官方手册:How to build your inventory — Ansible Documentation。下面解释几个常见的行为变量。

Inventory变量名含义例子
ansible_hostansible连接节点时的IP地址ansible_host=10.1.1.60
ansible_port连接对方的端口号,ssh连接时默认为22ansible_host=22
ansible_user连接对方主机时使用的主机名。不指定时,将使用执行ansible或ansible-playbook命令的用户ansible_user=boysec
ansible_password连接时的用户密码ansible_password=666666
ansible_connection连接类型,有效值包括smart、ssh、paramiko、local、docker、winrm,默认为smart。smart表示智能选择ssh和paramiko,当SSH支持ControlPersist(即持久连接)时使用ssh,否则使用paramiko。local和docker是非基于ssh连接的方式,winrm是连接windows的插件ansible_connection=ssh
ansible_ssh_private_key_file指定密钥认证ssh连接时的私钥文件ansible_ssh_private_key_file=/home/boysec/.ssh/key
ansible_become允许进行权限提升ansible_become=true
ansible_become_method指定提升权限的方式,例如可使用sudo/su/runas等方式ansible_become_method=sudo
ansible_become_user提升为哪个用户的权限,默认提升为rootansible_become_user=boysec
ansible_become_password提升为指定用户权限时的密码ansible_become_password=123456
ansible_become_exe提升用户程序的路径ansible_become_exe=/usr/bin/sudo

ansible命令

1
2
3
4
5
6
7
8
9
[root@ansible ~]# ansible -h
Usage: ansible <host-pattern> [options]
-a MODULE_ARGS #模块参数
-C, --check #检查语法
-f FORKS #并发
--list-hosts #列出主机列表
-m MODULE_NAME #模块名字
-o 使用精简的输出
-i 使用指定的Inventory文件

演示

1
2
3
ansible webservers -m shell -a 'uptime' -o
10.1.1.11 | CHANGED | rc=0 | (stdout) 09:20:46 up 2 days, 20:53, 2 users, load average: 0.02, 0.02, 0.05
10.1.1.12 | CHANGED | rc=0 | (stdout) 09:20:46 up 18:58, 2 users, load average: 0.00, 0.01, 0.05

命令说明

总结: ansible就是用什么模块,让谁干什么事情。