当前位置: 首页 > backend >正文

云原生俱乐部-RH294知识点归纳(3)

其实ansible还剩下使用角色和ansible内容集合来简化playbook、对ansible进行故障排除和自动执行Linux管理任务三部分。

至于如何对ansible进行故障排除,只有在生产中碰到了故障才用得上,并且即使碰上的还是需要具体问题具体分析,但是可以该部分内容可以提供解决思路。


简化playbook

[1]描述ansible角色结构

ansible角色的功能由目录结构来定义,目录名为角色名。defaults目录的main.yml包含变量,优先级别低,vars目录下的main.yml定义变量,优先级高于defaults,但注意不要重复定义变量。

files的main.yml包含角色任务引用的静态文件,templates则包含引用的jinja2模板。task目录下的main.yml文件定义task任务,而handler目录下的main.yml文件则用于定义handler处理程序。meta目录用于角色说明,作者信息等,tests目录下的test.yml文件用于测试角色功能。

[2]导入或包含角色

使用ansible.builtin.import_role静态导入,变量公开会给play的所有的任务,即使task位于import之前。如果ansible.builtin.include_role动态包含,则不会开放任何变量,即使task位于之后。同样条件和循环能够用于import_role里面的每一个任务,而只用用于include_role的当前任务。

我们还可以使用roles列表加载角色,这种方式会在任何task之前运行,不建议roles和tasks同时使用。不过可以使用pre_task和post_tasks来将特定任务放在角色之前或者之后来执行。如果pre_tasks中的task通知了handler,那么handler处理程序也会优于role之前使用。与此相反的是,post_tasks的handler的执行则是最后执行。

[3]创建和使用角色

可以使用ansible-galaxy init rolename来初始化角色,具有完整的角色目录结构,可以删除某些目录,如果不需要使用的话。推荐持续更新readme.md文件和meta目录,并通过tests目录集成测试角色的功能。

虽然ansible的角色本意就是为了更好的复用,但要避免一个角色承担多个任务,而是编写多个角色,让角色侧重于特定的用途与功能。角色可以依赖其他角色依赖,但尽量避免该做法。ansible-galaxy install -r 用来下载角色,-p可选项以指定下载的路径,也可以在ansible.cfg中配置。

ansible-galaxy info rolename可以查看角色的信息,其实就是从meta信息中找。ansible-galaxy list可以列出角色(可以使用-p指定路径),还有使用ansible-galaxy remove rolename可以快速删除角色。

[4]模块和系统角色

collections可以作为项目目录,里面可以安装额外的内容集合。如果要下载requirements.yml集合可以用 ansible-galaxy collection install -r requirements.yml,默认源是官方galaxy。

在项目使用模块的时候,会先从`ANSIBLE_COLLECTIONS_PATH`  环境变量路径中查找集合,其次才是项目目录中的collections目录,然后是家目录中的collections,最后才是`/usr/share/ansible/collections/`目录。

Ansible系统角色(System Roles)是​​官方维护的标准化角色集合​,专门用于管理Linux系统级服务和配置。ansible通过定义task,实现对应的功能来提供针对RHET系统服务的角色,并且提供的系统角色尽量会屏蔽不同系统的差异。

Ansible故障排除

[1]对playbook进行故障排除

ansible-navigator run -v查看playbook运行时候的信息,有四个等级,等级越高越详细。还可以使用ansible.builtin.debug模块来查看对应的变量的值来排除故障,使用--syntax-check则可以检查playbook本身的语法。

ansible-navigator运行playbook的时候,默认会生成artifact工件,命名为playbook名称+artifact+时间,以json格式保存。可以通过ansible-navigator replay重放工件,使用-m stdout是输出到终端,否则以交互式查看。

[2]对受管主机进行故障排除

有可能是因为没有配置好ssh免密导致受管主机故障,也有可能是在受管主机上没有足够的权限来执行命令,还有可能是提权的时候没有输入密码等种种问题,或者在受管主机上没有python环境。当然,如果使用域名的话,注意本地DNS是否能够解析该域名。

可以使用--check来检测受管主机上的问题,用来显示会在受管主机上的进行的更改,但不执行它们。如果要在检查模式--check也运行,那么就将task的check_mode 设置为yes。当然,我们可以用一些模块来检测受管主机的状态,或者使用ansible临时命令。

自动执行Linux管理任务

[1]管理软件

使用ansible.builtin.package模块可以检测受管主机的包管理器并选择合适的来执行。推荐使用pakcage模块,因为这更符合ansible的理念。我们还可以通过收集的事实来查看受管主机已安装的软件包,通过ansible.builtin.package_facts模块来收集相关的事实。

[2]管理用户和身份验证

使用ansible.builtin.user模块可以给受管主机添加或者删除用户,通过shell指定默认shell,group指定主组,groups指定附加组,state描述状态等。ansible.builtin.group模块则是用于添加或者删除组,通过name指定名称,gid指定组ID。

还可以执行ssh远程登录相关的信息,如ansible.builtin.known_hosts模块,可用于将ssh_knonw_hosts文件复制给其他受管主机,这样在第一次ssh连接(连接该文件里面的主机)的时候就不会验证是否需要确定md5指纹了。

还有ansible.posix.authorized_key模块,可以用来在受管主机上添加ssh密钥(本地),这样ssh密钥对应的主机ssh连接该受管主机的时候就不需要使用密码了。还可以使用ansible.builtin.lineinfile模块来修改sudo文件,赋予用户sudo权限。

[3]管理调度和系统服务

使用ansible.posix.at模块可以在受管主机上调度一次性任务,ansible.builtin.cron模块则是调度周期性任务。在cron模块会在/etc/cron.d目录下创建任务文件,可以通过cron_file指定任务文件名,但如果只指定了用户,没有指定文件名则是在该用户的crontab文件中设置。

​`ansible.builtin.systemd`​是一个​专门的、具体的​​模块,只用于与  `systemd`初始化系统交互。它直接调用  `systemctl`命令。​`ansible.builtin.service`则是一个​通用的、抽象的​模块,它试图为各种初始化系统提供一个统一的接口。它会自动检测目标系统使用的初始化系统,然后调用相应的底层命令,可能是  `systemctl`,  `service`,  `rc-service`等。

[4]管理存储和网络配置

使用ansible.posix.mount模块可以操作受管主机挂载文件系统,当然,更多的是使用storage系统角色来完成任务。不过该系统角色只能管理未分区的设备,通过storage_volumes可以指定设备挂载的方式,使用storage_pools则可用于创建卷组。

同样ansible提供network系统角色来完成网络的管理,通过改变指定变量的值能够让系统角色完成不同的功能。我们还可以通过ansible.posix.firewalld模块来操作受管主机的防火墙,还有ansible.builtin.hostname来指定新的主机名。

http://www.xdnf.cn/news/18613.html

相关文章:

  • [滑动窗口]1493. 删掉一个元素以后全为 1 的最长子数组
  • 今天学习计算机网格技术的TCP,UDP以及OSPF
  • 【AI智能体】Dify 搭建业务单据差异核对助手实战详解
  • 【Spring Cloud 微服务】3.智能路由器——深入理解与配置负载均衡
  • 【数据结构】从基础到实战:全面解析归并排序与计数排序
  • 在 Docker 容器中查看 Python 版本
  • SpringBoot的学生学习笔记共享系统设计与实现
  • SO_REUSEADDR
  • 计算机视觉与自然语言处理技术体系概述
  • Python内置函数全解析:30个核心函数语法、案例与最佳实践指南
  • Shell脚本-expect
  • Linux 软件编程(十)网络编程:网络协议,UDP 与 TCP 知识点
  • 计算机网络基础(三) --- TCP/IP网络结构(运输层)
  • golang3变量常量
  • Shell脚本-影响shell程序的内置命令
  • MATLAB 在工程仿真中的实践:以机械振动分析为例的完整流程
  • STM32 入门实录:macOS 下从 0 到点亮 LED
  • Java 编译器的世界:前端、JIT 与 AOT 的秘密:详解 Java 的编译过程与编译器生态
  • QT面试题总结(持续更新)
  • Excel 表格 - 合并单元格、清除单元格格式
  • kubernetes中的认证和授权
  • 小程序全局状态管理:使用MobX进行跨组件数据共享详解(九)
  • 国内使用SSH稳定使用github
  • 分布式账本:当不可篡改性遭遇法律拷问
  • ​Mac用户安装JDK 22完整流程(Intel版dmg文件安装指南附安装包下载)​
  • 【链表 - LeetCode】206. 反转链表【带ACM调试】
  • [身份验证脚手架] 前端认证与个人资料界面
  • 商密保护迷思:经营秘密到底需不需要鉴定?
  • 高并发内存池(1)-定长内存池
  • 通过python程序将实时监测数据写入excel软件进行保存是常用和非常实用的功能,本文教会大家怎么去搞定此功能