zoukankan      html  css  js  c++  java
  • ansible高级操作

    1.异步操作和轮询

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

    (1)超时

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

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

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

    执行结果:

    (2)并发

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

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

    - name: 'YUM - async task'
      yum:
        name: docker-io
        state: present
      async: 1000
      poll: 0
      register: yum_sleeper
    
    - name: 'YUM - check on async task'
      async_status:
        jid: "{{ yum_sleeper.ansible_job_id }}"
      register: job_result
      until: job_result.finished
      retries: 30

    2.滚动更新

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

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

    ---
    - hosts: all
      gather_facts: False
      tasks:
        - name: task one
          command: hostname
        - name: task two
          command: 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

  • 相关阅读:
    Thomas Hobbes: Leviathan
    10 Easy Steps to a Complete Understanding of SQL
    day3心得
    py编码终极版
    day2 作业
    Python 中的比较:is 与 ==
    day2-心得
    day1--心得
    day1作业
    python--open用法
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/12657331.html
Copyright © 2011-2022 走看看