ansible集群管理工具
离线安装包: smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/ansible_offline_tx1
playback实例在 ansible_playback_example 目录。
在繁星中增加ansible,作为集群管理工具。ansible工作的流程是,读取/etc/ansible/hosts主机列表,批量的、自动的使用ssh远程到主机上执行指令,我们可以用它获得子节点的状态,批量配置、更新程序
我们有三种使用方法:
- 写python或shell脚本,在脚本中编写复杂的指令组合,利用ansible的command模块将脚本和所需文件上传、执行。--此方法学习成本低,易上手。初级使用方法
- 使用ansible提供的module+playback。 module相当于shell命令(copy/ls/ps/apt-get等等),playback相当于shell脚本,将module组合执行。 --此方法需要需要学习各module的功能和参数,playback语法(yml),优点是反馈更清晰,流程掌控更好,playback比shell和python好写些。
- 编写python脚本,使用ansible-api。 --此方法最高级,我能想到的需要使用此方法的应用途径:需要解析反馈信息并根据反馈做出不同反应;需要在自己的服务中利用ansible实现批量控制功能,比如批量升级服务,需要将各子节点升级进度,升级状态,错误信息反馈到web。
中文说明文档:http://www.ansible.com.cn/docs/
常用模块使用方法:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html 。
安装
- 安装
繁星的离线包已放在sdv,放在主节点上执行install.sh即可
在自己主机上安装: pip install ansible 。然后安装sshpass(支持在配置文件中增加密码免询问)
配置
- 配置主机列表
mkdir /etc/ansible
vim /etc/ansible/hosts
文件实例
[starnet1]
ubuntu@192.168.66.7
#指定密码,支持sudo不询问密码
ubuntu@192.168.66.12 ansible_sudo_pass='ubuntu'
ubuntu@192.168.66.27 ansible_sudo_pass='ubuntu'
ubuntu@192.168.66.32 ansible_sudo_pass='ubuntu'
ubuntu@192.168.66.4 ansible_sudo_pass='ubuntu'
[starnet2]
#公司内部使用这种配置方法。
192.168.66.[2:41] ansible_ssh_pass="ubuntu" ansible_ssh_user="ubuntu" ansible_sudo_pass='ubuntu'
- 非交互式用户名密码方式(推荐公司内部采用此方式,方便但安全性低)
此方法需要安装sshpass。离线包已包含。密码需要已明文卸载配置中,不安全,在安全要求高的环境中禁止使用。但这个方法节省了对每个主机执行ssh-copy-id,是最方便的。参考配置文件中的starnet2组。在执行命令前,需要配置环境变量 export ANSIBLE_HOST_KEY_CHECKING=False,否则会报错。
执行 ansible starnet2 -m ping, 会向192.168.66.2,192.168.66.3 ... 192.168.66.41 测试是否连通。
- ssh公钥方式
ssh-keygen #一路回车
ssh-copy-id ubuntu@目标节点IP
#测试是否成功
ssh ubuntu@ip #不需要输入密码就能登录则说明成功
#也可以用root账户,输入密码。所有主机拷贝一次,后续就可以免密登陆了
#测试ping所有主机
ansible all -m ping
- 交互式用户名密码方式(询问密码)
ansible starnet1 -m ping --user=ubuntu -k
使用
“上传文件夹,执行脚本” 。这种模式可以批量部署程序
- 执行多条指令方式
#拷贝文件/文件夹
`ansible starnet -m copy -a "src=./ansible_offline_tx1 /home/ubuntu/"`
#在主机上执行shell命令
`ansible starnet -m command -a "chmod +x /home/ubuntu/ansible_offline_tx1/install.sh"`
`ansible starnet -m command -a "bash /home/ubuntu/ansible_offline_tx1/install.sh"`
以上两条指令结合,可满足大部分需求。
- playback方式
playback文件内容:
---
- hosts: starnet
sudo: yes
tasks:•
- name: copy dir to remote
copy: src=ansible_offline_tx1 dest=/home/ubuntu/ansible_offline_tx1
- name: run script
command: chmod +x install.sh
args:
chdir: /home/ubuntu/ansible_offline_tx1/
command: bash install.sh
args:
chdir: /home/ubuntu/ansible_offline_tx1/
保存 ansible_offline_tx1.yml
执行playback
ansible-playback ansible_offline_tx1.yml
ansible提供了非常多的module,常用模块使用方法:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html。
ansible-doc -l #可查看所有模块
ansible-doc 模块名 #查看某模块的使用方法,比如 ansible-doc apt ; ansible-doc pip ; ansible-doc ps
我这里的介绍只是快速入门方法,还有很多强大的功能,比如copy的backup特性,幂性,hosts的多级分组,定时任务等等 建议通读一遍中文说明文档:http://www.ansible.com.cn/docs/