Red Hat Training
A Red Hat training course is available for Red Hat OpenStack Platform
第10章 Ansible を使用したオーバークラウドの設定
Ansible は、オーバークラウドの設定を適用する主要な方法です。本章では、オーバークラウドの Ansible 設定を操作する手順を説明します。
director は Ansible Playbook を自動生成しますが、Ansible の構文を十分に理解しておくと役立ちます。Ansible の使用方法については、https://docs.ansible.com/ を参照してください。
Ansible では、roles の概念も使用します。これは、OpenStack Platform director のロールとは異なります。
10.1. Ansible ベースのオーバークラウド設定 (config-download)
config-download
の機能により、director はオーバークラウドを設定します。director は OpenStack Orchestration サービス (heat) および OpenStack Workflow サービス (mistral) と共に config-download
を使用し、ソフトウェア設定を生成して各オーバークラウドノードに適用します。Heat は SoftwareDeployment
リソースから全デプロイメントデータを作成して、オーバークラウドのインストールと設定を行いますが、設定の適用は一切行いません。Heat は API から設定データの提供のみを行います。director によりスタックが作成されたら、Mistral ワークフローが Heat API に対して設定データ取得のクエリーを実行し、Ansible Playbook のセットを生成してオーバークラウドに適用します。
結果として、openstack overcloud deploy
コマンドを実行すると、以下のプロセスが実行されます。
-
director は
openstack-tripleo-heat-templates
を元に新たなデプロイメントプランを作成し、プランをカスタマイズするための環境ファイルおよびパラメーターをすべて追加します。 - director は Heat を使用してデプロイメントプランを翻訳し、オーバークラウドスタックとすべての子リソースを作成します。これには、OpenStack Bare Metal (ironic) を使用したノードのプロビジョニングも含まれます。
- Heat はデプロイメントプランからソフトウェア設定も作成します。director はこのソフトウェア設定から Ansible Playbook をコンパイルします。
- director は、特に Ansible SSH アクセス用としてオーバークラウドノードに一時ユーザー (tripleo-admin1) を生成します。
- director は Heat ソフトウェア設定をダウンロードし、Heat の出力を使用して Ansible Playbook のセットを生成します。
-
director は、
ansible-playbook
を使用してオーバークラウドノードに Ansible Playbook を適用します。
10.2. config-download の作業ディレクトリー
director により、config-download
プロセス用に Ansible Playbook のセットが生成されます。これらの Playbook は /var/lib/mistral/
内の作業ディレクトリーに保管されます。このディレクトリーには、オーバークラウドの名前が付けられます。したがって、デフォルトでは overcloud
です。
作業ディレクトリーには、各オーバークラウドロールの名前が付けられた複数のサブディレクトリーが存在します。これらのサブディレクトリーには、オーバークラウドロールのノードの設定に関連するすべてのタスクが含まれます。さらに、これらのサブディレクトリーには、特定のノードの名前が付けられたサブディレクトリーが存在します。これらのサブディレクトリーには、オーバークラウドロールのタスクに適用するノード固有の変数が含まれます。したがって、作業ディレクトリー内のオーバークラウドロールは、以下のような構成になります。
─ /var/lib/mistral/overcloud │ ├─── Controller │ ├── overcloud-controller-0 │ ├── overcloud-controller-1 │ └── overcloud-controller-2 ├─── Compute │ ├── overcloud-compute-0 │ ├── overcloud-compute-1 │ └── overcloud-compute-2 ...
それぞれの作業ディレクトリーは、各デプロイメント操作後の変更を記録するローカルの Git リポジトリーとしても機能します。このことは、各デプロイメント間の設定変更を追跡するのに役立ちます。
10.3. config-download の作業ディレクトリーへのアクセスの有効化
/var/lib/mistral/
にある作業ディレクトリー内の全ファイルの所有者は、OpenStack Workflow サービス (mistral) コンテナーの mistral
ユーザーです。アンダークラウドの stack
ユーザーに、このディレクトリー内の全ファイルへのアクセス権限を付与することができます。この設定は、ディレクトリー内の特定操作を実施するのに役立ちます。
手順
アンダークラウドの
stack
ユーザーにこれらのファイルへのアクセス権限を付与するには、setfacl
コマンドを使用します。$ sudo setfacl -R -m u:stack:rwx /var/lib/mistral
このコマンドを実行しても、
mistral
ユーザーのディレクトリーへのアクセス権限は維持されます。
10.4. config-download ログの確認
config-download
プロセス中、Ansible によりアンダークラウド内の config-download
の作業ディレクトリーにログファイルが作成されます。
手順
less
コマンドを使用して、config-download
の作業ディレクトリー内のログを表示します。以下の例では、overcloud
作業ディレクトリーが使われています。$ less /var/lib/mistral/overcloud/ansible.log
10.5. 手動での config-download の実行
/var/lib/mistral/overcloud
作業ディレクトリーには、ansible-playbook
と直接対話するために必要な Playbook とスクリプトが含まれています。以下の手順では、これらのファイルとの対話方法について説明します。
手順
Ansible Playbook のディレクトリーに移動します。
$ cd /var/lib/mistral/overcloud/
作業ディレクトリーに移動したら、
ansible-playbook-command.sh
を実行して、デプロイメントを再現します。$ ./ansible-playbook-command.sh
このスクリプトには、追加の Ansible 引数を渡すことができます。それらの引数は、
ansible-playbook
コマンドに未変更で渡されます。これにより、チェックモード (--check
)、ホストの限定 (--limit
)、変数のオーバーライド (-e
) などの Ansible の機能を更に活用することが可能となります。以下に例を示します。$ ./ansible-playbook-command.sh --limit Controller
作業ディレクトリーには、オーバークラウドの設定を実行する
deploy_steps_playbook.yaml
という名前の Playbook が含まれています。この Playbook を表示するには、以下のコマンドを実行します。$ less deploy_steps_playbook.yaml
Playbook は、作業ディレクトリーに含まれているさまざまなタスクファイルを使用します。タスクファイルには、OpenStack Platform の全ロールに共通するものと、特定の OpenStack Platform ロールおよびサーバー固有のものがあります。
作業ディレクトリーには、オーバークラウドの
roles_data
ファイルで定義されている各ロールに対応するサブディレクトリーも含まれます。以下に例を示します。$ ls Controller/
各 OpenStack Platform ロールにディレクトリーには、そのロール種別の個々のサーバー用のサブディレクトリーも含まれます。これらのディレクトリーには、コンポーザブルロールのホスト名の形式を使用します。以下に例を示します。
$ ls Controller/overcloud-controller-0
Ansible のタスクはタグ付けられます。タグの全一覧を確認するには、
ansible-playbook
で CLI の引数--list-tags
を使用します。$ ansible-playbook -i tripleo-ansible-inventory.yaml --list-tags deploy_steps_playbook.yaml
次に、
ansible-playbook-command.sh
スクリプトで--tags
、--skip-tags
、--start-at-task
のいずれかを使用して、タグ付けた設定を適用します。以下に例を示します。$ ./ansible-playbook-command.sh --tags overcloud
--tags
、--skip-tags
、--start-at-task
などの ansible-playbook CLI 引数を使用する場合には、デプロイメントの設定は、間違った順序で実行したり適用したりしないでください。これらの CLI 引数は、以前に失敗したタスクを再度実行する場合や、初回のデプロイメントを繰り返す場合に便利な方法です。ただし、デプロイメントの一貫性を保証するには、deploy_steps_playbook.yaml
の全タスクを順番通りに実行する必要があります。
10.6. 作業ディレクトリーでの Git 操作の実施
config-download
の作業ディレクトリーは、ローカルの Git リポジトリーとして機能します。デプロイメント操作を実行するたびに、director は該当する変更に関する Git コミットを作業ディレクトリーに追加します。これにより、Git 操作を実施して、さまざまなステージでのデプロイメント設定を表示したり、異なるデプロイメント間で設定を比較したりすることができます。
作業ディレクトリーには制約がある点に注意してください。たとえば、Git を使用して config-download
の作業ディレクトリーを前のバージョンに戻しても、作業ディレクトリー内の設定が影響を受けるだけで、以下の設定は影響を受けません。
- オーバークラウドデータスキーマ: 作業ディレクトリーのソフトウェア設定の前のバージョンを適用しても、データ移行およびスキーマ変更は取り消されません。
- オーバークラウドのハードウェアレイアウト: 以前のソフトウェア設定に戻しても、スケールアップ/ダウン等のオーバークラウドハードウェアに関する変更は取り消されません。
-
Heat スタック: 作業ディレクトリーを前のバージョンに戻しても、Heat スタックに保管された設定は影響を受けません。Heat スタックは新たなバージョンのソフトウェア設定を作成し、それがオーバークラウドに適用されます。つまり、オーバークラウドに永続的な変更を加えるには、
openstack overcloud deploy
を再度実行する前に、オーバークラウドスタックに適用する環境ファイルを変更する必要があります。
以下の手順で、Git を使用して config-download
の作業ディレクトリー内の異なるコミットを比較する方法を説明します。
手順
オーバークラウドに関する
config-download
の作業ディレクトリーに移動します。この例の作業ディレクトリーは、overcloud
という名前のオーバークラウド用です。$ cd /var/lib/mistral/overcloud
git log
コマンドを実行して、作業ディレクトリー内のコミットの一覧を表示します。ログの出力に日付が表示されるようにフォーマットを設定することもできます。$ git log --format=format:"%h%x09%cd%x09" a7e9063 Mon Oct 8 21:17:52 2018 +1000 dfb9d12 Fri Oct 5 20:23:44 2018 +1000 d0a910b Wed Oct 3 19:30:16 2018 +1000 ...
デフォルトでは、最新のコミットから順に表示されます。
2 つのコミットのハッシュに対して
git diff
コマンドを実行し、デプロイメント間の違いをすべて表示します。$ git diff a7e9063 dfb9d12
10.7. 手動での config-download ファイルの作成
特定の状況では、標準のワークフローとは別に専用の config-download
ファイルを生成する場合があります。たとえば、個別に設定を適用できるように、openstack overcloud deploy
コマンドに --stack-only
オプションを設定して、オーバークラウド Heat スタックを生成することがあります。以下の手順では、専用の config-download
ファイルを手動で作成する方法について説明します。
手順
config-download
ファイルを生成します。$ openstack overcloud config download \ --name overcloud \ --config-dir ~/config-download
-
--name
は、Ansible ファイルのエクスポートに使用するオーバークラウドです。 -
--config-dir
は、config-download
ファイルを保存する場所です。
-
config-download
ファイルが含まれるディレクトリーに移動します。$ cd ~/config-download
静的なインベントリーファイルを生成します。
$ tripleo-ansible-inventory \ --ansible_ssh_user heat-admin \ --static-yaml-inventory inventory.yaml
これにより、手動で生成した config-download
ファイルを使用して設定を実施するのに必要なファイルが得られます。デプロイメント用の Playbook を実行するには、ansible-playbook
コマンドを実行します。
$ ansible-playbook \ -i inventory.yaml \ --private-key ~/.ssh/id_rsa \ --become \ ~/config-download/deploy_steps_playbook.yaml
この設定から手動で overcloudrc
ファイルを生成するには、以下のコマンドを実行します。
$ openstack action execution run \ --save-result \ --run-sync \ tripleo.deployment.overcloudrc \ '{"container":"overcloud"}' \ | jq -r '.["result"]["overcloudrc.v3"]' > overcloudrc.v3
10.8. config-download の主要ファイル
config-download
の作業ディレクトリー内の主要なファイルを以下に示します。
Ansible の設定および実行
config-download
の作業ディレクトリー内の以下のファイルは、Ansible を設定/実行するための専用ファイルです。
- ansible.cfg
-
ansible-playbook
実行時に使用する設定ファイル。 - ansible.log
-
最後に実行した
ansible-playbook
に関するログファイル。 - ansible-errors.json
- デプロイメントエラーが含まれる JSON 構造のファイル。
- ansible-playbook-command.sh
-
この実行可能スクリプトを使用して、最後のデプロイメント操作の
ansible-playbook
コマンドを再実行することができます。 - ssh_private_key
- Ansible がオーバークラウドノードにアクセスする際に使用する SSH 秘密鍵。
- tripleo-ansible-inventory.yaml
- すべてのオーバークラウドノードのホストおよび変数が含まれる Ansible インベントリーファイル。
- overcloud-config.tar.gz
- 作業ディレクトリーのアーカイブ。
Playbook
以下のファイルは、config-download
の作業ディレクトリー内の Playbook です。
- deploy_steps_playbook.yaml
- デプロイメントのメインステップ。この Playbook により、オーバークラウド設定の主要な操作が実施されます。
- pre_upgrade_rolling_steps_playbook.yaml
- メジャーアップグレードのための事前アップグレードステップ。
- upgrade_steps_playbook.yaml
- メジャーアップグレードのステップ。
- post_upgrade_steps_playbook.yaml
- メジャーアップグレードに関するアップグレード後ステップ。
- update_steps_playbook.yaml
- マイナーアップデートのステップ。
- fast_forward_upgrade_playbook.yaml
- Fast Forward Upgrade のタスク。OpenStack Platform のロングライフバージョンから次のロングライフバージョンにアップグレードする場合にのみ使用します。この Playbook を OpenStack Platform の本リリースに使用しないでください。
10.9. config-download のタグ
Playbook では、オーバークラウドに適用されるタスクを管理するのにタグ付けされたタスクを使用します。ansible-playbook
CLI の引数 --tags
または --skip-tags
でタグを使用して、実行するタスクを管理します。有効なタグを以下に示します。
- facts
- ファクト収集操作。
- common_roles
- すべてのノードに共通な Ansible ロール。
- overcloud
- オーバークラウドデプロイメント用のすべてのプレイ。
- pre_deploy_steps
-
deploy_steps
の操作の前に実施されるデプロイメント。 - host_prep_steps
- ホスト準備のステップ。
- deploy_steps
- デプロイメントのステップ。
- post_deploy_steps
-
deploy_steps
の操作の後に実施されるデプロイメント。 - external
- すべての外部デプロイメントタスク。
- external_deploy_steps
- アンダークラウドでのみ実行される外部デプロイメントタスク。
10.10. config-download のデプロイメントステップ
オーバークラウドの設定には、deploy_steps_playbook.yaml
Playbook が使用されます。この Playbook により、オーバークラウドデプロイメントプランに基づき完全なオーバークラウドをデプロイするのに必要なすべてのソフトウェア設定が適用されます。
本項では、この Playbook で使用されるさまざまな Ansible プレイの概要について説明します。本項のプレイと同じ名前が、Playbook 内で使用され ansible-playbook
の出力にも表示されます。各プレイに設定される Ansible タグも、以下に示します。
- Gather facts from undercloud
アンダークラウドノードからのファクト収集。
タグ:
facts
- Gather facts from overcloud
オーバークラウドノードからのファクト収集。
タグ:
facts
- Load global variables
global_vars.yaml
からの変数をすべて読み込みます。タグ:
always
- Common roles for TripleO servers
共通の Ansible ロールをすべてのオーバークラウドノードに適用します。これには、ブートストラップパッケージをインストールする tripleo-bootstrap および ssh の既知のホストを設定する tripleo-ssh-known-hosts が含まれます。
タグ:
common_roles
- Overcloud deploy step tasks for step 0
deploy_steps_tasks テンプレートインターフェースからのタスクを適用します。
タグ:
overcloud
、deploy_steps
- Server deployments
ネットワーク設定や hieradata 等の設定に、サーバー固有の Heat デプロイメントを適用します。これには、NetworkDeployment、<Role>Deployment、<Role>AllNodesDeployment 等が含まれます。
タグ:
overcloud
、pre_deploy_steps
- Host prep steps
host_prep_steps テンプレートインターフェースからのタスクを適用します。
タグ:
overcloud
、host_prep_steps
- External deployment step [1,2,3,4,5]
external_deploy_steps_tasks テンプレートインターフェースからのタスクを適用します。これらのタスクは、アンダークラウドノードに対してのみ実行されます。
タグ:
external
、external_deploy_steps
- Overcloud deploy step tasks for [1,2,3,4,5]
deploy_steps_tasks テンプレートインターフェースからのタスクを適用します。
タグ:
overcloud
、deploy_steps
- Overcloud common deploy step tasks [1,2,3,4,5]
各ステップで実施される共通タスクを適用します。これには、puppet ホストの設定、docker-puppet.py、および paunch (コンテナー設定) が含まれます。
タグ:
overcloud
、deploy_steps
- Server Post Deployments
5 ステップのデプロイメントプロセス後に実施される設定に、サーバー固有の Heat デプロイメントを適用します。
タグ:
overcloud
、post_deploy_steps
- External deployment Post Deploy tasks
external_post_deploy_steps_tasks テンプレートインターフェースからのタスクを適用します。これらのタスクは、アンダークラウドノードに対してのみ実行されます。
タグ:
external
、external_deploy_steps
10.11. 次のステップ
これで、通常のオーバークラウドの操作を続行できるようになりました。