Ansible批量运维化工具总结
一. 概要说明
Ansible是一个老牌的批量运维工具,它集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。它有如下优点:
Python
语言- 无客户端,不使用时系统开销为0
- 无服务器,直接运行命令
- 不需要安装
agent
二. 安装配置
ansible
的安装包在epel
仓库中,所有需要先安装epel-release
。如下是实验环境说明。
- 三台服务器
master、slave1、slave2
,在master
上安装ansible
。 - 当前登录用户为
work
,且有sudo
免密操作权限。 - 所有的操作都在
master
节点上进行。
# 配置hosts文件
sudo sh -c "cat << EOF >> /etc/hosts
172.16.1.110 master
172.16.1.120 slave1
172.16.1.130 slave2
EOF"
# 安装ansible
sudo yum install -y epel-release
sudo yum install -y ansible
# 修改配置
sudo sed -i '/host_key_checking = False/c\host_key_checking = False' /etc/ansible/ansible.cfg
sudo sed -i '/command_warnings = False/c\command_warnings = False' /etc/ansible/ansible.cfg
# 在当前目录下创建nodes.txt文件,文件内容为除本机外的所有的节点主机名
cat nodes.txt
slave1
slave2
# 添加ansible的hosts
sudo sed -i '$a\'"`hostname`"'\n[nodes]' /etc/ansible/hosts
sudo sed -i '$r nodes.txt' /etc/ansible/hosts
# 生成私钥公钥对
sudo yum install -y sshpass
ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N '' -q
# 远程创建用户work,配置密码,替换root登录密码123456,work用户密码123456
for host in `cat nodes.txt`; do sshpass -p 123456 ssh -o StrictHostKeyChecking=no root@$host "useradd work"; done
for host in `cat nodes.txt`; do sshpass -p 123456 ssh -o StrictHostKeyChecking=no root@$host "echo 123456 | passwd --stdin work"; done
# 配置nodes节点work用户sudo权限
for host in `cat nodes.txt`; do sshpass -p 123456 ssh -o StrictHostKeyChecking=no root@$host "sed -i -r '/root\s+ALL=\(ALL\)\s+ALL/a\work ALL=(ALL) NOPASSWD:ALL' /etc/sudoers"; done
# 配置work用户使用秘钥登录
for host in `cat nodes.txt` `hostname`; do sshpass -p 123456 ssh-copy-id -o StrictHostKeyChecking=no work@$host; done
# 测试ansible
ansible all -m ping
ansible all -m shell -a "ls /root" --become
三. 常用命令
ansible # Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
ansible-doc # Ansible 模块功能查看工具
ansible-galaxy # 下载/上传优秀代码或Roles模块的官网平台,基于网络的
ansible-playbook # Ansible 定制自动化的任务集编排工具
ansible-pull # Ansible 远程执行命令的工具
ansible-vault # Ansible 文件加密工具
ansible-console # Ansible基于Linux Consoble界面可与用户交互的命令执行工具
ansible-doc
# 查看 shell 模块的文档
ansible-doc -s shell
四. 常用模块
ansible
命令使用--become
来支持sudo
执行。
command
执行简单命令行,不支持管道。
ansible all -m shell -a "sed -n '/root/p' /etc/passwd"
shell
执行shell命令行,支持管道等操作。
ansible all -m shell -a "cat /etc/passwd | grep root"
copy
如果文件内容相同不会复制,不同才会复制。注意:如果是复制目录,不会删除远程目录多余的文件。适合复制单文件。
ansible nodes -m copy -a "src=/etc/security/limits.conf dest=/etc/security/" --become
synchronize
同步文件,将yum.repos.d
完全同步到远程。操作时要小心。
ansible nodes -m synchronize -a "src=/etc/yum.repos.d dest=/etc/ rsync_opts=--delete,--recursive=yes" --become