ansible高级操作 serial滚动更新

news/2024/10/6 22:33:24

1.异步操作和轮询

默认情况下,剧本中的任务会一直处于打开状态,直到任务在每个节点上完成。
这样可以会造成阻塞和超时,因此我们可以使用异步模式一次运行所有任务,然后轮询直到它们完成为止。
Ansible本身就是采用的多线程来操作多个主机节点,可以使用-P来异步操作。
现在所说的异步操作和轮询是针对单个任务来说的。

(1)超时

如果你想避免因为连接超时问题导致任务执行失败,可以指定poll轮询次数,
这样就不会因为一次没连上就报错。

复制代码
---
- hosts: alltasks:- name: "默认长时间运行操作,最多等待45秒,轮询5次"command: /bin/sleep 15async: 45poll: 5
复制代码

async是异步时长,如果没有指定就是同步操作。
poll代表轮询次数,默认值15.

执行结果:

(2)并发

如果poll为0,Ansible启动任务之后会立即转到下一个任务,这样就会并发执行任务。
通过指定poll为0,可以来异步运行任务。
如果使用--forks来执行异步任务,效率会更高。

如果希望异步任务执行并稍后检查,可以这样

复制代码
- name: 'YUM - async task'yum:name: docker-iostate: presentasync: 1000poll: 0register: yum_sleeper- name: 'YUM - check on async task'async_status:jid: "{{ yum_sleeper.ansible_job_id }}"register: job_resultuntil: job_result.finishedretries: 30
复制代码

 

2.滚动更新

你现在有100个节点,你想分批次操作,比如一次操作10台,就可以使用serial参数来定制。
现在我有两个节点:

常规方式来执行任务:
serial1.yaml

复制代码
---
- hosts: allgather_facts: Falsetasks:- name: task onecommand: hostname- name: task twocommand: hostname
复制代码

执行结果:

执行一次,执行了两个任务。
现在添加serial=1,在此查看结果:

我们发现,现在是分两次执行了。

我们不仅可以指定没批执行的数量,还可以指定比率。
  serial: "30%"
还可以指定一个列表:
  serial:
  - 1
  - 5
  - 10
第一批1台,第二批执行5台,这样循环着来。
当然可以将多个批次使用百分比列出:
  serial:
  - "10%"
  - "20%"
  - "100%"
混合定义也是可以的:
  serial:
  - 1
  - 5
  - "20%"

这个功能有什么用了,现在有10个任务,常规做法是所有的机器执行完task1之后,再执行task2,
如果task2有问题,那么这批操作不就作废吗,如果第一批只执行一台,那么就立刻检测出task2任务的异常了。
这样可以大大提高效率。

 

3.最大故障率

默认情况下,只要批处理中存在尚未失败的主机,Ansible就将继续执行。
我们可以通过max_fail_percentage参数来指定故障了。
  max_fail_percentage: 30
如果10台中有3台出现问题,操作即结束。

4.跑一次

在某些情况下,可能只需要对一批主机运行一次任务,可以通过run_one参数来实现。
  run_once: true
该指令强制任务在当前批次的第一个主机上执行任务,然后将所有结果同步给同一批次的其它主机。

5.本地剧本

如果要在本机上执行剧本,只需要:
  ansible-playbook playbook.yml --connection=local
或者在剧本中指定:
  - hosts: 127.0.0.1
    connection: local

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/42920.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Scaling Memcache at Facebook

Memcached 是一种众所周知的、简单的内存缓存解决方案。本文描述了 Facebook 如何利用 memcached 作为构建块来构造和扩展一个分布式键值存储支持世界上最大的社交网络。 1.Introduction一个社交网络(FB)的基础架构通常需要以下允许实时通信(近似,允许一定的延迟), 动态地…

Body SweptSolid Composite Geometry

Body SweptSolid Composite Geometry 下图显示了应用此概念时使用的泛型类和关系。此外,概念可能对通用或标准化的行业实践和场景具有特别重要的意义。对于这些特定的使用场景,下表显示了用户可能采用的一般使用模式的推荐列表。 ##########################################…

Python 潮流周刊#55:分享 9 个高质量的技术类信息源!

大家好,我是猫哥,今天给大家分享几个高质量的技术类信息源。 本文分享的信息源都是周刊类型的,所谓周刊类,就是以固定每周的频率更新,每期分享很多精华内容的链接。它的特点是信息密度极高,可以节省你去查找信息的时间,高效的学习者都会喜欢这类内容。 如果不是看了这篇…

QT工具uic、moc、rcc

QT中的moc、uic、rcc 在学习QT的过程中接触到了moc、uic、rcc这几个名词moc(Meta-Object Compiler),元对象编译器,用于处理QT拓展的C++语法 uic(User Interface Compiler),用户界面编译器,将根据.ui文件生成相应的.h文件,例如根据mainwindow.ui生成ui_mainwindow.h rcc(Re…

TIA Portal软件学习(1)

1.TIA Portal中关于变量与数据类型:(常用地址包括I\Q\M\L\DB) 输入映像寄存器I0.0-10.7(一共可以到32767);输出映像寄存器Q0.0-Q0.7(同上)----由于输入输出是存在一定范围的所以引出了M\L\DB——中间寄存器M(全局):可以在变量表里进行选择格式; 临时变量寄存器L(局部)…

Unity打包时隐藏/删除场景中部分内容

背景 使用Unity编辑器时,我们有时候会将服务端的一些信息通过Unity编辑,但由于这部分内容属于服务端,客户端仅限于编辑器中的编辑,我们并不希望将这部分内容打包出去。因此我们需要在打包时将其隐藏或者删除,但是又不影响编辑器的编辑。 打包相关的回调接口 IPreprocessBu…

IEEE754浮点数表示形式

IEEE754浮点数表示形式 IEEE754浮点数官方文档:https://ieeexplore.ieee.org/document/8766229浮点数的上述表示形式,既没有规定阶码和尾数的位数,也没有规定阶码和尾数采用的机器码形式(原码、反码、补码和移码)。实际上,直到20世纪80年代初,浮点数表示形式还没有统一标…

NOTION添加提醒用@

以下摘自:https://notionchina.co/guide/editing-pages/reminders-mentions.html@-提及一个日期 # 当你输入@后跟一个日期(或today、tomorrow、或yesterday),你会在你的页面上添加一个内联的时间戳。例如,输入@1/12会自动添加一个时间戳,有助于根据需要为你的工作确定日期。…