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

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

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

RHCSA专栏:戏说 RHCSA 认证

RHCE专栏:戏说 RHCE 认证

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

📜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 logs
haproxy_log_level: info

# Port exposed to clients
haproxy_port: 80

# Name for the default backend
haproxy_backend_name: app

# Port backend is exposed to
haproxy_backend_port: 80

…………
# The default is no defined backend servers.
haproxy_appservers: []

# Socket used to communicate with haproxy service. DO NOT CHANGE
haproxy_socket: /var/run/haproxy.sock
[student@workstation development-practices]$ vim roles/haproxy/templates/haproxy.cfg.j2
global
    #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.yml
haproxy_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://servera
This is serverb. (version v1.0)
[student@workstation development-practices]$ curl http://servera
Hello 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+都别说是金鱼哥带出来的学生🤪。

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

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

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
存储 监控 安全
实施工程师——实施计划列表(不知道实施要干啥的过来看)
实施工程师——实施计划列表(不知道实施要干啥的过来看)
37 0
|
6月前
|
监控 供应链 测试技术
什么是 2B 软件的实施和上线概念
什么是 2B 软件的实施和上线概念
63 0
|
9月前
|
敏捷开发 数据可视化 测试技术
如何做好敏捷迭代管理?过程及工具分享
Leangoo领歌是ScrumCN(scrum.cn)旗下的一款永久免费的敏捷研发管理工具。 Leangoo领歌覆盖了敏捷研发全流程,包括小型团队敏捷开发,Scrum of Scrums大规模敏捷以及SAFe大规模敏捷框架等,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、缺陷管理、测试管理、进展跟踪、统计度量等。领歌上手快、实施成本低,可帮助企业快速落地敏捷,提质增效、缩短周期、加速创新,在数字时代赢得竞争。
如何做好敏捷迭代管理?过程及工具分享
|
12月前
|
存储 安全 搜索推荐
详解软件开发的标准过程(生命周期):跟着标准搞,设计没烦恼
详解软件开发的标准过程(生命周期):跟着标准搞,设计没烦恼
|
机器学习/深度学习 人工智能 运维
基于RPA的自动化优先,正在成为广大组织的主流管理思维
什么是自动化优先思维?它与RPA有什么关系?因何正在成为企业管理主流思维?
119 0
基于RPA的自动化优先,正在成为广大组织的主流管理思维
|
程序员 索引
实施项目--你明白软件的价值和个人的价值么?
  在2013即将结束的最后一个月里,我跑客户的时间时间达到了26天,作为一个技术出身的我这是非常不可思议的,在多年前我敢都不敢想! 在历史上一个月里我连续工作的天数也就27天,当然这是呆在公司办公室里,负责码代码,不会与直接客户面对面接触的(目前大多数技术人员都是如此)。
958 0