文章目录
1.ansible简介
1.1 什么是ansible
ansible是一款开源自动化平台,是一个配置管理工具,自动化运维工具。
ansible基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
1.2 ansible的优点
1.支持跨平台操作:ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境
2.可读性强:减少人为错误,在运行playbook时,如果目标主机处于正确状态,则不会进行任何更改。
3.完美描述应用:playbook(具有幂等性)
4.轻松管理版本控制:playbook是纯文本,可视作源代码
5.支持动态清单
6.编排可与其他系统轻松集成:puppet、jenkins
7.基础架构即代码:简单的任务用命令即可完成
2. ansible的安装
1.在服务端上安装ansible,充当控制节点
yum install -y ansible
2.查看ansible版本信息
ansible --version
3.使用setup模块验证python
ansible -m setup localhost | grep ansible_python_version
2.1 在rhel8中安装
(有些可以直接用红帽自带ansible安装)
2.2 在rhel7中安装
3.ansible的部署(构建ansible清单)
清单定义了ansible将要管理的一批主机
1.静态清单
(1)定义单独主机:每行一个,填写主机名或ip
www.westos.org ##主机名
或者
172.25.254.250 ##主机IP
(2)定义主机组:
[webservers]
server1.westos.org
server2.westos.org
172.25.0.1
[dbservers]
node1.westos.org
node1.westos.org
'注意:一台主机可以存在于多个主机组
2.定义嵌套组
ansible主机清单可以包含多个主机组构成的组
[webservers]
server1.westos.org
server2.westos.org
172.25.0.1
[dbservers]
node1.westos.org
node1.westos.org
[servers:children]
webservers
dbservers
3.通过范围简化主机规格
语法:[START:END]
可以指定主机名称或ip范围或者数字和字母范围
172.25.[0:4].[0:254] | 匹配172.25.0.0/24,172.25.1.0/24 … |
---|---|
server[01:10].example.com | 匹配server01.example.com到server10.example.com所有主机,此方式不匹配server1,只匹配server01 |
[a:c].example.com | 匹配a.example.com到c.example.com |
4.验证清单
ansible workstation.lab.example.com --list-hosts
ansible all --list-hosts
显示所有受管主机
ansible dbservers --list-hosts
显示dbserver里的受管主机
ansible ungrouped --list-hosts
显示不在组中的受管主机
5.默认清单位置
/etc/ansible/hosts
注意:为了操作安全和便于管理一般不使用,而是自己新建
6.自定义清单列表
(1)建立清单目录
mkdir deploy-inventory
(2)编辑清单文件
vim deploy-inventory/inventory
(3)列出主机
ansible all -i inventory --list-hosts 列出所有主机(-i指定清单)
ansible ungrouped -i inventory --list-hosts 列出未分组的主机
ansible www -i inventory --list-hosts #列出www组中的主机
ansible westos -i inventory --list-hosts #westos组包含www组和bbs组
7.动态清单
动态清单可以从开源社区的脚本中获取
4.ansible的部署(管理ansible配置文件)
4.1 ansible的配置文件
(1)/etc/ansible/ansible.cfg
基本配置文件,如果找不到其他配置文件,使用这个
(2) ~/.ansible.cfg
如果存在此配置并且当前工作目录中也没有ansible.cfg,此文件替代/etc/ansible/ansible.cfg
(3) 当前目录下的 ./ansible.cfg
执行ansible命令的目录中如果有ansible.cfg,就用它,不使用上面两个(推荐使用,上面两个不常用)
(4)显示使用的配置文件
ansible red -i inventory --list-hosts -v
4.2 管理配置文件中的设置
[defaults] 部分设置ansible操作的默认值
[privilege_escalation] 配置ansible如何在受管主机上执行特权升级
vim ansible.cfg
[defaults]
inventory = ./inventory
remote_user = blue #指定登录受管主机的用户,如不指定则使用当前用户名称
ask_pass = false #是否提示输入ssh密码,做了免密就可以设置为false,否则需为true
host_key_checking = False #跳过ssh的key检查
[privilege_escalation]
become = true #连接到受管主机上是否进行身份切换
become_method = sudo #切换方式,默认为sudo
become_user = root #切换到的用户
become_ask_pass = false #是否需要为become_method提示输入密码,默认为false
使用sudo进行权限下放(在受管主机用户中操作)
vim /etc/sudoers
或者visudo
(注意使用超级用户编辑文件)
sudo命令的配置建议写在/etc/sudoers.d/目录下的文件中。另外要注意:如果使用这种方式修改sudoers,需要在/etc/sudoers文件的最后行加上 #includedir /etc/sudoers.d语句(默认已有)。
blue ALL=(ALL) NOPASSWD: ALL
在此为了方便,对在配置文件中的设定的指定受管主机用户进行了ssh免密操作
测试: