2017-03-29 6 views
0

私は、ミニオンでKubernetesのバージョンをアップグレードする可能性のあるプレイブックを作成しています。2つのグループをターゲットとする可能性のあるプレイブック

- 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は、私は、実際のyum updateが起こることになっているが、このステップは、各手先上で実行される前にhosts: kubernetes-minionsことが規定されているに見えますkubernetes-master

私が抱えている問題は、コードン/アンコドンのステップについて、ミニオンではなくクベネトマスターノードで行うことです。私はdelegate_to: kubernetes-masterを使用しようとしましたが、ミニオン自体のステップを実行しているようです。

EDIT :: 手下のアップグレードは、ダウンタイムを最小限に抑えるために、並列に順次なく行われます。

+0

@techraf自動化のために、できるだけシンプルにしたい。あなたが2つの演劇を言及するとき、あなたはマスターにコード/ uncordonに1つの演劇を意味し、パッケージを更新するために他の演劇? –

答えて

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 }}" 
+0

ありがとうございます。これは私が探していたものです。以来、私は比較的新しいAnagersに様々な戦略を学んでいます。プレイブックでIP /グループを使用する方法を指定するドキュメントへのリンクがありますか。私は、インベントリファイル内のグループの下で定義されたプレイブック内の特定の値を呼び出す方法を意味します。 –

+1

このトピックに関する最も関連性の高いドキュメントは[こちら](http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts)です。 –