31.ansible自动化运维

一、ansible简介
(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.在node1上安装ansible,充当控制节点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.查看ansible版本信息
在这里插入图片描述
3.使用setup模块验证python
在这里插入图片描述
二、部署ansible
(1)构建ansible清单
清单:定义了ansible将要管理的一批主机
静态清单:每行一个,填写主机名或ip,如:
在这里插入图片描述
(注:一台主机可以存在于多个主机组)
(2)定义嵌套组
在这里插入图片描述
(3)通过范围简化主机规格
可以指定主机名称或IP范围或数字和字母范围
语法:[START:END]
172.25.[0:4].[0:254] #匹配172.25.0.0/24,172.25.1.0/24 …
server[01:10].example.com #匹配server01.example.com到server20.example.com所有主 机,此方式不匹配server1,只匹配server01
[a:c].example.com #匹配a.example.com到c.example.com
(4)默认清单位置
/etc/ansible/hosts#一般不使用,而是自己新建
(5)验证清单
在这里插入图片描述
(6)动态清单
在这里插入图片描述
在这里插入图片描述
列出清单中所有受管主机:
在这里插入图片描述
列出属于webservers组的主机:
在这里插入图片描述
列出不属于某个组的主机:
在这里插入图片描述
(7)自定义清单
建立清单目录:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-i指定清单:
在这里插入图片描述
列出webservers组中的主机:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三、管理ansible配置文件
(1)配置ansible
配置文件:
/etc/ansible/ansible.cfg :基本配置文件,如果找不到其他配置文件,使用这个
~/.ansible.cfg :如果存在此配置并且当前工作目录中也没有ansible.cfg,使用这个
./ansible.cfg :执行ansible命令的目录中如果有ansible.cfg,就用它,不使用上面两个
显示使用的配置文件:
在这里插入图片描述
管理配置文件中的设置:
在这里插入图片描述
在这里插入图片描述
使用sudo进行权限下放:
在这里插入图片描述
在这里插入图片描述
四、运行临时命令
使用临时命令可以快速测试和更改,无需编写playbook
(1)格式
ansible host-pattern -m module [-a ‘module arguments’] [-i inventory]
(2)检查在受官主机上运行Python模块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)使用临时命令通过模块执行任务
列出所有模块:
在这里插入图片描述
查看ping模块帮助文档:
在这里插入图片描述
(4)ansible模块
文件模块:-copy:将本地文件复制到受管主机
-file:设置文件的权限和其他属性
-lineinfile:确保特定行是否在文件中
-synchronize:使用rsync同步内容

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

Net Tools模块: -get_url:通过http、https、或者ftp下载文件
-nmcli:管理网络
-uri:与web服务交互
例如:使用user模块确保westost用户存在于node2.westos.com且uid为1000
输出第一行为状态报告,显示主机名称和操作结果;第二行为命令输出
在这里插入图片描述
加上-o参数,单行显示:
在这里插入图片描述
注意:command模块允许执行远程命令,但这些命令不是shell处理,所以无法访问shell环境 变量,所以不能执行重定向、传送等操作
使用shell和command的区别:
在这里插入图片描述
(5)使用command模块执行临时命令:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(执行上面两条命令时,需要在新建的目录中执行,否则结果不会变)
(6)使用copy模块
首先使用westost用户,因为westos用户没有写权限,会失败
在这里插入图片描述
在这里插入图片描述
以root身份执行:
在这里插入图片描述
使用all参数一次更改node2和localhost:
对node2进行权利下放:
在这里插入图片描述
localhost显示SUCCESS,node2显示CHANGED,因为localhost已经处于正确状态:

在这里插入图片描述
在这里插入图片描述
查看:
在这里插入图片描述
五、实施playbook
(1)查看指定用户临时命令:
在这里插入图片描述
yaml 格式通常以 yml 为扩展名,yaml 对于缩进量没有严格要求,但是有两个基本原则:
1.处于同一层次结构中同一级别的数据元素必须具有相同的缩进量
2.如果项目属于其他项目的子项,其缩进量必须大于父项
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改写playbook
在node2中安装Apache:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
确保开机启动:
在这里插入图片描述
在这里插入图片描述
(2)提高输出详细程度(ansible-playbook 默认输出不提供详细任务执行信息)
-v #显示任务结果
-vv #显示任务结果和任务配置
-vvv #包含关于与受管主机的连接信息
-vvvv #增加连接插件相关的额外详细程度选项(包括受管主机上用于执行脚本的用户及所 执行的脚本)
(3)执行playbook前最好执行语法检测
无语法错误:
在这里插入图片描述
(4)执行空运行
空运行会报告执行这个 playbook 将会发生什么,但不会改变目标主机:
在这里插入图片描述
(5)练习:安装、配置默认发布页面、启动Apache
在这里插入图片描述
创建配置文件和清单:
在这里插入图片描述
默认发布页面:
在这里插入图片描述
检测语法:
在这里插入图片描述
执行playbook:
在这里插入图片描述
测试:
在这里插入图片描述
六、实施多个playbook
(1)模板:
在这里插入图片描述
列出所有模块:
在这里插入图片描述
列出yum的用法和示例:
在这里插入图片描述
终端中输出 yum 模块中各参数的用法:
在这里插入图片描述
(2)练习:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
七、管理变量和事实
将playbook中的某些值用变量代替,从而简化playbook的编写
(1)ansible变量简介
1>变量可以包含:要创建的用户、要安装的软件包、要重启的服务、要删除的文件、要从互联网检索的文档
2>命名变量:变量命名必须以字母开头,并且只能含有字母、数字、下划线
3>定义变量:
全局范围:从命令行或 ansible 配置文件设置的变量
主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量
play 范围:在 play 和相关结构中设置的变量(范围最窄)
(如果多个级别上定义了相同名称的变量,优先采用级别最高的变量,窄范围优先于广范围)
(2)在playbook中定义变量
1> 常见方式:在 playbook 开头的 vars 块中
在这里插入图片描述
2> 在外部文件定义 playbook 变量
在这里插入图片描述
在 users.yml 文件中写入:
在这里插入图片描述
在这里插入图片描述
(3)在playbook中使用变量
在这里插入图片描述
(注意:当变量用作开始一个值的第一元素时,必须使用引号)
(4)主机变量和组变量
1> 直接应用于主机的变量分为两大类:主机变量、组变量
主机变量:应用于特定主机
组变量:应用于一个主机组或一组主机组中的所有主机
主机变量优先于组变量,但是 playbook 中定义的变量比这两者更高
2> 定义主机变量和组变量
方法一:这种做法使的清单文件难以处理,在同一文件中混合提供主机和变量信息,语法也过时
在这里插入图片描述
方法二:使用目录填充主机和组变量
定义主机和主机组变量的首选做法是:在与清单文件或目录相同的工作目录中,创建 group_vars 和 host_vars 两个目录,这两个目录分别包含用于定义组变量和主机变量的文件
所以一个项目目录中包含: ansible.cfg、group_vars、host_vars、inventory、playbook.yml
(清单变量可以被 playbook 中设置的变量覆盖 ,两者又可通过命令行参数覆盖)

在这里插入图片描述
(5)使用已注册变量捕获命令输出
管理员可以使用register语句捕获命令输出:
在这里插入图片描述
(6)练习
创建 playbook,来安装 apache 并开启,使可被访问,playbook 查询 web 服务器并确认它已经设置好并在运行
在这里插入图片描述
vim playbook.yml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
八、管理机密
目标:使用 ansible vault 加密敏感变量,并运行 vault 加密变量文件的 playbook
ansible vault :ansible 可能需要访问密码或者 api 密钥等敏感数据,以便配置主机。
加密解密工具:ansible-vault 命令
(ansible vault 不实施自有的加密函数,而使用外部 python 工具集)
(1)创建加密文件
在这里插入图片描述
创建加密文件同时将密码保存,mima 文件中必须先写入密码:
在这里插入图片描述
查看加密文件:
在这里插入图片描述
(2)加密现有的文件
原理:将文件解密为一个临时文件,并编辑;保存时,复制内容并删除临时文件;
edit 命令始终重写文件,因此只有在更改文件时使用,查看尽量使用 view
在这里插入图片描述
加密现有的文件:
在这里插入图片描述
在这里插入图片描述
可以使用–output=filename 将加密文件保存为新的名称,使用此参数时输入文件只能是一个
(3)解密现有的文件:
在这里插入图片描述
解密的同时改名:
在这里插入图片描述
(4)更改加密文件密码
在这里插入图片描述
(5)playbook 和 ansible-vault
运行加密的 playbook,没有密码则报错:
在这里插入图片描述
交互式提供密码:
在这里插入图片描述
2.4 之前的 ansible,使用–ask-vault-pass 提供交互式密码:
在这里插入图片描述
九、管理事实
事实包括:主机名称、内核版本、网络借口、IP 地址等
(1)描述ansible事实
查看主机信息:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再将事实替换成动态的值:IP地址使用字典的方式查询值
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
(2)使用setup模块显示所有事实信息
在这里插入图片描述
关闭事实收集,提升执行速度:
在这里插入图片描述
运行:
在这里插入图片描述
(3)创建自定义事实
可以使用INI格式和jSON格式
INI格式:
在这里插入图片描述
JSON 格式:
在这里插入图片描述
注意:自定义格式不能使用 ymal 格式,使用最为接近的 json 最好
必须以.fact结尾:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自定义事实的使用方式和默认事实相同
(4)使用魔术变量
常用的有四个:
hostvars:包含受管主机的变量,可以用于获取另一台受管主机的变量的值
group_names:列出当前受管主机所属的所有组
groups :列出清单中的所有组和主机
inventory_hostname:包含清单中配置的当前受管主机的主机名称
1> 用途一:使用 debug 模块报告特定主机的 hostvars 的值
在这里插入图片描述
练习1
在这里插入图片描述
显示信息:
在这里插入图片描述
在这里插入图片描述
创建自定义变量:
在这里插入图片描述
创建playbook:
在这里插入图片描述
在这里插入图片描述

运行:
在这里插入图片描述
编写主playbook:
在这里插入图片描述
在这里插入图片描述
验证httpd服务没有在node2、node3上运行
运行:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值