Linux自动化运维(Shell与Ansible)(微课版) 课件 11-1-大项目管理方式_第1页
Linux自动化运维(Shell与Ansible)(微课版) 课件 11-1-大项目管理方式_第2页
Linux自动化运维(Shell与Ansible)(微课版) 课件 11-1-大项目管理方式_第3页
Linux自动化运维(Shell与Ansible)(微课版) 课件 11-1-大项目管理方式_第4页
Linux自动化运维(Shell与Ansible)(微课版) 课件 11-1-大项目管理方式_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux自动化运维项目11:角色和集合

学习目标【知识目标】了解大项目管理方式。了解任务并行和滚动更新的使用场景。了解角色基本概念和目录结构。了解AnsibleGalaxy基本概念和作用。了解集合基本概念和目录结构。【技能目标】掌握Ansible角色管理方式,可以创建和编写角色内容。掌握Ansible集合管理方式,可以部署和使用集合内容。掌握使用ansible-galaxy命令管理角色和集合的方法。【素质目标】培养读者系统分析与解决问题的能力,使其能够深入分析问题,掌握相关知识点,并在实践中高效地完成项目任务。培养读者的安全意识,使其重视Ansible自动化代码的安全性,避免代码出现漏洞,保护系统安全。角色和集合任务1:大项目管理方式目录/Contents01020304动态清单文件forks并行配置滚动更新控制任务执行位置05导入和包含任务01动态清单文件动态清单文件在Ansible中,用户可以手动编辑静态清单文件,并轻松地添加、删除或修改主机信息。静态清单文件非常适合用于主机列表相对稳定,或者不经常更改的小型环境或测试环境。但对于大型基础设施或快速变更的环境来说,保持静态清单文件的最新状态可能会很困难。为了解决这个问题,Ansible提供了对动态清单脚本的支持。动态清单脚本可以从外部数据源中获取主机列表,在Ansible运行时动态生成清单文件,这些脚本可以是可执行程序,也可以是Ansible插件,能够以JSON格式输出清单文件信息。在大型IT环境中,许多系统都使用动态清单脚本来跟踪可用主机和它们的组织方式,比如云提供商、LDAP(LightweightDirectoryAccessProtocol,轻量目录访问协议)、Cobbler或企业CMDB系统。动态清单脚本可以从这些数据源中获取主机列表,并在Ansible执行时将其提供给Ansible模块进行管理。相比于静态清单文件,动态清单脚本具有更高的灵活性和自动化能力,可以更好地适应不同的环境和任务需求。动态清单文件如果通过AWX或RedHatAnsibleAutomationPlatform(红帽Ansible自动化平台)等图形用户界面工具管理和监视动态清单脚本,这些平台的清单脚本数据库会与所有动态清单脚本源同步,并提供Web和REST接口来查看和编辑清单脚本。通过与所有主机的数据库记录相关联,用户可以查看过去的事件历史记录,并查找哪些主机在最近的Playbook运行中出现了故障。动态清单脚本是一种基于外部数据源的清单文件管理方式。Ansible支持两种与外部数据源连接的方式:清单插件和清单脚本。在Ansible2.10及之前的版本中,常见的方式是编写自定义动态清单脚本,用户可以使用任何编程语言编写自定义程序,但传递选项时必须以JSON格式返回清单脚本信息。清单插件是管理动态清单脚本的推荐方式,它可以利用Ansible核心代码的最新更新内容。通过编写自定义的清单插件,用户可以连接到其他动态清单脚本源,并且可以更灵活地管理和更新清单文件。动态清单文件动态清单脚本的使用方式与静态清单文件的类似,清单脚本的位置可以直接在当前的ansible.cfg文件中指定,或者通过-i选项指定。如果清单文件可以执行,则视为动态清单脚本,Ansible会尝试运行它来生成清单文件。如果清单文件不可执行,则视为静态清单文件。动态清单脚本如下所示。#inventory_script.py#!/usr/bin/envpythonimportjsonhost_data={'webserver':{'hosts':['web1','web2'],'vars':{'http_port':80,'proxy_server':''}},'databases':{'hosts':['db1'],'vars':{'ansible_user':'dbadmin','ansible_password':'dbpass'}}}print(json.dumps(host_data))setcolour_count=colour_count+1%}{%endfor%}Currently{{colour_count}}peoplecall{{}}theirfavourite.Andthefollowingareexamplesofthingsthatare{{}}:{%foritemincolour.things%}-{{item}}执行命令python3inventory_script--list|python3-mjson.tool运行动态清单脚本,查看动态清单脚本中的主机信息。02forks并行forks并行当Ansible处理Playbook时,会按顺序运行每个play,确定play的主机列表之后,Ansible将按顺序运行每个任务。通常情况下,所有主机在play中启动下一个任务之前成功完成当前任务。默认情况下,Ansible可以同时在所有目标主机上执行任务,但是如果目标主机数量较多,那么执行任务的主机数量也会很多,这可能会导致系统负载过高,影响系统稳定性。因此,可以使用forks关键字控制同时执行任务的主机数量,以提高任务执行效率。在小型主机列表中,可以同时连接到play中的所有主机以执行每项任务。但如果该play以数百个主机为目标,则可能会给控制节点带来沉重的负担。因此,根据实际情况,可以选择合适的策略来平衡负载和效率,以确保Ansible自动化运维任务的顺利执行。forks并行Ansible所允许的最大同时连接数由Ansible配置文件中的forks参数控制。默认情况下,该参数设置为5,可在/etc/ansible/ansible.cfg文件中查看默认值。ansible或ansible-playbook命令都支持-f或--forks选项,如果要修改forks的数量,可以在Playbook中使用forks关键字,或者在命令行中使用-f参数来指定。如果Ansible控制节点配置了默认值为5的forks参数,这表示Ansible可以同时处理的最大连接数为5。当一个play包含10个受管主机时,Ansible将在前5个受管主机上执行play中的第1个任务,然后在剩下的5个主机上再次执行第1个任务。完成对所有主机的第一个任务后,Ansible将每次在5个主机的组中逐一执行下一个任务,直到play执行完毕。grepforks/etc/ansible/ansible.cfgforks=5ansible-playbook-f30my_playbook.yml03配置滚动更新配置滚动更新在示例中,web_servers主机组包含100个服务器,通过将serial设置为10,每次将按照每组10个主机的数量进行操作,通过控制任务的并发性,使大规模集群的配置更新和服务重启过程更加可控和稳定。-name:DeployandRestartServicehosts:web_serversserial:10#设置每组处理的主机数量为10tasks:-name:Copyconfigurationfileansible.builtin.copy:src:/path/to/config/filedest:/etc/service/config.conf-name:Restartserviceansible.builtin.service:name:service_namestate:restarted在生产环境中,当需要更新配置并重启服务时,使用serial关键字可以控制并发性,一组一组进行更新和重启,而不是同时对所有主机进行操作,避免整个集群同时停机导致服务中断,可提高系统的可用性和稳定性,减少对用户的影响。在Playbook中使用serial关键字示例如下。配置滚动更新在示例中,第一个Plabook中的webservers组有20个主机,那么第一批包含6个主机,第二批包含6个主机,第三批包含6个主机,最后一批包含2个主机。----name:testplayhosts:webserversserial:"30%"----name:testplayhosts:webserversserial:-1-5-10serial关键字还可以指定为百分比,或者以列表的形式指定批处理流程,具体示例如图。第一批包含1个主机,第二批包含5个主机,第三批包含10个主机。如果剩余的主机数量少于10个,则下一批将包含所有剩余的主机。04控制任务执行位置控制任务执行位置默认情况下,Ansible会在Playbook中指定的所有主机上执行任务,但有些情况下,需要将任务委派给不同的机器或组,或者只在本地运行Playbook。通过任务委派,可以更加灵活地控制Playbook的执行过程。常见的任务委派可以使用delegate_to、delegate_facts、run_once、local_action等关键字来实现如表所示。在Ansible中,可以使用delegate_to和delegate_facts关键字将任务委派给指定的机器或组,或将事实委派给特定的机器或组。序号委派关键字描述1delegate_to将任务委派给指定的主机或组执行2delegate_facts将事实委派到指定的主机或组收集3local_action将任务委派给Ansible控制节点上的本地主机执行4run_once将任务委派给所有主机中的一个主机执行控制任务执行位置通过delegate_to关键字,可以将任务从当前主机转移到其他主机,以便在指定的主机上执行任务。delegate_to关键字具体示例如下。在上面的示例中,delegate_to关键字将Stopwebserver任务委派给名为web_server3的主机执行,该任务将在web_server3上执行,而不是在play中的web_servers主机列表中的主机上执行。----name:Exampleplaybookhosts:web_serverstasks:-name:Stopwebserverservice:name:httpdstate:stoppeddelegate_to:web_server3控制任务执行位置通过delegate_facts关键字,可以将事实从当前主机转移到其他主机,以便在指定的主机上使用这些事实。delegate_facts关键字具体示例如下。在上面的示例中,delegate_facts参数被设置为true,因此收集到的事实将分配给被委派的主机web_server3,而不是当前执行任务的主机。----name:Exampleplaybookhosts:web_serverstasks:-name:Gatherfactssetup:delegate_facts:truedelegate_to:web_server3控制任务执行位置local_action关键字用于在控制节点上执行本地任务,而不是在远程主机上执行。local_action关键字具体示例如下。在上面的示例中,local_action关键字将Runlocalscript任务委派给Ansible控制节点上的本地主机执行,而不是在远程主机上执行。----name:Exampleplaybookhosts:web_serverstasks:-name:Runlocalscriptlocal_action:command/path/to/local/script.sh控制任务执行位置run_once关键字用于确保一个任务只在清单文件的主机中的一个主机上运行。run_once关键字具体示例如下。在上面的示例中,Createdirectory任务使用file模块创建一个名为/path/to/directory的目录。由于run_once关键字被设置为true,因此该任务只会在第一个主机上执行,而不是在所有主机上都执行。----name:Exampleplaybookhosts:web_serverstasks:-name:Createdirectoryfile:path:/path/to/directorystate:directoryrun_once:true05导入和包含任务导入和包含任务在编写大型Playbook时,如果将所有任务都写在一个Playbook文件中,这些任务可能会变得难以维护和理解。为了使Playbook更加模块化和易于维护,可以将其分成较小的文件,可采用模块化方式将多个Playbook组合为一个主Playbook,或者将文件中的任务列表插入play,这样可以更轻松地在不同项目中重用play或任务序列。常见的导入和包含关键字如表所示。序号关键字描述1import_playbook静态导入另一个Playbook文件,可以在当前Playbook中使用导入的Playbook中定义的变量。与动态包含相比,静态导入不支持循环2import_tasks静态导入一个或多个任务文件,可以在当前Playbook中使用导入的任务文件中定义的变量。与动态包含相比,静态导入不支持循环3import_role静态导入一个或多个角色,可以在当前Playbook中使用导入的角色中定义的变量。与动态包含相比,静态导入不支持循环4include_tasks动态包含一个或多个任务文件。可以与循环一起使用,对于循环中的每个项目,包含的任务文件将被执行一次。支持变量传递。与静态包含相比,动态包含无法在--list-tags中列出标签5include_role动态包含一个或多个角色。可以与循环一起使用,对于循环中的每个项目,包含的角色将被执行一次。支持变量传递。与静态包含相比,动态包含无法在--list-tags中列出标签导入Playbookimport_playbook指令可以将包含play列表的外部文件导入主Playbook中,它允许在主Playbook中导入一个或多个额外的Playbook。通过使用import_playbook指令,可以将复杂的Playbook分解为多个模块化的部分,以提高其可维护性和可重用性。在Ansible项目中有两个Playbook文件,分别是webserver.yml和database.yml,webserver.yml包含Web服务器的自动化任务,database.yml包含数据库服务器的自动化配置。在主Playbook中导入两个额外Playbook的示例如下:由于导入的内容是一个完整的Playbook,因此import_playbook功能只能在Playbook的顶层使用,不能在play内使用。如果导入多个Playbook,它们将按照导入的顺序依次执行。-name:Preparethewebserverimpor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论