当前位置: 首页 > ds >正文

Ansible 项目管理核心要点总结

Ansible 项目管理核心要点总结

一、引用主机清单

在playbook中引用hosts时,如果对应的主机清单中没有配置该主机,是无法执行的

如果主机清单中配置的是主机名称,那么在playbook中hosts字段后写的是ip或者主机名,那么也是无法执行的,示例如下:

[student@master ansible]$ vim a.yml 
---     
- name: testhosts: 192.168.122.10tasks:- name: test1debug:msg: 123
~  
//跳过该任务,无法执行
[student@master ansible]$ ansible-playbook a.yml 
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.122.10PLAY [test] ********************************************************************
skipping: no hosts matchedPLAY RECAP *********************************************************************

在引用主机清单时,一定要注意playbook里面hosts字段后写的内容一定只能时主机清单里面编辑的内容

使用playbook引用主机清单的方式有很多种,如下

Hosts: node1

Hosts: node1.example.com

Hosts: 172.16.30.10

Hosts: all ----所有的受控主机

Hosts: net ----主机组net

Hosts: ‘*’ ----所有的主机

Hosts: ‘*.example.com’

Hosts: ‘172.16.30.*’

Hosts: ‘web*’ —通过匹配符*来匹配

Hosts: net:webserver ----取net组和webserver组的并集

Hosts: net:&webserver —取交集

Hosts: net:!node1 —net组所有的主机,但是除了node1

Hosts: node[1-5]

Hosts: node[a-d]

二、配置并行

当ansible处理playbook时,会按顺序运行每个play。确定play的主机列表后,ansible将按顺序运行每个任务。通常,所有主机必须在任何主机在play中启动下一个任务之前完成任务

理论上,ansible可以连接到play中的所有主机以执行每项任务。这非常适用于小型主机列表。但如果该play以数百台主机为目标,则可能会给控制节点带来沉重的负担

Ansible所进行的最大同时连接数由ansible配置文件的forks参数控制。默认值为5.

比如一个play具有10台受控主机,我们forks的值为5,那么,首先前5台主机,同时运行第一个play,当这5台主机运行完成第一个play后,后5台主机同时运行第一个play,等到10台主机运行完成第一个play时,才开始运行第二个play,以此类推

当受控主机是linux主机时,我们执行play的时候,大多数的任务是在受控主机上运行的,ansible控制节点得负载就少了,这种情况下呢,我们可以把forks的值设置得更高一些

当受控主机是网络设备时,比如路由器交换机时,大多数得模块是在控制节点中运行的,这时控制节点的负载就会很高,这个时候我们就不能去提高forks的值了

通常情况下,ansible运行play时,它会确保所有的受控主机在启动任何进行下一项任务之前已完成了每个任务。在所有受控主机完成所有任务后,将运行任何通知的处理器

比如说,给所有webserver主机组安装httpd软件包时,安装成功后会重启服务,那么我们使用触发器进行配置

---     
- name: web stationhosts: webservertasks:- name: install httpdyum:name: httpdstate: latestnotify:           //触发器- restart httpdhandlers:             //处理器- name: restart httpdservice:name: httpdstate: restarted
~  

那么加入webserver此时有非常非常多的主机,当我们中间某个更新httpd失败时,那么handlers还会执行吗?我们都知道,handlers它是在我们执行完所有的play之后,才会去执行的,但是node1、node2都更新成功了,node3这里失败了,那么整个play就直接中断了,不会去执行handlers了。那么就有问题了,那我们如何来解决这个问题呢?

就可以用到serial参数,加入给该参数设置为2,那么意思就是先从webserver中选择2台主机进行运行play,当我这两台主机全部运行play完成后,再从webserver中未执行play的主机中选择2台进行执行play,以此类推。设置如下:

示例:

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1,node2,node3tasks:- name: test1debug:msg: 123- name: test2debug:msg: 456
~  
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]
ok: [node2]
ok: [node3]TASK [test1] *******************************************************************
ok: [node1] => {"msg": 123
}
ok: [node2] => {"msg": 123
}
ok: [node3] => {"msg": 123
}TASK [test2] *******************************************************************
ok: [node1] => {"msg": 456
}
ok: [node2] => {"msg": 456
}
ok: [node3] => {"msg": 456
}PLAY RECAP *********************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1,node2,node3serial: 2tasks:- name: test1debug:msg: 123- name: test2debug:msg: 456
~  
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]
ok: [node2]TASK [test1] *******************************************************************
ok: [node1] => {"msg": 123
}
ok: [node2] => {"msg": 123
}TASK [test2] *******************************************************************
ok: [node1] => {"msg": 456
}
ok: [node2] => {"msg": 456
}PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node3]TASK [test1] *******************************************************************
ok: [node3] => {"msg": 123
}TASK [test2] *******************************************************************
ok: [node3] => {"msg": 456
}PLAY RECAP *********************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

包含和导入:导入 playbook,部署httpd站点

示例:

[student@master ansible]$ cat repo.yml 
---
- name: repohosts: alltasks:- name: repo1yum_repository:name: baseosdescription: aa1baseurl: http://ansible.example.com/rhel9/BaseOSenabled: yesgpgcheck: no- name: repo2yum_repository:name: appstreamdescription: ee1baseurl: http://ansible.example.com/rhel9/AppStreamenabled: yesgpgcheck: no- name: install lvm2yum:name: lvm2state: present
[student@master ansible]$ vim httpd.yml
---
- name: import repoimport_playbook: repo.yml
- name: install httpdhosts: node1tasks:- name: install httpd1yum:name: httpdstate: present
~ 
[student@master ansible]$ ansible-playbook httpd.yml PLAY [repo] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node3]
ok: [node1]
ok: [node2]
ok: [node5]
ok: [node4]TASK [repo1] *******************************************************************
ok: [node4]
ok: [node3]
ok: [node5]
ok: [node1]
ok: [node2]TASK [repo2] *******************************************************************
ok: [node2]
ok: [node1]
ok: [node3]
ok: [node5]
ok: [node4]TASK [install lvm2] ************************************************************
ok: [node3]
ok: [node1]
ok: [node2]
ok: [node5]
ok: [node4]PLAY [install httpd] ***********************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [install httpd1] **********************************************************
ok: [node1]PLAY RECAP *********************************************************************
node1                      : ok=6    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[student@master ansible]$ vim vsftpd.yml
--- 
- name: install vsftpdyum:name: vsftpdstate: present
~  
[student@master ansible]$ vim httpd.yml 
---
- name: import repoimport_playbook: repo.yml
- name: install httpdhosts: node1tasks:- name: install httpd1yum:name: httpdstate: present- import_tasks: vsftpd.yml
~  
[student@master ansible]$ ansible-playbook httpd.yml PLAY [repo] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node4]
ok: [node3]
ok: [node1]
ok: [node5]
ok: [node2]TASK [repo1] *******************************************************************
ok: [node1]
ok: [node5]
ok: [node2]
ok: [node3]
ok: [node4]TASK [repo2] *******************************************************************
ok: [node1]
ok: [node3]
ok: [node2]
ok: [node5]
ok: [node4]TASK [install lvm2] ************************************************************
ok: [node3]
ok: [node2]
ok: [node4]
ok: [node1]
ok: [node5]PLAY [install httpd] ***********************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [install httpd1] **********************************************************
ok: [node1]TASK [install vsftpd] **********************************************************
changed: [node1]PLAY RECAP *********************************************************************
node1                      : ok=7    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

包含:在tasks中包含任务,安装vsftpd软件包,并启动vsftpd服务

[student@master ansible]$ vim httpd.yml 
---
- name: import repoimport_playbook: repo.yml
- name: install httpdhosts: node1tasks:- name: install httpd1yum:name: httpdstate: present- include_tasks: vsftpd.yml
~  
[student@master ansible]$ ansible-playbook httpd.yml PLAY [repo] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node5]
ok: [node1]
ok: [node4]
ok: [node3]
ok: [node2]TASK [repo1] *******************************************************************
ok: [node2]
ok: [node1]
ok: [node3]
ok: [node5]
ok: [node4]TASK [repo2] *******************************************************************
ok: [node3]
ok: [node4]
ok: [node1]
ok: [node5]
ok: [node2]TASK [install lvm2] ************************************************************
ok: [node5]
ok: [node1]
ok: [node3]
ok: [node2]
ok: [node4]PLAY [install httpd] ***********************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [install httpd1] **********************************************************
ok: [node1]TASK [include_tasks] ***********************************************************
included: /home/student/ansible/vsftpd.yml for node1TASK [install vsftpd] **********************************************************
ok: [node1]PLAY RECAP *********************************************************************
node1                      : ok=8    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[student@master ansible]$ vim vsftpd.yml 
---
- name: install vsftpdyum:name: mariadb-serverstate: present
~  
[student@master ansible]$ ansible-playbook httpd.yml PLAY [repo] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node4]
ok: [node2]
ok: [node1]
ok: [node5]
ok: [node3]TASK [repo1] *******************************************************************
ok: [node2]
ok: [node1]
ok: [node5]
ok: [node4]
ok: [node3]TASK [repo2] *******************************************************************
ok: [node1]
ok: [node2]
ok: [node4]
ok: [node3]
ok: [node5]TASK [install lvm2] ************************************************************
ok: [node2]
ok: [node4]
ok: [node1]
ok: [node5]
ok: [node3]PLAY [install httpd] ***********************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [install httpd1] **********************************************************
ok: [node1]TASK [include_tasks] ***********************************************************
included: /home/student/ansible/vsftpd.yml for node1TASK [install vsftpd] **********************************************************
changed: [node1]PLAY RECAP *********************************************************************
node1                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
http://www.xdnf.cn/news/20149.html

相关文章:

  • 进程与线程详解, IPC通信与RPC通信对比,Linux前台与后台作业
  • Android入门到实战(八):从发现页到详情页——跳转、传值与RecyclerView多类型布局
  • 深度学习——ResNet 卷积神经网络
  • Python快速入门专业版(二):print 函数深度解析:不止于打印字符串(含10+实用案例)
  • Docker多阶段构建Maven项目
  • K8s资源管理:高效管控CPU与内存
  • React学习之路永无止境:下一步,去向何方?
  • Jmeter基础教程详解
  • STM32H750 RTC介绍及应用
  • 国产GEO工具哪家强?巨推集团、SEO研究协会网、业界科技三强对比
  • 用C++实现日期类
  • upload-labs通关笔记-第17关文件上传关卡之二次渲染jpg格式
  • 关于如何在PostgreSQL中调整数据库参数和配置的综合指南
  • Vue基础知识-脚手架开发-子传父(props回调函数实现和自定义事件实现)
  • Win11 解决访问网站525 问题 .
  • 【RK3576】【Android14】如何在Android kernel-6.1 的版本中添加一个ko驱动并编译出来?
  • Django 常用功能完全指南:从核心基础到高级实战
  • [光学原理与应用-401]:设计 - 深紫外皮秒脉冲激光器 - 元件 - 布拉格衍射在深紫外皮秒声光调制器(AOM)中的核心作用与系统实现
  • 小程序:12亿用户的入口,企业数字化的先锋军
  • Linux编程——网络编程(UDP)
  • 计算机网络模型入门指南:分层原理与各层作用
  • 对接旅游行业安全需求:旅游安全急救实训室的功能构建与育人目标
  • 网络安全初级-渗透测试
  • 用AI做TikTok影视解说,全流程全自动成片,不懂外语也能做全球矩阵!
  • 办公任务分发项目 laravel vue mysql 第一章:核心功能构建 API
  • 系统越拆越乱?你可能误解了微服务的本质!
  • 【Linux系统】线程同步
  • 正则表达式与转义符的区别。注意输入的东西经过了一次转义,一次正则表达式。\\转义是单斜杠\\在正则表达式也是单斜杠所以\\\\经过两道门才是字符单斜杠
  • MongoDB Change Streams:实时监听数据变化的实战场景
  • clickhouse迁移工具clickhouse-copier