ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
控制节点(Control node):指安装了Ansible的主机,也叫Ansible服务器端,管理机。 Ansible控制节点主要用于发布运行任务,执行控制命令。Ansible的程序都安装在控制节点上,控制节点需要安装Python和Ansible所需的各种依赖库。注意:目前Ansible还不能安装在Windows下。
受控节点(Managed nodes):也叫客户机,就是想用Ansible执行任务的客户服务器。
部署ansible的主机可以上网,真机充当路由器
/etc/resolv.conf
,加入权威dns:114.114.114ip route add default via 172.25.254.44
进入epel后根据相应的版本进行配置(我的虚拟机是rhel8的版本)
##安装 epel 配置包
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
##将 repo 配置中的地址替换为阿里云镜像站地址
sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/epel.repo h
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repottp://mirrors.aliyun.com/repo/epel-6.repo
vim rhel7.6.repo
[Aliyun]
name=Aliyun
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
enable=1
默认配置文件 /etc/ansible/ansible.cfg
默认清单配置文件 /etc/ansible/hosts
清单就是ansible控制主机的列表
/etc/ansible/hosts
2 直接受控主机的域名或ip
/etc/ansible/hosts
列出ansible的所有清单:ansible all --list-host
2设定受管主机的组【组名称】
默认清单配置文件位于/etc/ansible/hosts中,但是通过ansible.cfg配置文件中修改此位置。也
可以通过-i指定读取hosts清单的文件路径
ansible命令指定清单的正则表达式
符号 | 含义 |
---|---|
* | 所有 |
:& | 逻辑与 |
:! | 逻辑或 |
~ | 以关键字开头 |
部署三台客户机:nod1,nod2,nod3
一台管理机:ansible
(1)使用交互式密码批量检测主机时必须指定登陆的密码,否则无法成功执行主机的检测
ansible all -m ping -u root
## all 清单中的所有客户机
## -m 指定模块
## -u 指定用户
ansible all -m ping -u root -k
## all 清单中的所有客户机
## -m 指定模块
## -u 指定用户
## -k 使用交互式密码
每次交亏输入密码比较麻烦,使用 key 方式认证,是一个不错的选择
在管理机(ansible用户)生成SSH密钥,然后将SSH公钥发送到到所有客户机,第一次需要输入客户机的密码,以后就可以直接用证书登陆
在部署之前需要保证管理主机和受控主机能够基于ssh密钥的方式进行远程连接管理主机生成SSH密钥(私钥和公钥),分发公钥到每台受控主机:
ssh-keygen ##生成SSH密钥
cd /root/.ssh/
for i in 1 2 3; do ssh-copy-id -i id_rsa.pub [email protected].$i; done
ansible all -m ping -u root ##将SSH公钥发送到到客户机1,2,3
格式
ansible 清单中组名称 -m 模块 -u remote_user
/etc/ansible/ansible.cfg
:基本配置文件,找不到其他配置文件此文件生效~/.ansible.cfg
:用户当前目录中没有ansible.cfg,此文件生效./ansible.cfg
:优先级最高 inventory ##指定清单路径
remote_user ##是ansible使用/usr/bin/ansible-playbook连接的默认用户名. 注意如果不指定,/usr/bin/ansible默认使用当前用户名称
local_tmp = ##本机临时命令执行目录
remote_tmp = ##远程主机临时py文件存放的目录
ask_pass= ##是否提示输入SSH密码,如果公钥登陆设定为false
library = ##库文件存放目录
forks = 5 ##默认并发数量
sudo_user = ##默认sudo用户
ask_sudo_pass = ##每次受控主机执行ansible命令时是否询问sudo密码
model_name = ##默认模块,默认使用command,可以修改为shell
log_path = ##日志文件存放路径
privilege_escalation] ##身份信息设定
#become=True ##连接后是否自动切换用户
#become_method=sudo ##设定切换用户的方式,通常用sudo
#become_user=root ##在受控主机中切换到的用户,通常为root
#become_ask_pass=False ##是否需要为become_method提示输入木马,默认为false
(1)指定清单路径
(2)ansible 命令执行时本机的命令执行目录和远程主机的py文件存放目录
ansible 命令执行过程
加载自己的配置文件,默认/etc/ansible/ansible.cfg;
查找对应的主机配置文件,找到要执行的主机或者组;
加载自己对应的模块文件,如 command;
通过ansible将模块或命令生成对应的临时py文件(python脚本), 并将该文件传输至远程服务器;
对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件;
给文件 +x 执行权限;
执行并返回结果;
删除临时py文件,退出
是否提示输入SSH密码,如果公钥登陆设定为false
#在受管主机上登陆的用户名称