云原生俱乐部-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.mfbz.cn/a/2833.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink 实时加购数据“维表补全”实战:从 Kafka 到 HBase 再到 Redis 的完整链路

一、业务背景 在电商实时运营场景中,加购行为(AddShoppingCart) 是最核心的用户行为之一,每秒钟可能产生数万条加购事件。以某头部电商平台为例,大促期间加购QPS可突破50万。 为了支持实时推荐、实时营销、实时大屏等业…

【数据结构】二叉树的顺序存储、堆的实现及其应用:堆排序与Top-K问题

二叉树的顺序存储、堆的实现及其应用:堆排序与Top-K问题 ✨前言:在上一节【树与二叉树】中,我们已经了解了二叉树的基本结构与存储方式。 本篇文章将更进一步,重点介绍 二叉树的顺序结构,并在此基础上引出一个重要的数…

SpringBoot 快速上手:从环境搭建到 HelloWorld 实战

在 Java 开发领域,Spring 框架占据着举足轻重的地位,但它复杂的配置曾让不少开发者望而却步。SpringBoot 的出现,如同为 Spring 框架装上了 “加速器”,以 “约定大于配置” 的理念简化了开发流程。本文将从环境准备、Maven 配置入…

一键部署开源 Coze Studio

文章目录一、简介1、什么是 Coze Studio2、参考地址二、安装部署1、安装docker2、安装git3、下载core4、配置公网可用5、登录成功一、简介 1、什么是 Coze Studio Coze Studio 是一站式 AI Agent 开发工具。提供各类最新大模型和工具、多种开发模式和框架,从开发到…

墨刀原型设计工具操作使用指南及实践操作

壹、墨刀原型设计工具操作使用指南 一、基础入门 1. 软件版本与环境要求 版本区别: 免费版:支持 3 个项目,单项目最多 20 页,基础组件与交互,团队成员≤5 人;专业版(付费)&#x…

博士招生 | 美国圣地亚哥州立大学 Yifan Zhang 课题组博士招生,AI 安全领域顶尖平台等你加入!

内容源自“图灵学术博研社”gongzhonghao学校简介圣地亚哥州立大学(San Diego State University, SDSU)是美国加州南部久负盛名的公立研究型大学。学校坐落于科技产业高度活跃的南加州地区,与本地软件、电信、生物科技、国防及清洁能源等领域…

用vscode使用git工具

基础用法步骤一:打开vscode的git可视化工具步骤二:点击初始化仓库步骤三:选择要加入缓存区的文件注意:这里你可以选择自己想要的文件进行添加。如果想取消缓存区的文件,这里也可以进行取消提交。步骤四:提交…

portswigger labs XXE漏洞利用实战

lab1 利用外部实体注入获取文件解决此 lab 需要读取到/etc/passwd<!DOCTYPE test [ <!ENTITY cmd SYSTEM "file:///etc/passwd"> ]> <productId>&cmd;</productId>lab2 利用 XXE 执行 SSRF 攻击通过构造 xxe 请求特定的 url 获取目录拼接…

MySQL表的操作

1.创建表创建表的语法操作&#xff1a;CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a;field 表示列名datatype 表示列的数据类型character set 指定字符集&#xff0c;若…

第2章 cmd命令基础:证书操作(certutil)

Hi~ 我是李小咖&#xff0c;主要从事网络安全技术开发和研究。 本文取自《李小咖网安技术库》&#xff0c;欢迎一起交流学习&#x1fae1;&#xff1a;https://imbyter.com Certutil是一个Windows操作系统自带的命令行工具&#xff0c;主要用于执行各种与数字证书相关的任务&am…

LeetCode100-53最大子数组和

本文基于各个大佬的文章 上点关注下点赞&#xff0c;明天一定更灿烂&#xff01; 前言 Python基础好像会了又好像没会&#xff0c;所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考&#xff0c;写给自己看的&#xff0c;也欢迎大家在评论区指…

当我们想用GPU(nlp模型篇)

在个人设备上“把 GPU 真正用起来”做 NLP&#xff0c;分五步&#xff1a;准备 → 安装 → 验证 → 训练/推理 → 踩坑排查。下面每一步都给出可复制命令和常见错误。 ────────────────── 1. 硬件准备 • 一张 NVIDIA GPU&#xff0c;算力 ≥ 6.1&#xff08…