针对两个小组的Ansible剧本

时间:2017-03-29 22:52:55

标签: ansible

我正在写一本可以在小兵上升级Kubernetes版本的ansible剧本。

- name: Configure and start the Kubernetes Nodes
  hosts: kubernetes-minions
  serial: 1
  tasks:
   - name: backup K8S master files.
      shell: "{{item}}"
      with_items:
        - cp /etc/kubernetes/config /var/tmp/k8s-backup/
        - cp /etc/kubernetes/kubelet /var/tmp/k8s-backup/
   - name: cordon the minion.
      command: kubectl cordon {{ ansible_default_ipv4.interface }}
      delegate_to: kubernetes-master
   - name: Install latest version of Docker on Minion.
      yum: name=kubernetes-1.3.0-0.3.git86dc49a.el7 state=present
   - name: start the kubernetes kubelet
      service: name=kubelet state=restarted enabled=yes
   - name: start the kubernetes kube-proxy
      service: name=kube-proxy state=restarted enabled=yes
   - name: uncordon the minion.
      command: kubectl uncordon {{ ansible_default_ipv4.interface }}
      delegate_to: kubernetes-master

我的库存文件看起来像::

[kubernetes-masters]
172.29.219.102

[kubernetes-minions]
172.29.219.105
172.29.219.106
172.29.219.107

现在我已经定义了目标组tp为hosts: kubernetes-minions,其中实际的yum update应该发生但是在这个步骤在每个minion上运行之前,我需要在{{1}上封锁这些节点}}

现在我遇到的问题是如何告诉ansible,对于警戒线/未命令的步骤,在kubernetes-master节点而不是minion上进行。我试图使用kubernetes-master,但似乎它在仆从本身上迈出了一步。

编辑:: 对爪牙的升级将按顺序完成,而不是并行完成,以最大限度地减少停机时间。

1 个答案:

答案 0 :(得分:1)

更正delegate_to缩进(应与任务位于同一级别)并从您的组中选择单个主人:

主机:

[kubernetes-masters]
ku1

[kubernetes-minions]
ku2
ku3

剧本:

---
- hosts: kubernetes-minions
  gather_facts: no
  connection: local
  serial: 1
  tasks:
      - debug: msg="cordon"
        delegate_to: "{{ groups['kubernetes-masters'] | first }}"

      - debug: msg="update minion"

      - debug: msg="uncordon"
        delegate_to: "{{ groups['kubernetes-masters'] | first }}"