質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ESXi

ESXiは、ハイパーバイザ「VMware ESX」の簡易版。サービスコンソールなどの管理機能が制限されており、無償で提供されています。シンプルな機能によりセキュリティ性が優秀であると言われています。

VMware

VMwareとは、 ハードウェアで動作するOS上で仮想マシンを作成、実行するソフトウェアです。 Windows上でUNIX系OSを動作させたり、他のOS上で別の仮想OSを動作することが可能です。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

2回答

1476閲覧

ansibleでクラスタ毎にパッチ適用、サーバ再起動したい

nya_sen_go

総合スコア1

ESXi

ESXiは、ハイパーバイザ「VMware ESX」の簡易版。サービスコンソールなどの管理機能が制限されており、無償で提供されています。シンプルな機能によりセキュリティ性が優秀であると言われています。

VMware

VMwareとは、 ハードウェアで動作するOS上で仮想マシンを作成、実行するソフトウェアです。 Windows上でUNIX系OSを動作させたり、他のOS上で別の仮想OSを動作することが可能です。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2021/05/01 14:58

前提・実現したいこと

ansibleでESXiサーバのパッチ適用、再起動を行います。
5台のESXiホストで構成しているvSphereクラスタが10個あります。

シリアル処理だと時間がかかるため、並列処理させたいのですが
ansibleグループをvSphereクラスタ単位とし、forksで並列処理すると、
グループ内で並列処理となるため、同一クラスタ内のホストが同時に再起動し、
サービス影響が出てしまいます。

そのため、クラスタ内では1台1台シリアル処理だが、
別のクラスタ同士では同時(並列)に処理を行うことは可能でしょうか。

補足情報

クラスタ毎にを分けたplaybookを複数同時実行
forks=1にすれば実現可能??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

2点ほど考えてみました。
以下のサンプルインベントリとPlaybookを例にして回答します。

サンプルインベントリ

[cluster1] esxi01.example esxi02.example [cluster2] esxi03.example esxi04.example [cluster3] esxi05.example esxi06.example [all:vars] ansible_python_interpreter=/path.../python ansible_connection=local esxi_username=root esxi_password=secret

サンプルPlaybook

yaml

1--- 2- name: Sample Playbook 3 hosts: all 4 gather_facts: false 5 tasks: 6 - name: Sample task 7 vmware_host_facts: 8 hostname: "{{ ansible_host }}" 9 username: "{{ esxi_username }}" 10 password: "{{ esxi_password }}" 11 validate_certs: false 12 esxi_hostname: "{{ ansible_host }}" 13 register: result

1 cluster毎でグループを分けて、グループ単位でリミットをかけて実行

クラスタ毎にを分けたplaybookを複数同時実行
forks=1にすれば実現可能??

この内容とほぼ被っていますが、クラスタ毎にグループを分けてPlaybookをリミット指定(またはfork)で実行することで可能かと思います。
以下はPlaybookの serial1 にした例です。

yaml

1- name: Sample Playbook 2 hosts: all 3 gather_facts: false 4 serial: 1 5(snip)

以下はクラスタ単位でコマンドを実行する例です。

$ ansible-playbook -i inventory sample.yml -l cluster1 $ ansible-playbook -i inventory sample.yml -l cluster2 $ ansible-playbook -i inventory sample.yml -l cluster3

2 hostsにホストを正規表現で指定

以下のようにhostsで実行したい単位の内容で正規表現を書いて、同時に実行したいserialを記述します。
以下ではクラスタが分かれている esxi01,03,05 esxi02,04,06 単位で実行する例です。

yaml

1--- 2- name: Sample Playbook 3 hosts: "*0[1|3|5]*,*0[2|4|6]*" 4 serial: 3 5 gather_facts: false 6(snip)

または hostsall にして1と同じようにリミットを使用しても良いです。

$ ansible-playbook -i inventory sample.yml -l "*0[1|3|5]*,*0[2|4|6]*"

以下の結果のようにそれぞれのクラスタで1台ずつ実行されます。

bash

1$ ansible-playbook -i inventory sample.yml 2 3PLAY [Sample Playbook] ********************************************************************************************************************************************************************************** 4 5TASK [Sample task] ************************************************************************************************************************************************************************************** 6ok: [esxi05.example] 7ok: [esxi03.example] 8ok: [esxi01.example] 9 10PLAY [Sample Playbook] ********************************************************************************************************************************************************************************** 11 12TASK [Sample task] ************************************************************************************************************************************************************************************** 13ok: [esxi06.example] 14ok: [esxi04.example] 15ok: [esxi02.example] 16 17PLAY RECAP ********************************************************************************************************************************************************************************************** 18esxi01.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 19esxi02.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 20esxi03.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 21esxi04.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 22esxi05.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 23esxi06.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

投稿2021/05/09 13:50

sky-joker

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nya_sen_go

2021/05/14 11:05

本当にありがとうございます。 助かりました。 近いうちに検証してみます。
nya_sen_go

2021/05/30 09:55

1に近い形で進めることにし、 明日お客様の開発環境から実施し、 来週以降は商用の予定です。 案1,2どちらも勉強になりました。 ありがとうございました。
guest

0

投稿2021/05/01 15:38

nya_sen_go

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問