我正在写一本可以在小兵上升级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
,但似乎它在仆从本身上迈出了一步。
编辑:: 对爪牙的升级将按顺序完成,而不是并行完成,以最大限度地减少停机时间。
答案 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 }}"