使用Ansible服务实现自动化运维
虽然相比于Chef、Puppet、Saltstack等CS架构的自动化工具来讲,Ansible的执行性能并不是最高的,但是由于其基于的是SSH远程会话协议,无需客户端程序,只要知道受管主机的账号密码,就能直接用SSH协议进行远程控制,因此使用起来优势很明显。Ansible服务本身并没有批量部署的功能,它仅仅是一个框架,真正具有批量部署能力的是其所运行的模块。随服务的安装自带有上千个模块,通过调用指定的模块,就能实现特定的功能。
Ansible服务专用术语对照表
| 术语 | 中文叫法 | 含义 |
| Control node | 控制节点 | 指的是安装了Ansible服务的主机,也被称为Ansible控制端,主要是用来发布运行任务、调用功能模块,对其他主机进行批量控制。 |
| Managed nodes | 受控节点 | 指的是被Ansible服务所管理的主机,也被称为受控主机或客户端,是模块命令的被执行对象。 |
| Inventory | 主机清单 | 指的是受控节点的列表,可以是IP地址、主机名称或者域名。 |
| Modules | 模块 | 指的是上文提到的特定功能代码,默认自带有上千款功能模块,在Ansible Galaxy有超多可供选择。 |
| Task | 任务 | 指的是Ansible客户端上面要被执行的操作。 |
| Playbook | 剧本 | 指的是通过YAML语言编写的可重复执行的任务列表,把常做的操作写入到剧本文件中,下次可以直接重复执行一遍。 |
| Roles | 角色 | 从Ansible 1.2版本开始引入的新特性,用于结构化的组织Playbook,通过调用角色实现一连串的功能。 |
Ansible服务程序默认不在RHEL 8系统的镜像文件中,而是需要从“Extra Packages for Enterprise Linux”扩展软件包仓库获取,简称为EPEL安装源。
-
设置主机清单
Ansible服务主配置文件优先级顺序
| 优先级 | 文件位置 |
| 高 | ./ansible.cfg |
| 中 | ~/.ansible.cfg |
| 低 | /etc/ansible/ansible.cfg |
主机清单文件修改后的是会立即生效的,一般常用“ansible-inventory --graph”命令以结构化的方式显示出受管节点主机信息,对于有层级的分组来讲是非常利于阅读的:
[root@linuxprobe ~]# ansible-inventory --graph
-
运行临时命令
用户所使用的Ansible服务实际只是一个框架,能够完成工作的是模块化功能代码,常用的模块大致有二十余个。可用“ansible-doc 模块名称”的命令格式自行查询,或是用“ansibe-doc -l”命令列出所有的模块信息以供选择。
Ansible服务常用模块名称及作用
| 模块名称 | 模块作用 |
| ping | 检查受管节点主机网络是否能够联通。 |
| yum | 安装、更新及卸载软件包。 |
| yum_repository | 管理主机的软件仓库配置文件。 |
| template | 复制模板文件到受管节点主机。 |
| copy | 新建、修改及复制文件。 |
| user | 创建、修改及删除用户。 |
| group | 创建、修改及删除用户组。 |
| service | 启动、关闭及查看服务状态。 |
| get_url | 从网络中下载文件。 |
| file | 设置文件权限及创建快捷方式。 |
| cron | 添加、修改及删除计划任务。 |
| command | 直接执行用户指定的命令。 |
| shell | 直接执行用户指定的命令(支持特殊字符)。 |
| debug | 输出调试或报错信息。 |
| mount | 挂载硬盘设备文件。 |
| filesystem | 格式化硬盘设备文件。 |
| lineinfile | 通过正则表达式修改文件内容。 |
| setup | 收集受管节点主机上的系统及变量信息。 |
| firewalld | 添加、修改及删除防火墙策略。 |
| lvg | 管理主机的物理卷及卷组设备。 |
| lvol | 管理主机的逻辑卷设备。 |
ansible是用于执行临时任务的命令,也就是执行后即结束,不同于Playbook剧本文件的可重复性。使用ansible命令时必须指明受管主机节点的信息,如果已经设置过主机清单文件(/etc/ansible/hosts)则可以写all参数来代指全体受管节点,或用dev、test等主机组名称来代指某一组的主机节点。
常用的语法格式为“ansible 受管主机节点 -m 模块名称 [-a 模块参数]” -a”是要传递给模块的参数,只有极简单功能的模块才不需要额外参数,所以大多情况下“-m”与“-a”参数都会同时出现。
ansible命令常用参数
| 参数 | 作用 |
| -k | 手动输入SSH协议密码 |
| -i | 指定主机清单文件 |
| -m | 指定要使用的模块名 |
| -M | 指定要使用的模块路径 |
| -S | 使用su命令 |
| -T | 设置SSH协议连接超时时间 |
| -a | 设置传递给模块的参数 |
| --version | 查看版本信息 |
| -h | 帮助信息 |
-
剧本文件
Ansible服务中允许用户根据需求,在类似于Shell脚本的模式下编写出一套自动化运维的脚本,然后由程序自动的、重复的执行,大大的提高了工作效率。
Ansible服务的Playbook剧本文件采用YAML语言编写,有着强制性的格式规范,通过空格将不同信息分组,因此有时会因一两个空格错位而导致报错,需要万分小心。
YAML文件开头需要先写三个减号---,多个分组信息需要间隔一致才能执行,上下也要对齐,后缀名一般为.yml。
在执行后会在屏幕上输出运行界面,内容会依据不同工作而变化,但绿色均代表成功,黄色代表执行成功并进行了修改,而红色则代表执行失败。
Playbook剧本文件的结构由四部分组成——target、variable、task、handler。target部分用于定义要执行剧本的主机节点范围、variable部分用于定义剧本执行时要用的变量、task部分用于定义将在远程主机上执行的任务列表、handler部分用于定义执行完成后需要调用的后续任务。
用ansible-playbook命令来运行剧本文件
-
创建及使用角色
简单来说,角色功能是把常用的一些功能“类模块化”,然后用的时候加载即可。
Ansible服务的角色功能也有些类似于编程中的封装技术,将具体的功能封装起来,用户不仅可以方便的调用它,甚至不用完全理解其中原理,也可以使用。
- 系统内置角色
# dnf install -y rhel-system-roles
- 外部获取角色 从Ansible Galaxy官网或外部YML文件(-r参数) 下载安装角色
# ansible-galaxy install xxx
- 自己创建角色
创建一个新的角色信息使用“init”参数,且建立成功后便会在当前目录下生成出一个新的目录
- 魔法变量
在每个客户端中都会有一个叫做“inventory_hostname”的变量,用于定义着每个节点主机所对应的Ansible服务主机组名称,也就是在/etc/ansible/hosts文件中所对应的分组信息,例如dev、test、prod、balancers。
“inventory_hostname”是Ansible服务中的魔法变量,意味着无法用setup模块直接进行查询,诸如“ansible all -m setup -a 'filter="*关键词*"'”的命令将对它失效。魔法变量需要在执行Playbook剧本文件时的[Gathering Facts]阶段进行搜集,直接查询是看不到的,而只能在剧本文件中进行调用。
- 课堂笔记



浙公网安备 33010602011771号