作者:黄胜
Ansible批量自动化管理
1.ansible的介绍
Ansible是一个用来远程管理服务器的工具软件。
Ansible是一个用来批量部署远程主机上服务的工具。这里“远程主机(Remote Host)”是指任
何可以通过SSH登录的主机,所以它既可以是远程虚拟机或物理机,也可以是本地主机。
Ansible通过SSH协议实现管理节点与远程节点之间的通信。理论上来说,只要能通过SSH登录到
远程主机来完成的操作,都可以通过Ansible实现批量自动化操作。
涉及管理操作:复制文件、安装服务、服务启动停止管理、配置管等等。
2.Ansible特点
Ansible基于Python语言实现,由Paramiko和PyYAML两个关键模块构建。
Shell、Python是Linux运维学员必会的两门语言。
1)安装部署过程特别简单,学习曲线很平坦。
2)不需要单独安装客户端,只是利用现有的SSHD服务(协议)即可。
3)不需要服务端(no servers)。
4)ansible playbook,采用yaml配置,提前编排自动化任务。
5)ansible功能模块较多,对于自动化的场景支持丰富。
3.Ansible架构介绍(见图说明)
1、连接插件connectior plugins用于连接主机 用来连接被管理端
2、核心模块 core modules 连接主机实现操作, 它依赖于具体的模块来做具体的事情
3、自定义模块 custom modules,根据自己的需求编写具体的模块
4、插件 plugins,完成模块功能的补充
5、剧本 playbooks,ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6、主机清单 inventor,定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块
4.Ansible的实践
1.主机列表配置
cat >/etc/ansible/hosts<<EOF
[oldboy]
172.16.1.31
172.16.1.41
[oldgirl]
172.16.1.31
172.16.1.41
172.16.1.51
EOF
cat /etc/ansible/hosts
/etc/ansible/ansible.cfg #ansible的配置文件
2.Ansible 的配置文件连接认证优化
修改 /etc/ansible/ansible.cfg中的71行
70 # uncomment this to disable SSH key host checking
71 #host_key_checking = False
71行的注释取消:host_key_checking = False
3.批量非交互式分创建并发秘钥文件
创建秘钥:ssh-keygen -f ~/.ssh/id_rsa -P '' -q
分发秘钥脚本:
for ip in 7
do
sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.$ip
done
4.Ansible命令参数和模块的使用
4.1Ansible命令参数
-m MODULE_NAME, 模块名字,默认command
-a MODULE_ARGS, 模块参数
-f FORKS 并发进程数,默认5个。
-i INVENTORY(default=/etc/ansible/hosts)指定主机列表文件
4.2Ansible模块使用
(1)command模块(相当于在远端命令行执行命令)
例:ansible oldboy -m command -a "free -m" ——查看内存信息
特点:不能支持特殊字符,比如正则表达式,可选用shell模块替代。