> 文档中心 > DO447利用推荐做法进行开发--实施建议实践

DO447利用推荐做法进行开发--实施建议实践


DO447利用推荐做法进行开发–实施建议实践

RHCSA专栏:戏说 RHCSA 认证

RHCE专栏:戏说 RHCE 认证

此文章(第一章 利用推荐做法进行开发–实施建议实践 )收录在RHCA专栏:RHCA 回忆录

文章目录

    • DO447利用推荐做法进行开发--实施建议实践
      • 📜1. 描述ansible的有效使用
      • 📜2. 让事情变得简单
        • 📑保持剧本的可读性
        • 📑使用现有的模块
        • 📑坚持标准风格
      • 📜3. 保持组织
        • 📑遵循命名变量的约定
        • 📑规范项目结构
        • 📑使用动态清单
        • 📑利用群体优势
        • 📑为可重用内容使用角色
        • 📑运行剧本集中
      • 📜4. 经常测试
        • 📑测试任务的结果
        • 📑使用Block/Rescue恢复或回滚
        • 📑用最新的Ansible版本开发剧本
        • 📑使用测试工具
      • 📜5. 课本练习(第8页)
        • ✏按要求修改角色定义的变量
        • ✏设置并修改主机组变量
        • ✏添加主机组清单并创建其主机组变量
        • ✏执行剧本并验证
        • ✏清除实验
    • 💡总结

📜1. 描述ansible的有效使用

本课程假设您有一些使用Ansible自动化Linux系统管理任务的经验。Ansible是容易学习和容易开始使用。然而,当您使用更高级的特性和更大、更复杂的项目时,管理和维护Ansible剧本或有效地使用它们就变得更加困难。

本课程介绍了红帽Ansible自动化的一些先进功能。讨论了如何有效、高效地使用红帽Ansible自动化系统。有效地使用Ansible不仅仅是关于特性或工具。而是关于实践和组织。

以下三点总结了红帽Ansible自动化的有效利用;这些观点是基于Jeff Geerling的类似陈述:

  • 让事情变得简单

  • 保持组织

  • 经常测试


📜2. 让事情变得简单

Ansible的优点之一是它的简单性。如果您的剧本保持简单,它们将更容易使用、修改和理解。

📑保持剧本的可读性

让你的剧本有良好的评论,易于阅读。尽量使用垂直的空白和注释。总是给play和任务起有意义的名字,以明确play或任务的作用。这些实践有助于记录剧本,并使对失败的剧本运行进行故障诊断变得更容易。

YAML不是一种编程语言。它擅长表达一系列的任务或项目。或者一组键值对。如果你正在努力在Ansible剧本中表达一些复杂的控制结构或条件,那么考虑用不同的方式来处理这个问题。您可以使用模板和Jinia2过滤器来处理变量中的数据,这可能是解决问题的更好方法。

使用本机YAML语法,而不是“折叠”语法。例如,下面的例子不是推荐格式:
在这里插入图片描述
下面的语法对大多数人来说更容易阅读:
在这里插入图片描述


📑使用现有的模块

当编写一个新的剧本时,从一个基本的剧本开始,如果可能的话,一个静态的清单。当你构建你的设计时,使用debug模块作为存根使用。一旦剧本按预期运行,就可以使用导入和包含将剧本分解成更小的逻辑组件。

如果可以的话,使用Ansible中包含的专用模块,而不是command、shell、raw或其他类似模块。虽然在某些情况下您需要使用这些通用模块,但如果您使用为特定任务设计的模块,那么使您的剧本幂等性和易于维护将会容易得多。

许多模块都有一个默认状态或其他变量来控制它们的功能。例如,yum模块当前假定您所命名的包在大多数情况下都应该存在,但是,您应该显式地指定您想要的状态。这样做可以更容易地阅读剧本,并保护你免受Ansible后续版本中模块默认行为的更改。

📑坚持标准风格

你应该考虑有一个标准的“风格”,以便你和你的同事在写一个可行的项目时遵循。缩进多少空格?你想如何使用垂直的空白?任务、play、角色和变量应该如何命名?应该评论什么,怎么评论?有不止一种合理的方法可以做到这一点。但是拥有一致的标准可以帮助提高可维护性和可读性。


📜3. 保持组织

组织您的Ansible项目以及您如何运行剧本可以在可维护性、故障排除和审计方面有所帮助。

📑遵循命名变量的约定

变量命名尤其重要,因为Ansible有一个相当平坦的名称空间。使用描述性的变量。如apache_tls_port而不是描述性较低的变量如在角色中,使用角色名作为角色变量的前缀是一个很好的做法。例如,如果你的角色名为myapp,那么你的变量名可以以myapp_ 开始,以帮助命名它们从其他角色和plavbook中的变量。

变量名应该澄清内容。像apache_max_keepalive这样的名称清楚地解释了关联值(或多个值)的含义。前缀角色和组变量的名称变量所属的角色或组。port_number比apache_port_number更容易出错。

📑规范项目结构

在文件系统中构建Ansible项目的文件时,使用一致的模式。有许多有用的模式,但下面是一个很好的例子:
在这里插入图片描述
剧本结构的好处之一是,您可以将您的大型剧本划分为更小的文件,使其更具可读性,而且那些较小的子剧本可以包含用于特定目的的剧本,您可以独立运行这些剧本。


📑使用动态清单

尽可能使用动态清单。动态清单允许从一个中央真相来源集中管理您的主机和组,并确保清单自动更新。动态清单与云供应商联合起来特别强大。容器和虚拟机管理系统。这些系统可能已经有了Ansible可以使用的清单信息。

如果您不能使用动态清单,那么其他工具可以帮助您动态地构造组或其他信息。例如,可以使用group_by模块根据事实动态生成组成员关系。这个小组的成员资格对剧本的其余部分是有效的。
在这里插入图片描述

📑利用群体优势

主机可以是多个组的成员。考虑根据不同的特征将主机划分为不同的类别:

地理上的:区分不同地区、国家、大洲或数据中心的主机。

环境:区分专用于软件生命周期不同阶段的主机,包括开发、阶段、测试或生产。

站点或服务:提供或链接到功能子集(如特定的web站点、应用程序)的主机组。或者特征的子集。


📑为可重用内容使用角色

角色帮助您保持剧本的简单,并允许您通过跨项目重用公共代码来保存工作。如果你正在编写你自己的角色,那么让它们专注于一个特定的目的或类似剧本的功能。通过变量使角色具有通用性和可配置性,这样当您将它们与不同的剧本集一起使用时,就不需要编辑它们。

使用ansible-galaxy命令初始化角色的目录层次结构,并提供初始模板文件。这也将使你更容易在Ansible Galaxy网站上分享你的角色,如果你选择这样做。

在Red Hat Enterprise Linux中,由redhat-system-roles包提供的角色得到了官方的支持(尽管有些角色可能在技术预览中出现),请查看提供的角色,以确定它们是否对您有用。

你也可以通过Ansible Galaxy查看社区提供的角色。要知道这些角色有不同的质量级别,所以要谨慎地选择您使用的角色。

将您的角色保存在项目的roles子目录中。使用ansible-galaxy命令从单独的Git存储库中自动获取角色,即使这些角色不是来自Ansible Galaxy,而是存储在你自己的存储库中。


📑运行剧本集中

为了控制对系统的访问和审计Ansible活动,可以考虑使用一个专用的控制节点,所有的Ansible剧本都是从这个节点运行的。

系统管理员应该在系统上仍然拥有自己的帐户和凭证。如果需要,连接到托管主机并升级特权。当系统管理员离开时,可以从托管主机的authorized_keys文件中删除他们的SSH密钥,并撤销他们的sudo命令特权。不影响其他管理员。

考虑使用红帽Ansible Tower作为这个中心主机。Red Hat Ansible Tower包含在一个新的Red Hat Ansible自动化订阅中,它提供了一些特性,可以更容易地控制对凭证的访问,控制playbook的执行,为那些不喜欢Linux命令行的用户简化自动化,以及审计和跟踪playbook的运行。在本课程的后面,您将了解如何使用红帽Ansible Tower。然而,即使你不使用红帽Ansible Tower,使用中央控制节点也是有益的。


📜4. 经常测试

在开发过程中,当任务运行时以及剧本使用时,经常测试剧本和任务。

📑测试任务的结果

如果需要确认任务成功,请验证任务的结果,而不是信任模块的返回代码。根据所涉及的模块,验证任务的方法不止一种。
在这里插入图片描述

📑使用Block/Rescue恢复或回滚

block指令在分组任务时很有用;当与Rescue指令一起使用时,它在从错误或失败中恢复时很有帮助。
在这里插入图片描述


📑用最新的Ansible版本开发剧本

即使你没有在生产中使用最新版本的Ansible,你也应该定期用最新版本的Ansible测试你的剧本。这个测试将帮助你避免Ansible模块和功能发展的问题。

如果剧本在运行时打印警告或弃用消息,那么您应该注意它们并进行调整。通常,如果Ansible中的某个特性正在被弃用或发生变化,在该特性被删除或更改之前,该项目会提供四个次要版本的弃用通知。


📑使用测试工具

有许多命令和工具可以帮助您测试剧本。使用ansible-playbook --syntax-check命令来检查你的playbook的语法,而不用运行它。

使用ansible-playbook --check命令以“check模式”对实际托管主机运行您的playbook,以查看playbook将进行哪些更改。这个检查并不能保证完美的准确性,因为在剧本中的后续任务正确工作之前,剧本可能需要实际运行一些任务。您可能有一些标有“检查模式:无指令”的任务。这些任务即使在检查模式下也会运行。


📜5. 课本练习(第8页)

[student@workstation ~]$ lab development-practices start

✏按要求修改角色定义的变量

[student@workstation ~]$ cd ~/DO447/labs/development-practices[student@workstation development-practices]$ vim roles/haproxy/defaults/main.yml# Log-level for HAProxy logshaproxy_log_level: info# Port exposed to clientshaproxy_port: 80# Name for the default backendhaproxy_backend_name: app# Port backend is exposed tohaproxy_backend_port: 80…………# The default is no defined backend servers.haproxy_appservers: []# Socket used to communicate with haproxy service. DO NOT CHANGEhaproxy_socket: /var/run/haproxy.sock[student@workstation development-practices]$ vim roles/haproxy/templates/haproxy.cfg.j2global    #Send events/messages to rsyslog server.    log  127.0.0.1:514 local0 {{ haproxy_log_level }}…………    # turn on stats unix socket    #  required for the ansible haproxy module.    stats socket {{ haproxy_socket }} level admin………frontend main    mode http    bind *:{{ haproxy_port }}    default_backend {{ haproxy_backend_name }}………..backend {{ haproxy_backend_name }}    balance roundrobin{% for server in haproxy_appservers %}    server {{ server.name }} {{ server.ip }}:{{ haproxy_backend_port }}{% endfor %}

✏设置并修改主机组变量

[student@workstation development-practices]$ mkdir group_vars[student@workstation development-practices]$ cp -v appservers.yml group_vars/lb_servers.yml'appservers.yml' -> 'group_vars/lb_servers.yml'[student@workstation development-practices]$ vim group_vars/lb_servers.ymlhaproxy_appservers:  - name: serverb.lab.example.com    ip: "172.25.250.11"  - name: serverc.lab.example.com    ip: "172.25.250.12"

✏添加主机组清单并创建其主机组变量

[student@workstation development-practices]$ cat inventory [lb_servers]servera.lab.example.com[web_servers]server[b:c].lab.example.com[region_eu]serverc.lab.example.com[student@workstation development-practices]$ cat group_vars/region_eu.yml webapp_message: "Hello from Europe. This is"

✏执行剧本并验证

[student@workstation development-practices]$ ansible-playbook site.yml[student@workstation development-practices]$ curl http://serveraThis is serverb. (version v1.0)[student@workstation development-practices]$ curl http://serveraHello from Europe. This is serverc. (version v1.0)

✏清除实验

[student@workstation development-practices]$ ansible-playbook clean.yml[student@workstation development-practices]$ lab development-practices finish

💡总结

好好学,好好找工作,运维10K+只是起步,找不到10K+都别说是金鱼哥带出来的学生🤪。

DO447利用推荐做法进行开发--实施建议实践

以上就是【金鱼哥】对 第一章 利用推荐做法进行开发–实施建议实践 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

DO447利用推荐做法进行开发--实施建议实践

jcg路由器知识网