1.什么是ansible

ansible 是一款开源自动化平台,是一个配置管理工具,自动化运维工具。

2.ansible的优点

**1)跨平台支持
2)人类可读自动化:ansible提供linux、windows、unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境。
3)完美描述应用:playbook
4)轻松管理版本控制:playbook是纯文本,可视作源代码。
5)支持动态清单。
6)编排可与其他系统轻松集成:puppet、jenkins。
7)基础架构即代码。
8)减少人为错误。
任务、play和playbook设计为具有幂等性,所以在运行playbook时,如果目标主机处于正确状态,则不会进行任何更改。

3.安装ansible

1)在rhel7中安装ansible,充当控制节点。
推荐使用pkgs和rpm来查找软件安装包。
首先在百度中搜索pkgs:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进入上面的链接后,接着再次输入验证码,找到安装包的下载网址,复制网址再浏览器中搜索下载即可。
在这里插入图片描述
通理下载sshpass安装包。
搭建yum源 解决ansible安装的依赖性问题。接着安装。

yum  install *.rpm  -y  ##安装刚下载的安装包

在这里插入图片描述
2)查看ansible版本信息
在这里插入图片描述
3)使用setup模块验证python
在这里插入图片描述

4.部署ansible

1)ansible的默认配置目录:/etc/ansible
默认配置文件:/etc/ansible/ansible.cfg
默认清单文件:/etc/ansible/hosts
在这里插入图片描述
一般在企业中为防止数据混乱,会建立新的配置文件和清单文件用来储存一类数据
2)构建ansible清单
什么是清单:定义了ansible将要管理的一批主机。
<1>静态清单
每行一个,填写主机名或ip,如:
在这里插入图片描述
在这里插入图片描述
还可以定义主机组:
[webservers]
rhel7_node2.westos.com
rhel8_node1.westos.com
192.168.43.30

[dbservers]
server1.westos.com
server2.westos.com
192.168.43.30
在这里插入图片描述
注意:一台主机可以存在于多个主机组中
验证上面的清单:

ansible  all   --list-hosts  ##查看清单中管理的所有主机

在这里插入图片描述

ansible webservers --list-hosts    ##查看webservers组中所有的主机
ansible dbservers --list-hosts ##查看dbservers组中所有的主机

在这里插入图片描述

ansible ungrouped --list-hosts  ##查看清单中不在组里面的主机

在这里插入图片描述
<2>定义嵌套组
ansible主机清单可以包含多个主机组构成的组,如:
[webservers]
rhel7_node2.westos.com
rhel8_node1.westos.com
192.168.43.30

[dbservers]
server1.westos.com
server2.westos.com
192.168.43.30

[servers:children]
webservers
dbservers
<3>通过范围简化主机规格
可以指定主机名称或ip范围或者数字和字母范围。
语法:[START:END]
如(1):192.168.43.[0:254] ##匹配192.168.43.0/24 ip的主机
在这里插入图片描述
在这里插入图片描述
如(2):server[01:10].westos.com ##匹配server01.westos.com到server10.westos.com所有主机,此方式不匹配server1.westos.com,只匹配server01.westos.com。
在这里插入图片描述
在这里插入图片描述
如(3):[a:c].westos.com ##匹配a.westos.com到c.westos.com的主机。

3)验证清单
ansible all --list-hosts ##查看所有受管主机
ansible webservers --list-hosts ##查看webservers组里面的受管主机
ansible ungrouped --list-hosts ##查看不再分组里面的受管主机

4)默认清单位置:/etc/ansible/hosts ##一般不使用,而是自己新建

5)动态清单:可以从开源社区的脚本中获取

练习(1):
在这里插入图片描述
在这里插入图片描述
列出上述清单中的所有受管主机:
在这里插入图片描述
列出不属于某个组的主机:
在这里插入图片描述
列出属于webservers组的主机:
在这里插入图片描述
练习(2)
自定义清单

mkdir  deploy-inventory    ##建立清单目录
vim  inventory    ##建立清单文件

在这里插入图片描述
列出主机:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.管理ansible配置文件

1)配置ansible
配置文件:
<1> /etc/ansible/ansible.cfg ##基本配置文件,如果找不到其他配置文件,使用这个
<2> ~/.ansible.cfg ##如果存在此配置并且当前工作目录中也,没有ansible.cfg,此文件代替/etc/ansible/ansible.cfg
<3> ./ansible.cfg ##执行ansible命令的目录中如果有ansible.cfg,就用它,不用上面俩个(推荐使用,上面俩个不常用)
<4> 显示使用的配置文件:
在这里插入图片描述
2)管理配置文件中的设置:
[defaults] ##部分设置ansible操作的默认值
[privilege_escalation] ##配置ansible如何在受管主机上在执行特权升级

例:
在这里插入图片描述
在这里插入图片描述
使用sudo进行权力的下放:
使用超级用户编辑文件:
vim /etc/sudoers.d/westos
westos ALL=(ALL) NOPASSWD:ALL

6.运行临时命令

使用临时命令可以快速测试和更改,无需编写playbook
1.格式:ansible host -pattern -m module [-a ‘module arguments’] [-i inventory]
2.检查能否在受管主机上运行python模块

在这里插入图片描述
3.使用临时命令通过模块执行任务

ansible-doc -l   ##列出所有模块

在这里插入图片描述

ansible-doc ping  ##查看ping模块的帮助文档

在这里插入图片描述
ansible模块
文件模块:

-copy将本地文件复制到其他受管主机
-file设置文件的权限和其他属性
-lineinfile确保特定行是否在文件中
-synchronize使用rsync同步内容

系统模块:

-firewalld使用firewalld管理任务端口和服务
-reboot重启
-service管理服务
-user添加、删除和管理用户账户

Net Tools模块:

-get_url通过http 、https、或者ftp下载文件
-nmcli管理网络
-uri与web服务交互

4.示例:
使用user模块确保westos用户存在于rhel7_node2.westos.com且uid为1000
在这里插入图片描述
由于输入密码会造成麻烦,所以倆台主机可以做免密登陆:

ssh-keygen   ##生成密钥
ssh-copy-id  rhel7_node2.westos.com  ##将密钥传到rhel7主机中

在这里插入图片描述
现在倆台主机已经可以免密登陆了,再来尝试刚才的命令,就可以直接执行成功了。
在这里插入图片描述
在受管主机上运行命令:
在这里插入图片描述
-o ##单行显示
在这里插入图片描述
注意:command 模块允许执行远程命令,但这些命令不是shell 处理,所以无法访问shell环境变量,所以不能执行重定向,传送等操作。

使用shell和command的区别:
在这里插入图片描述
在这里插入图片描述
使用command模块执行临时命令:

mkdir deploy-adhoc ##建立deploy-adhoc目录
cd  deploy-adhoc   ##进入目录
vim ansible.cfg  ##建立配置文件

在这里插入图片描述

vim inventory   ##建立清单文件

在这里插入图片描述

在这里插入图片描述
通过-u选项使用student进行连接并执行id 命令
在这里插入图片描述
注意(1):执行上面俩条命令时,需要在新建的目录中执行,否则结果不会变,即-u student 执行id 后结果和root的id是一致的。
注意(2):通过ansible使用command模块执行临时命令时,localhost和student需先做免密登陆。

免密登陆操作如下:

ssh-keygen ##先生成密钥
ssh-copy-id 主机名/ip   ##复制密钥

在这里插入图片描述
在这里插入图片描述
使用copy模块
1.首先使用student用户,因为student用户没有写权限,会失败
在这里插入图片描述
因为/etc/motd仅超级用户可写,其他用户不可写,所以得特权升级。

2.使用特权升级
注意:此处使用特权升级需要先编辑/etc/sudoers.d/student 文件

vim /etc/sudoers.d/student

在这里插入图片描述
现在以root身份来执行命令:

ansible localhost -m copy -a 'content="hello westos\n" dest=/etc/motd' -u student --become ##become指以root的身份来执行,content指编写的文件,dest指将文件放置的位置

在这里插入图片描述
执行结果为黄色是指执行不报错且对文件做了更改,为绿色代表执行结果不报错,但没对文件做任何更改。
查看结果:
在这里插入图片描述
使用all参数一次性更改localhost和rhel7_node2.westos.com
同样注意编辑/etc/sudoers.d/student 文件
localhost前面已经编辑过了,这里只要编辑rhel7_node2中的文件。
在这里插入图片描述
在这里插入图片描述
现在使用all参数一次性更改执行:

ansible all -m copy -a 'content="hello westos\n" dest=/etc/motd' -u student --become

在这里插入图片描述
在这里插入图片描述
可以看到localhost显示是SUCCESS,rhel7_node2.westos.com显示CHANGED,因为localhost已经处于
正确状态。

最后查看/etc/motd里面是否有添加的hello westos文件。
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐