🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家
📚个人资质: CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥🎈支持我:可点赞👍、可收藏⭐️、可留言📝
📜10.1.1 事实缓存
Ansible事实是Ansible在托管主机上自动发现的变量。事实包含特定于主机的信息,可以像剧本、条件中使用的常规变量一样使用。循环,或依赖于从托管主机收集的值的任何其他语句。
通常情况下,每个剧本都会在第一个任务之前自动运行setup模块,以便从每个与剧本的主机模式匹配的托管主机中收集事实。这确保了剧本拥有当前的事实,但也会产生一些负面后果。
运行setup模块来为每个剧本收集事实会产生明显的性能后果,特别是在托管主机的大量清单上。如果你在剧本中没有使用任何事实,你可以加快执行的一种方法是关闭自动事实搜集。你可以通过设置gather_facts: no来做到这点。请注意,如果你在剧中使用事实,你可能无法做到这一点。
剧本还可以通过使用魔法变量hostvars引用另一个主机的事实。例如,在托管主机服务器上运行的任务可以通过引用变量hostvars ['serverb'] ['ansible_facts'] ['default_ipv4'] ['address ']
来访问事实ansible_facts['default_ipv4'] ['address ']
的值。然而,这只有在这部剧或同一剧本中更早的一部剧已经从服务器上搜集到事实时才有效。
您可以使用事实缓存来解决这两个问题。一个剧本可以为目录中的所有主机收集事实,并缓存这些事实,以便后续剧本可以在不收集事实或手动运行setup模块的情况下使用它们。
📑在Ansible Tower中启用事实缓存
Red Hat Ansible Tower 3.2及以后版本包括了对事实缓存的集成支持和事实缓存的数据库。您需要在全局级别上管理事实缓存的超时。事实缓存控制由作业模板决定。
Ansible Tower中有一个全局设置,用于控制每个主机的事实何时过期。在web界面左侧导航栏中选择“Settings”,显示“config Tower”窗格,然后单击“JOBS”。设置Per-Host Ansible Fact Cache Timeout可以控制收集到的Ansible事实在缓存中的有效时间。这是以秒为单位的。
默认值设置为0,意味着存储在缓存中的信息始终有效。但是,如果不定期检查事实以更新缓存,则可能会由于托管主机上的更改而导致事实过时。
为了优化事实缓存,设置gather_facts: no在剧本中禁用自动事实收集。您还需要为任何使用包含这些剧本的剧本的Ansible Tower作业模板启用Use Fact Cache。然后,剧本依赖于事实缓存中的信息来使用事实。
您还需要定期运行一个play来填充事实缓存,以保持缓存的事实是最新的。在Ansible Tower中做这件事的一个好方法是建立一个剧本,收集事实作为一个计划的工作(在本课程的其他地方讨论)。那份工作可以使用常规的剧本,核实事实,或者你可以建立一个最小的剧本来收集事实,例如下面的例子:
- name: Refresh fact cache
hosts: all
gather_facts: yes
因为没有任务或角色部分,所以这个剧本唯一要做的事情就是收集事实。
📑注意:
您不需要同时为所有主机收集事实。为更小的主机集收集事实以分散负载可能是有意义的。重要的是要确保在所有主机过期或失效之前查明它们的事实。
下面的过程展示了如何在Ansible Tower接口中启用事实缓存:
- 在左侧导航栏单击“模板”。
- 选择适当的作业模板并单击其名称以编辑设置。
- 在页面的OPTIONS部分,选择Use Fact Cache旁边的复选框。
- 单击“保存”,保存修改后的作业模板配置。
现在,无论何时运行基于启用了Use Fact Cache选项的模板的新作业,作业都将使用事实缓存。如果Ansible Playbook也将gather_facts变量设置为yes,则作业将采集事实,检索它们,并将它们存储在事实缓存中。
📑注意:
当一个作业启动时,Ansible Tower将每个托管主机的所有ansible_facts从运行作业注入到memcache中。完成这项工作后,Ansible Tower从memcache中检索特定主机的所有记录,然后在事实缓存数据库中保存更新时间晚于缓存副本的每个事实。
📜10.1.2 课本练习
[student@workstation ~]$ lab project-facts start
📑1. 以admin帐号和redhat密码登录Ansible Tower web。
📑2. 更改My webservers DEV项目,使其自动触发SCM更新。
📑3. 使用DEV webservers setup作业模板启动一个作业。
(这个模板是通过setup命令设置的。)
这项工作将会失败。查看作业的输出屏幕,并尝试确定失败的原因。
📑4. 更新代码。
[student@workstation ~]$ cd ~/git-repos
[student@workstation git-repos]$ cd my_webservers_DEV
[student@workstation my_webservers_DEV]$ git pull
[student@workstation my_webservers_DEV]$ vim apache-setup.yml
---
- hosts: all
name: Install the web server and start it
become: yes
gather_facts: yes
[student@workstation my_webservers_DEV]$ git add --all
[student@workstation my_webservers_DEV]$ git commit -m "Enabling facts gathering"
[student@workstation my_webservers_DEV]$ git push
📑5. 使用已编辑的作业模板启动作业。
在Ansible Tower的web Ul中,编辑DEV webservers setup作业模板来启用USE FACT CACHE选项。
因为修改后的剧本包含了gather_facts: yes,它将收集Ansible事实。因为作业模板有USE FACT CACHE集,收集到的事实将存储在事实缓存中以备将来使用
📑6. 改回原代码。
[student@workstation my_webservers_DEV]$ vim apache-setup.yml
---
- hosts: all
name: Install the web server and start it
become: yes
gather_facts: no
[student@workstation my_webservers_DEV]$ git add --all
[student@workstation my_webservers_DEV]$ git commit -m "Disabling facts gathering"
[student@workstation my_webservers_DEV]$ git push
📑7. 使用DEV webservers setup作业模板启动另一个作业。
回到Ansible Tower的web UI。
作为Developers团队的一员,使用DEV webservers setup作业模板启动一个作业。
即使事实收集被关闭,作业仍然成功,因为剧本中变量使用的事实可以使用事实缓存。这项工作也应该运行得更快,因为它不需要查清事实。
📑8. 验证Ansible事实已经存储在Ansible Tower事实缓存中。
💡总结
RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。
以上就是【金鱼哥】对 第十二章 构建高级作业工作流--使用事实缓存提高性能 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾 红帽认证专栏系列:
RHCSA专栏: 戏说 RHCSA 认证
RHCE专栏: 戏说 RHCE 认证
此文章收录在RHCA专栏: RHCA 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!