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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 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+都别说是金鱼哥带出来的学生🤪。

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

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

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
6月前
|
安全 项目管理
一文搞懂需求流程规范的制定方法和落地技巧
随着业务和产品的发展、团队的不断扩大,很多团队都不可避免的会遇到需求流程混乱的问题。虽然有的团队也编写了一些“需求流程规范”的文档,但最终却流于纸面,难以在团队真正落地。如何科学制定并有效落实需求管理规范呢?对此,云效产品经理陈逊进行了非常详细的直播分享,本文是他经验的文字总结。
102171 19
|
3月前
|
物联网 测试技术 持续交付
持续部署的内涵和实施路径问题之持续部署过程中需要控制过程成本并保持高效的问题如何解决
持续部署的内涵和实施路径问题之持续部署过程中需要控制过程成本并保持高效的问题如何解决
|
4月前
|
监控 Java 测试技术
开发与运维技术问题之“化整为零”策略在项目风险管理中的作用如何解决
开发与运维技术问题之“化整为零”策略在项目风险管理中的作用如何解决
40 0
|
6月前
|
安全 数据管理 测试技术
网络安全与信息安全:防范漏洞、加强加密与提升安全意识深入探索自动化测试框架的设计原则与实践应用化测试解决方案。文章不仅涵盖了框架选择的标准,还详细阐述了如何根据项目需求定制测试流程,以及如何利用持续集成工具实现测试的自动触发和结果反馈。最后,文中还将讨论测试数据管理、测试用例优化及团队协作等关键问题,为读者提供全面的自动化测试框架设计与实施指南。
【5月更文挑战第27天】 在数字化时代,网络安全与信息安全已成为维护国家安全、企业利益和个人隐私的重要环节。本文旨在分享关于网络安全漏洞的识别与防范、加密技术的应用以及提升安全意识的重要性。通过对这些方面的深入探讨,我们希望能为读者提供一些实用的建议和策略,以应对日益严峻的网络安全挑战。 【5月更文挑战第27天】 在软件开发周期中,自动化测试作为保障软件质量的关键步骤,其重要性日益凸显。本文旨在剖析自动化测试框架设计的核心原则,并结合具体案例探讨其在实际应用中的执行策略。通过对比分析不同测试框架的优缺点,我们提出一套高效、可扩展且易于维护的自动
|
敏捷开发 数据可视化 测试技术
如何做好敏捷迭代管理?过程及工具分享
Leangoo领歌是ScrumCN(scrum.cn)旗下的一款永久免费的敏捷研发管理工具。 Leangoo领歌覆盖了敏捷研发全流程,包括小型团队敏捷开发,Scrum of Scrums大规模敏捷以及SAFe大规模敏捷框架等,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、缺陷管理、测试管理、进展跟踪、统计度量等。领歌上手快、实施成本低,可帮助企业快速落地敏捷,提质增效、缩短周期、加速创新,在数字时代赢得竞争。
如何做好敏捷迭代管理?过程及工具分享
|
存储 安全 搜索推荐
详解软件开发的标准过程(生命周期):跟着标准搞,设计没烦恼
详解软件开发的标准过程(生命周期):跟着标准搞,设计没烦恼
|
数据采集 供应链 监控
谈谈构建成功的数据治理团队的四个步骤
成功的数据治理需要与明确定义的业务需求保持一致。然而,太多的数据治理程序未能实现目标,因为它们忽略了这一先决条件。
|
移动开发 JavaScript 前端开发
前端性能优化实践之代码层面更改(3)
前端性能优化实践之代码层面更改(3)
170 0
|
测试技术
谈谈我理解的测试的核心价值
测试人员的核心价值      随着公司组织架构的调整,战略调整,产品的实现技术不断变化,现在的测试人员可以说是什么都可以干。       有些人做产品,有些人做平台,有些人做工具......     有些人有点象专职开发,有些人有点象专职运营......      Facebook,google的一些敏捷测试理念中,测试人员应该致力于提出测试解决方案,研究各种测试工具为主,具体的测试执行工作,由coding的开发同学去做。
1337 0
|
机器学习/深度学习 人工智能 运维
基于RPA的自动化优先,正在成为广大组织的主流管理思维
什么是自动化优先思维?它与RPA有什么关系?因何正在成为企业管理主流思维?
153 0
基于RPA的自动化优先,正在成为广大组织的主流管理思维