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 ユーザーに、このディレクトリー内の全ファイルへのアクセス権限を付与することができます。この設定は、ディレクトリー内の特定操作を実施するのに役立ちます。

手順

  1. アンダークラウドの stack ユーザーにこれらのファイルへのアクセス権限を付与するには、setfacl コマンドを使用します。

    $ sudo setfacl -R -m u:stack:rwx /var/lib/mistral

    このコマンドを実行しても、mistral ユーザーのディレクトリーへのアクセス権限は維持されます。

10.4. config-download ログの確認

config-download プロセス中、Ansible によりアンダークラウド内の config-download の作業ディレクトリーにログファイルが作成されます。

手順

  1. less コマンドを使用して、config-download の作業ディレクトリー内のログを表示します。以下の例では、overcloud 作業ディレクトリーが使われています。

    $ less /var/lib/mistral/overcloud/ansible.log

10.5. 手動での config-download の実行

/var/lib/mistral/overcloud 作業ディレクトリーには、ansible-playbook と直接対話するために必要な Playbook とスクリプトが含まれています。以下の手順では、これらのファイルとの対話方法について説明します。

手順

  1. Ansible Playbook のディレクトリーに移動します。

    $ cd /var/lib/mistral/overcloud/
  2. 作業ディレクトリーに移動したら、ansible-playbook-command.sh を実行して、デプロイメントを再現します。

    $ ./ansible-playbook-command.sh
  3. このスクリプトには、追加の Ansible 引数を渡すことができます。それらの引数は、ansible-playbook コマンドに未変更で渡されます。これにより、チェックモード (--check)、ホストの限定 (--limit)、変数のオーバーライド (-e) などの Ansible の機能を更に活用することが可能となります。以下に例を示します。

    $ ./ansible-playbook-command.sh --limit Controller
  4. 作業ディレクトリーには、オーバークラウドの設定を実行する deploy_steps_playbook.yaml という名前の Playbook が含まれています。この Playbook を表示するには、以下のコマンドを実行します。

    $ less deploy_steps_playbook.yaml

    Playbook は、作業ディレクトリーに含まれているさまざまなタスクファイルを使用します。タスクファイルには、OpenStack Platform の全ロールに共通するものと、特定の OpenStack Platform ロールおよびサーバー固有のものがあります。

  5. 作業ディレクトリーには、オーバークラウドの roles_data ファイルで定義されている各ロールに対応するサブディレクトリーも含まれます。以下に例を示します。

    $ ls Controller/

    各 OpenStack Platform ロールにディレクトリーには、そのロール種別の個々のサーバー用のサブディレクトリーも含まれます。これらのディレクトリーには、コンポーザブルロールのホスト名の形式を使用します。以下に例を示します。

    $ ls Controller/overcloud-controller-0
  6. 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 の作業ディレクトリー内の異なるコミットを比較する方法を説明します。

手順

  1. オーバークラウドに関する config-download の作業ディレクトリーに移動します。この例の作業ディレクトリーは、overcloud という名前のオーバークラウド用です。

    $ cd /var/lib/mistral/overcloud
  2. 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
    ...

    デフォルトでは、最新のコミットから順に表示されます。

  3. 2 つのコミットのハッシュに対して git diff コマンドを実行し、デプロイメント間の違いをすべて表示します。

    $ git diff a7e9063 dfb9d12

10.7. 手動での config-download ファイルの作成

特定の状況では、標準のワークフローとは別に専用の config-download ファイルを生成する場合があります。たとえば、個別に設定を適用できるように、openstack overcloud deploy コマンドに --stack-only オプションを設定して、オーバークラウド Heat スタックを生成することがあります。以下の手順では、専用の config-download ファイルを手動で作成する方法について説明します。

手順

  1. config-download ファイルを生成します。

    $ openstack overcloud config download \
      --name overcloud \
      --config-dir ~/config-download
    • --name は、Ansible ファイルのエクスポートに使用するオーバークラウドです。
    • --config-dir は、config-download ファイルを保存する場所です。
  2. config-download ファイルが含まれるディレクトリーに移動します。

    $ cd ~/config-download
  3. 静的なインベントリーファイルを生成します。

    $ 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 テンプレートインターフェースからのタスクを適用します。

タグ: overclouddeploy_steps

Server deployments

ネットワーク設定や hieradata 等の設定に、サーバー固有の Heat デプロイメントを適用します。これには、NetworkDeployment、<Role>Deployment、<Role>AllNodesDeployment 等が含まれます。

タグ: overcloudpre_deploy_steps

Host prep steps

host_prep_steps テンプレートインターフェースからのタスクを適用します。

タグ: overcloudhost_prep_steps

External deployment step [1,2,3,4,5]

external_deploy_steps_tasks テンプレートインターフェースからのタスクを適用します。これらのタスクは、アンダークラウドノードに対してのみ実行されます。

タグ: externalexternal_deploy_steps

Overcloud deploy step tasks for [1,2,3,4,5]

deploy_steps_tasks テンプレートインターフェースからのタスクを適用します。

タグ: overclouddeploy_steps

Overcloud common deploy step tasks [1,2,3,4,5]

各ステップで実施される共通タスクを適用します。これには、puppet ホストの設定、docker-puppet.py、および paunch (コンテナー設定) が含まれます。

タグ: overclouddeploy_steps

Server Post Deployments

5 ステップのデプロイメントプロセス後に実施される設定に、サーバー固有の Heat デプロイメントを適用します。

タグ: overcloudpost_deploy_steps

External deployment Post Deploy tasks

external_post_deploy_steps_tasks テンプレートインターフェースからのタスクを適用します。これらのタスクは、アンダークラウドノードに対してのみ実行されます。

タグ: externalexternal_deploy_steps

10.11. 次のステップ

これで、通常のオーバークラウドの操作を続行できるようになりました。