1:ansible的部署
Ansible的安装部署及使用
1:ansible的基本介绍
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
1.1:连接插件,connection plugins 负责和被监控实现通信
1.2:host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
1.3:各种模块核心模块, command模块 自定义模块;
1.4:借助于插件完成记录日志邮件等功能
1.5:playbook:剧本执行多个任务时,非必须可以然节点一次性运行多个任务。
2:特性:
2.1:不需要客户端,,基于模块进行安装,使用yaml编写playbook 基于SSH工作,
3:准备工作:
3.1:配置环境
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/enforcing/disabled/g' /etc/selinux/config
3.2 安装相关的依赖环境包
yum install -y python36 python36-pip git
/usr/bin/pip3.6 install virtualenv
3.3:下载ansible并进行安装配置
cd /opt/ && git clone -b stable-2.7 https://github.com/ansible/ansible.git
/usr/bin/pip3.6 install paramiko PyYAML jinja2
cd /opt/ansible/ && python3 setup.py install
3.4 创建ansible配置文件,并开启ansible日志
mkdir /opt/ansible/logs && cp /opt/ansible/examples/ansible.cfg /opt/ansible/
sed -i 's/#log_path/log_path/' /opt/ansible/logs/ansible.cfg
ansible –version #检查ansible的版本
3.5生成公钥和私钥
ssh-keygen -t rsa #生成公钥和私钥
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.171.6
vim /etc/ssh/ssh_config
27 GSSAPIAuthentication yes
vim /opt/ansible/ansible.cfg
14 inventory = /opt/ansible/hosts (这个地方根据需要自定义位置)
71 host_key_checking = False
188 command_warnings = False
cp /opt/ansible/ansible.cfg /opt/script/
vim /opt/ansible/hosts
[dns]
192.168.171.6
4: 配置文件并执行ansible
ansible all -m ping
2:ansible的模块及命令
command 模块
例:ansible dns -m command -a 'free -m'
ansible模块和ping 模块
例:ansible-doc -l #列出所有模块
ansible-doc 模块名 #列出模块的帮助文档
shell 模块
例:ansible dns -m shell -a 'df -h'
script模块
例:先编写脚本
vim disk.sh
#!/bin/bash
ansible ip -i host.conf -uroot -k -m shell -a 'df -hT|grep 'home';hostname'|tee > /tmp/1.txt
ppovd_num=`grep "CHANGED" /tmp/1.txt|wc -l`
failure_ip=`grep "UNREACHABLE" /tmp/1.txt|awk -F \| '{print $1}'`
if [ $ppovd_num -eq $total_ppovd_num ]; then
sed -i 's# | CHANGED | rc=0 >>##g' /tmp/1.txt
sed -ir 's#...../home$##g' /tmp/1.txt
sed -ir 's/^.*xfs//g' /tmp/1.txt
sed -ir 's#^.*ext4##g' /tmp/1.txt
cat /tmp/1.txt| xargs -n 5|column -t|sort -k 5 > /tmp/2.txt
paste /tmp/2.txt link_addr.txt > /tmp/print.txt
sed -i '1i IP地址 磁盘总空间 已使用空间 剩余空间 主机名 后台地址' /tmp/print.txt
column -t /tmp/print.txt
else
echo "磁盘获取成功$ppovd_num台少于$total_ppovd_num台ppovd,请重新执行"
echo "磁盘获取未成功IP是: $failure_ip"
fi
ansible ip -m script -a './opt/script/disk.sh'
copy模块:复制文件到远程主机
例:ansible all -m copy -a 'src=/etc/passwd dest=/tmp' #复制文件下的passwd到所有主机的/tmp/目录下
yum模块和service模块
例:ansible all -m yum -a 'state=installed name=nginx' #安装nginx
ansible all -m service -a 'state=started name=nginx enable=yes' #启动nginx 并设置开机自启
lineinfile模块和replace模块
例:ansible all -m linefile -a 'path=/etc/sysconfig/network-scripts/ifcfg-ens33 regexp="^IPADDR" line="IPADDR=192.168.171.7" ' 整行替换
ansible all -m replace -a 'path=/etc/sysconfig/network-scripts/ifcfg-ens33 regexp="\.1\.1" replace=".1.254" ' 匹配指定的部分
3:andible的playbook文件编写
vim disk.yml
---
- hosts: web
remote_user: root
tasks:
- shell: uptime |awk '{printf("%.2f",$(NF-2))}'
register: resutl
- service:
name:nginx
state: stopped
when: result.stdout|float >0.7
ansible-playbook disk.yml