第6章 コンポーザブルサービス
Red Hat OpenStack Platform には、カスタムのロールとロール上のコンポーザブルサービスの組み合わせを定義する機能が実装されました (『オーバークラウドの高度なカスタマイズ』の「コンポーザブルサービスとカスタムロール」を参照)。統合の一環として、独自のカスタムサービスを定義して、選択したロールに追加することができます。本項では、コンポーザブルサービスアーキテクチャーを考察し、カスタムサービスをコンポーザブルサービスアーキテクチャーに統合する方法の例を記載します。
6.1. コンポーザブルサービスアーキテクチャーの考察 リンクのコピーリンクがクリップボードにコピーされました!
コア Heat テンプレートコレクションには、puppet/services サブディレクトリー内のコンポーザブルサービステンプレートのコレクションが含まれます。これらのサービスは、以下のコマンドで表示することができます。
ls /usr/share/openstack-tripleo-heat-templates/puppet/services
$ ls /usr/share/openstack-tripleo-heat-templates/puppet/services
各サービステンプレートには目的を特定する記述が含まれています。たとえば、keystone.yaml サービステンプレートには以下のような記述が含まれます。
description: > OpenStack Identity (`keystone`) service configured with Puppet
description: >
OpenStack Identity (`keystone`) service configured with Puppet
これらのサービステンプレートは、Red Hat OpenStack Platform デプロイメント固有のリソースとして登録されます。これは、overcloud-resource-registry-puppet.j2.yaml ファイルで定義されている一意な Heat リソース名前空間を使用して各リソースを呼び出すことができることを意味します。サービスはすべて、リソース種別に OS::TripleO::Services 名前空間を使用します。たとえば、keystone.yaml サービステンプレートは OS::TripleO::Services::Keystone リソース種別に登録されます。
grep "OS::TripleO::Services::Keystone" /usr/share/openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.j2.yaml OS::TripleO::Services::Keystone: puppet/services/keystone.yaml
grep "OS::TripleO::Services::Keystone" /usr/share/openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.j2.yaml
OS::TripleO::Services::Keystone: puppet/services/keystone.yaml
overcloud.j2.yaml Heat テンプレートには、roles_data.yaml ファイル内の各カスタムロールのサービス一覧を定義するための Jinja2-based コードのセクションが含まれています。
デフォルトのロールの場合は、これにより次のサービス一覧パラメーターが作成されます: ControllerServices、 ComputeServices、 BlockStorageServices、 ObjectStorageServices、 CephStorageServices
roles_data.yaml ファイル内の各カスタムロールのデフォルトのサービスを定義します。たとえば、デフォルトの Controller ロールには、以下の内容が含まれます。
これらのサービスは、次に ControllerServices パラメーターのデフォルト一覧として定義されます。
環境ファイルを使用してサービスパラメーターのデフォルト一覧を上書きすることもできます。たとえば、環境ファイルで ControllerServices を parameter_default として定義して、roles_data.yaml ファイルからのサービス一覧を上書きすることができます。
6.2. ユーザー定義のコンポーザブルサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
本項では、ユーザー定義のコンポーザブルサービスの作成方法を考察し、その日のメッセージ (motd: message of the day) サービスの実装に重点を置いて説明します。以下の例は、設定フックを使用するか、「3章オーバークラウドイメージ」の手順に従ってオーバークラウドイメージを編集して、そのイメージにカスタムの motd Puppet モジュールが読み込まれていることを前提とします。
独自のサービスを作成する場合には、そのサービスの Heat テンプレートで定義すべき特定の項目があります。
- parameters
以下のパラメーターは、サービステンプレートに追加する必要のある必須パラメーターです。
-
ServiceNetMap: サービスからネットワークへのマッピング。この値は、親の Heat テンプレートからの値で上書きされるので、空のハッシュ ({}) をdefault値として使用します。 -
DefaultPasswords: デフォルトパスワードの一覧。この値は、親の Heat テンプレートからの値で上書きされるので、空のハッシュ ({}) をdefault値として使用します。 -
EndpointMap: OpenStack サービスエンドポイントからプロトコルへのマッピングの一覧。この値は、親の Heat テンプレートからの値で上書きされるので、空のハッシュ ({}) をdefault値として使用します。
作成するサービスの必要に応じて、追加のパラメーターを定義してください。
-
- outputs
以下の出力パラメーターは、ホスト上でサービスの設定を定義します。
-
config_settings: 作成するサービス用のカスタム hieradata 設定 -
service_config_settings: 別のサービス用のカスタム hieradata 設定。たとえば、作成するサービスには、OpenStack Identity (keystone) に登録済みのエンドポイントが必要な場合があります。この設定により、1 つのサービスから別のサービスにパラメーターが提供され、サービスが異なるロール上にある場合でも、複数のサービスにまたがった設定を指定することができます。 -
global_config_settings: 全ロールに配布されるカスタムの hieradata 設定 step_config: サービスを設定するための Puppet スニペット。このスニペットは、サービス設定プロセスの各ステップで作成/実行される、統合されたマニフェストに追加されます。ステップは以下のとおりです。- ステップ 1: ロードバランサーの設定
- ステップ 2: 高可用性および一般のコアサービス (データベース、RabbitMQ、NTP) の設定
- ステップ 3: Openstack Platform サービスの初期設定 (ストレージ、リングの構築)
- ステップ 4: 一般的な OpenStack Platform サービスの設定
- ステップ 5: サービスのアクティブ化 (Pacemaker) および OpenStack Identity (keystone) のロールとユーザーの作成
参照される Puppet マニフェストでは、
stephieradata を使用して (hiera('step')を使用)、デプロイメントプロセスの特定のステップに特定のアクションを定義することができます。-
以下は、motd サービス用の Heat テンプレート (service.yaml) の一例です。
- 1
- このテンプレートには、その日のメッセージの定義に使用する
MotdMessageパラメーターが含まれています。このパラメーターにはデフォルトのメッセージが含まれていますが、カスタムの環境ファイルで同じパラメーターを使用して上書きすることができます。その方法については、後半で説明します。 - 2
outputsセクションは、config_settings内の一部のサービスの hieradata を定義します。motd::contenthieradata には、MotdMessageパラメーターからのコンテンツが保管されます。motdPuppet クラスは、最終的にこの hieradata を読み取り、ユーザー定義のメッセージを/etc/motdファイルに渡します。- 3
outputsセクションのstep_configには、Puppet マニフェストのスニペットが記載されています。このスニペットは、設定がステップ 2 に達したかどうかをチェックし、達している場合には、motdPuppet クラスを実行します。
6.3. ユーザー定義のコンポーザブルサービスの追加 リンクのコピーリンクがクリップボードにコピーされました!
この例では、オーバークラウドのコントローラーノードでのみカスタムの motd サービスを設定することを目的としています。そのためには、カスタムの環境ファイルとカスタムのロールデータファイルをデプロイメントに追加する必要があります。
まず最初に、OS::TripleO::Services 名前空間内の登録済み Heat リソースとして新規サービスを 環境ファイル (env-motd.yaml) に追加します。この例では、motd サービスのリソース名は OS::TripleO::Services::Motd です。
このカスタム環境ファイルには、 デフォルトの MotdMessage を上書きする新しいメッセージも含まれている点に注意してください。
デプロイメントに motd サービスが追加されましたが、この新規サービスを必要とする各ロールの roles_data.yaml ファイルの ServicesDefault リストを更新する必要があります。以下の例では、コントローラーノードのみでこのサービスを設定します。
デフォルトの roles_data.yaml ファイルのコピーを作成します。
cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml ~/custom_roles_data.yaml
$ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml ~/custom_roles_data.yaml
このファイルを編集して、Controller ロールにスクロールし、ServicesDefault リストにサービスを追加します。
オーバークラウドの作成時には、編集した環境ファイルと custom_roles_data.yaml ファイルを他の環境ファイルおよびデプロイメントオプションとともに追加します。
openstack overcloud deploy --templates -e /home/stack/templates/env-motd.yaml -r ~/custom_roles_data.yaml [OTHER OPTIONS]
$ openstack overcloud deploy --templates -e /home/stack/templates/env-motd.yaml -r ~/custom_roles_data.yaml [OTHER OPTIONS]
このコマンドにより、デプロイメントにカスタムの motd サービスが追加され、コントローラーノードのみでサービスが設定されます。