このドキュメントでは、Compute Engine 用の IBM Symphony プロバイダをインストールして構成する方法について説明します。仮想マシン(VM)インスタンス イベントをモニタリングするように Pub/Sub を設定し、プロバイダ プラグインをビルドしてインストールし、Symphony ホスト ファクトリ環境内でプロバイダ インスタンスを構成する方法について説明します。
Google Cloud向け Symphony コネクタの詳細については、IBM Spectrum Symphony と Google Cloudを統合するをご覧ください。
始める前に
Compute Engine 用の Symphony プロバイダをインストールするには、次のリソースが必要です。
- ホスト ファクトリー サービスが有効になっている IBM Spectrum Symphony クラスタが実行されていること。IBM Spectrum Symphony プライマリ ホストのホスト名がある。
- 必要なロールを持つ専用のサービス アカウント。このサービス アカウントの作成方法について詳しくは、サービス アカウントを作成するをご覧ください。
Symphony プライマリ ホストと Compute Engine 間の通信を許可するように構成したファイアウォール ルール。次に例を示します。
gcloud compute firewall-rules create allow-symphony-primary-to-compute \ --project=PROJECT_ID \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --allow=all \ --source-tags=NETWORK_TAGS_MASTER \ --target-tags=NETWORK_TAGS gcloud compute firewall-rules create allow-symphony-compute-to-primary \ --project=PROJECT_ID \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --allow=all \ --source-tags=NETWORK_TAGS \ --target-tags=NETWORK_TAGS_MASTER次のように置き換えます。
PROJECT_ID: 実際の Google Cloudプロジェクトの ID。NETWORK_NAME: Symphony リソースがデプロイされている VPC ネットワークの名前。NETWORK_TAGS_MASTER: Symphony プライマリ ホスト VM に適用されるネットワーク タグ。NETWORK_TAGS: Symphony コンピューティング ノード VM に適用されるネットワーク タグ。
詳細については、VPC ファイアウォール ルールを作成するをご覧ください。
必要なロール
サービス アカウントを使用するインスタンスの作成と管理に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Compute Engine 環境を準備する
Symphony ホスト ファクトリーで VM を作成して管理できるようにするには、いくつかの Google Cloud リソースを構成する必要があります。
インスタンス テンプレート: ホスト ファクトリーが作成する Symphony コンピューティング VM の構成を定義するブループリント。
マネージド インスタンス グループ(MIG): インスタンス テンプレートを使用して作成された同一の VM のグループ。ホスト ファクトリーは、ワークロードの需要に基づいて VM を追加または削除することで、このグループをスケールアップまたはスケールダウンします。
Pub/Sub トピックとサブスクリプション: プリエンプションや削除などの VM ライフサイクル イベントを Symphony プロバイダに通知するメッセージング サービス。このサービスにより、プロバイダはクラスタの正確な状態を維持できます。
インスタンス テンプレートの作成
gcloud compute instance-templates create コマンドを使用して、Symphony コンピューティング ホストのインスタンス テンプレートを作成します。このテンプレートは、作成する VM のプロパティを定義します。これらの VM には Symphony がインストールされている必要があります。Symphony がプリインストールされたイメージを使用するか、VM の作成後に起動スクリプトを使用して Symphony をインストールできます。コンピューティング ホスト VM に Symphony をインストールする方法については、IBM ドキュメントの Linux コンピューティング ホストへのインストールをご覧ください。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--machine-type=MACHINE_TYPE \
--network-interface=nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=SUBNET_NAME,no-address \
--instance-template-region=REGION \
--service-account=SERVICE_ACCOUNT_EMAIL \
--scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/trace.append \
--tags=NETWORK_TAGS \
--create-disk=auto-delete=yes,boot=yes,device-name=INSTANCE_TEMPLATE_NAME,image-family=rocky-linux-9,image-project=rocky-linux-cloud,mode=rw,size=20,type=pd-balanced \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring
次のように置き換えます。
INSTANCE_TEMPLATE_NAME: 新しいインスタンス テンプレートの名前。MACHINE_TYPE: コンピューティング インスタンスのマシンタイプ。詳細については、カスタム マシンタイプの VM を作成するをご覧ください。SUBNET_NAME: インスタンスのサブネットの名前。詳細については、インスタンスのネットワーク構成を表示するをご覧ください。SERVICE_ACCOUNT_EMAIL: 始める前にセクションで設定したサービス アカウントのメールアドレス。このサービス アカウントに、必要なロールで指定されたロールがあることを確認します。REGION: リソースを作成する Google Cloud リージョン。NETWORK_TAGS: インスタンスに適用するネットワーク タグ。ファイアウォール ルールで使用できます(例:symphony-compute)。
マネージド インスタンス グループを作成する
前の手順のインスタンス テンプレートを使用して、マネージド インスタンス グループ(MIG)を作成します。ホスト ファクトリー プロバイダは、ワークロードの需要に基づいてインスタンスを追加または削除することで、このグループをスケーリングします。
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
--project=PROJECT_ID \
--base-instance-name=INSTANCE_GROUP_NAME \
--template=projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
--size=0 \
--zone=ZONE
--default-action-on-vm-failure=repair \
--no-force-update-on-repair \
--standby-policy-mode=manual \
--list-managed-instances-results=pageless
次のように置き換えます。
INSTANCE_GROUP_NAME: マネージド インスタンス グループに選択した名前。PROJECT_ID: 実際の Google Cloudプロジェクト ID。詳細については、プロジェクト名、番号、ID を確認するをご覧ください。INSTANCE_TEMPLATE_NAME: 前の手順で作成したインスタンス テンプレートの名前。REGION: リソースが配置されているリージョン(us-eastなど)。ZONE: 選択したリージョン内のゾーン(aなど)。
MIG の作成の詳細については、シングルゾーンに MIG を作成するをご覧ください。
Pub/Sub を設定する
Symphony プロバイダが VM ライフサイクル イベントに関する通知を受け取れるように、Pub/Sub トピックとサブスクリプションを構成します。
Symphony プライマリ ホストで、次の環境変数を設定します。
export GCP_PROJECT=PROJECT_ID export PUBSUB_TOPIC=PUBSUB_TOPIC次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。PUBSUB_TOPIC:Google Cloud トピックの名前(hf-gce-vm-eventsなど)。
Pub/Sub トピックを作成します。
gcloud pubsub topics create $PUBSUB_TOPICgcloud logging sinks create コマンドを使用して、監査ログを Pub/Sub にエクスポートするロギング シンクを作成します。
gcloud logging sinks create ${PUBSUB_TOPIC}-sink \ pubsub.googleapis.com/projects/${GCP_PROJECT}/topics/${PUBSUB_TOPIC} \ --log-filter=" logName=\"projects/${GCP_PROJECT}/logs/cloudaudit.googleapis.com%2Factivity\" resource.type=(\"gce_instance_group_manager\" OR \"gce_instance\") protoPayload.methodName=( \"v1.compute.instanceGroupManagers.createInstances\" OR \"v1.compute.instanceGroupManagers.deleteInstances\" OR \"v1.compute.instances.insert\" OR \"v1.compute.instances.delete\" ) " \ --description="Exports MIG VM create/delete audit logs to Pub/Sub"このコマンドの出力には、次のステップで使用するサービス アカウントが含まれます。
前の手順のサービス アカウントに Pub/Sub パブリッシャー(
roles/pubsub.publisher)ロールを付与します。gcloud pubsub topics add-iam-policy-binding $PUBSUB_TOPIC \ --member="serviceAccount:LOGGING_SINK_SERVICE_ACCOUNT" \ --role="roles/pubsub.publisher"LOGGING_SINK_SERVICE_ACCOUNTは、ロギング シンクの作成出力に表示されたサービス アカウントの名前に置き換えます。ログを受信するサブスクリプションを作成します。
gcloud pubsub subscriptions create ${PUBSUB_TOPIC}-sub \ --topic=${PUBSUB_TOPIC}サービス アカウントにサブスクリプションを登録するための正しい権限があることを確認します。
gcloud pubsub subscriptions add-iam-policy-binding ${PUBSUB_TOPIC}-sub \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/pubsub.subscriber"SERVICE_ACCOUNT_EMAILは、インスタンス グループを管理するサービス アカウントのメールアドレスに置き換えます。これは、始める前にで設定したサービス アカウントと同じです。
Pub/Sub の設定が完了しました。Pub/Sub の構成方法の詳細については、Google Cloud CLI を使用して Pub/Sub でメッセージをパブリッシュして受信するをご覧ください。
ホスト ファクトリ環境変数を読み込む
ホスト ファクトリー サービスを構成または管理する前に、Symphony 環境変数をシェル セッションに読み込む必要があります。Symphony プライマリ ホスト VM で、次のコマンドを実行します。
source INSTALL_FOLDER/profile.platform
INSTALL_FOLDER は、インストール フォルダのパスに置き換えます。Symphony のデフォルトのインストール フォルダのパスは /opt/ibm/spectrumcomputing です。Symphony を別の場所にインストールした場合は、環境の正しいパスを使用します。
このコマンドは profile.platform スクリプトを実行します。このスクリプトは、$EGO_TOP や $HF_TOP などの重要な環境変数をエクスポートし、Symphony コマンドライン ツールをシェルの PATH に追加します。環境が正しく構成されていることを確認するには、新しいターミナル セッションごとにこのコマンドを実行する必要があります。
プロバイダ プラグインをインストールする
Compute Engine プロバイダを Symphony ホスト ファクトリー サービスと統合するには、RPM パッケージから事前構築済みのプロバイダ プラグインをインストールするか、ソースコードからプロバイダをビルドします。
事前ビルド済みのプロバイダ プラグインをインストールする
RPM パッケージを使用してプロバイダ プラグインをインストールするには、Symphony プライマリ ホストで次の操作を行います。
Google Cloud Symphony コネクタの
yumリポジトリを追加します。sudo tee /etc/yum.repos.d/google-cloud-symphony-connector.repo << EOM [google-cloud-symphony-connector] name=Google Cloud Symphony Connector baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-symphony-connector-x86-64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOMCompute Engine のプロバイダ パッケージをインストールします。
sudo yum install -y hf-gcpgce-provider.x86_64
RPM パッケージは、プロバイダの実行可能ファイルとスクリプトを Symphony ホスト ファクトリー サービスの正しいディレクトリにインストールします。インストール後、ディレクトリ構造は次のようになります。
├── bin
│ └── hf-gce
└── scripts
├── getAvailableTemplates.sh
├── getRequestStatus.sh
├── getReturnRequests.sh
├── requestMachines.sh
└── requestReturnMachines.sh
ソースコードからプロバイダをビルドする
プロバイダ プラグイン ディレクトリの bin ディレクトリに CLI 実行可能ファイルをビルドしてインストールする手順は次のとおりです。
GitHub から
symphony-gcp-connectorリポジトリのクローンを作成します。git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.gitプロジェクトの
hf-providerディレクトリに移動します。cd PROJECT_ROOT/hf-providerPROJECT_ROOTは、hf-provider ディレクトリを含む最上位ディレクトリのパス(/home/user/symphony-gcp-connectorなど)に置き換えます。uvがインストールされていない場合は、インストールします。pip install uvuvを使用して Python 仮想環境を作成します。uv venv仮想環境をアクティブにします。
source .venv/bin/activate必要なプロジェクトの依存関係をインストールします。
uv pip install .Python アプリケーションをスタンドアロンの実行可能ファイルにバンドルする PyInstaller をインストールします。
uv pip install pyinstallerCompute Engine クラスタの
hf-gceCLI を作成します。uv run pyinstaller hf-gce.spec --cleanインストールを確認するには、実行可能ファイルに対して
--helpコマンドを実行します。必要な環境変数を設定しないと、エラーが表示されることがあります。dist/hf-gce --help実行可能ファイルをプロバイダ プラグインの
binディレクトリにコピーします。mkdir -p ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin cp dist/hf-gce ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin/スクリプトをプロバイダ プラグインの
scriptsディレクトリにコピーします。cp -R ./resources/gce_cli/1.2/providerplugins/gcpgce/scripts ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/OS は、実行可能ファイルのビルドに使用される Python のバージョンをサポートしている必要があります。実行可能ファイルは Python 3.9.6 でテストされています。
インストール後、プロバイダ プラグインのディレクトリ構造は次の例のようになります。
├── bin
│ └── hf-gce
└── scripts
├── getAvailableTemplates.sh
├── getRequestStatus.sh
├── getReturnRequests.sh
├── requestMachines.sh
└── requestReturnMachines.sh
プロバイダ プラグインを有効にする
Compute Engine プロバイダ プラグインを有効にするには、ホスト ファクトリー構成に登録します。
$HF_TOP/conf/providerplugins/hostProviderPlugins.jsonファイルを開きます。$HF_TOP環境変数は、source コマンドを使用するときに環境で定義されます。値は、IBM Spectrum Symphony ホスト ファクトリー サービスの最上位のインストール ディレクトリのパスです。gcpgceプロバイダ プラグイン セクションを追加します。{ "name": "gcpgce", "enabled": 1, "scriptPath": "${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/scripts/" }$HF_TOPのデフォルト値でプロバイダ プラグインのバージョン 1.2 を使用している場合、結果のscriptPath値はINSTALL_FOLDER/hostfactory/1.2/providerplugins/gcpgce/scripts/になります。
プロバイダ インスタンスを設定する
環境の Compute Engine プロバイダを構成するには、プロバイダ インスタンスを作成します。
プロバイダ インスタンスのディレクトリを設定します。
ソースコードからプロバイダをビルドした場合は、ディレクトリと構成ファイルを手動で作成する必要があります。
mkdir -p $HF_TOP/conf/providers/gcpgceinst/RPM を使用してインストールした場合、このディレクトリはすでに存在し、構成ファイルの例が含まれています。構成を作成するには、サンプルファイルをコピーします。
cp $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_config.json.dist $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_config.json cp $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_templates.json.dist $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_templates.json
$HF_TOP/conf/providers/gcpgceinst/ディレクトリで、gcpgceinstprov_config.jsonファイルを作成または編集します。このファイルには、プロバイダのメイン構成が含まれています。プロバイダは、次の構成変数をサポートしています。この構成では、デフォルト値のない変数を指定する必要があります。変数名 説明 デフォルト値 HF_DBDIRこのプロバイダが状態データベースを保存する場所。 HostFactory 環境で $HF_DBDIRとして定義されます。HF_TEMPLATES_FILENAMEテンプレート ファイルの名前。 gcpgceinstprov_templates.jsonGCP_CREDENTIALS_FILEGoogle Cloud サービス アカウントの認証情報ファイルの場所。 この値を指定しない場合、アプリケーションはデフォルトの認証情報を使用します。 GCP_PROJECT_IDGoogle Cloud プロジェクトの ID。 なし GCP_INSTANCE_PREFIXこのプロバイダによって作成されたすべてのホストの先頭に付加する文字列。 sym-LOGFILEプロバイダがログを送信するログファイルの場所。 生成された名前のファイル。HostFactory 環境変数 HF_PROVIDER_LOGDIRで定義されたディレクトリにあります。LOG_LEVELPython ログレベル WARNINGPUBSUB_TIMEOUT最新の Pub/Sub イベントがこの期間(秒単位)よりも古い場合、Pub/Sub リスナーは切断されます。このタイムアウトは、Pub/Sub イベント リスナーが自動的に起動される場合にのみ適用されます。それ以外の場合、リスナーは無期限に実行され、管理者がライフサイクルを制御する必要があります。 600PUBSUB_TOPICPub/Sub トピックの名前。この変数は下位互換性のためのみに使用されます。 hf-gce-vm-eventsPUBSUB_SUBSCRIPTIONVM イベントをモニタリングする Pub/Sub サブスクリプションの名前。 hf-gce-vm-events-subPUBSUB_LOCKFILEPub/Sub イベント リスナーがアクティブかどうかを示すファイルの名前。 /tmp/sym_hf_gcp_pubsub.lockPUBSUB_AUTOLAUNCHtrueに設定すると、プロバイダは Pub/Sub イベント リスナーを自動的に起動しようとします。falseの場合は、選択したメソッドとコマンドhf-gce monitorEventsを使用して、Pub/Sub イベント リスナーを起動する必要があります。true次の例は、基本的な構成を示しています。
{ "GCP_PROJECT_ID": "PROJECT_ID", "LOG_LEVEL":"INFO", "PUBSUB_SUBSCRIPTION": "PUBSUB_SUBSCRIPTION", "PUBSUB_TIMEOUT": 100 }次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。PUBSUB_SUBSCRIPTION: VM イベントをモニタリングするために作成した Pub/Sub サブスクリプションの名前。詳細については、Pub/Sub を設定するをご覧ください。
同じディレクトリに、
gcpgceinstprov_templates.jsonファイルを作成または編集します。このファイルでは、プロバイダが作成できる VM のテンプレートを定義します。テンプレート内の属性は、サポートするインスタンス グループの構成と一致している必要があります。- RPM でインストールした場合は、前の手順で作成した
gcpgceinstprov_templates.jsonファイルを起点として使用します。 ソースからビルドした場合は、次のテンプレート例を使用します。
{ "templates": [ { "templateId": "template-gcp-01", "maxNumber": 10, "attributes": { "type": [ "String", "X86_64" ], "ncpus": [ "Numeric", "1" ], "nram": [ "Numeric", "1024" ] }, "gcp_zone": "GCP_ZONE", "gcp_instance_group": "INSTANCE_GROUP_NAME" } ] }次のように置き換えます。
GCP_ZONE: インスタンス グループが配置されている Google Cloud ゾーン(us-central1-aなど)。INSTANCE_GROUP_NAME: プロバイダが管理するインスタンス グループの名前(symphony-compute-igなど)。
- RPM でインストールした場合は、前の手順で作成した
これらのファイルを作成したら、プロバイダ インスタンス ディレクトリが次の例のようになっていることを確認します。
├── gcpgceinstprov_config.json └── gcpgceinstprov_templates.json
プロバイダ インスタンスを有効にする
プロバイダ インスタンスを有効にするには、ホスト ファクトリ構成ファイルで有効にします。
$HF_TOP/conf/providers/hostProviders.jsonファイルを開きます。gcpgceinstプロバイダ インスタンス セクションを追加します。{ "name": "gcpgceinst", "enabled": 1, "plugin": "gcpgce", "confPath": "${HF_CONFDIR}/providers/gcpgceinst/", "workPath": "${HF_WORKDIR}/providers/gcpgceinst/", "logPath": "${HF_LOGDIR}/" }source commandを使用してシェル セッションを構成すると、このスクリプトはこれらの変数を設定して、Symphony インストール内の正しいサブディレクトリを指すようにします。ホスト ファクトリー サービスは、これらの変数を使用して、実行時に完全なパスを構築します。
リクエスト元インスタンスを有効にする
特定の Symphony コンポーネントが Compute Engine プロバイダを使用してリソースをプロビジョニングできるようにするには、そのリクエスタに対して有効にします。
$HF_TOP/conf/requestors/hostRequestors.jsonファイルを開きます。適切なリクエスタ インスタンスで、
providersパラメータにgcpgceinstを追加します。"providers": ["gcpgceinst"],プロバイダの値は、プロバイダ インスタンスを有効にするで使用するプロバイダ名と一致している必要があります。
ホスト ファクトリー サービスを開始する
構成の変更を適用するには、ホスト ファクトリー サービスを開始します。Symphony プライマリ ホスト VM で、クラスタ管理者としてログインし、サービスを開始します。
sed -i -e "s|MANUAL|AUTOMATIC|g" $EGO_ESRVDIR/esc/conf/services/hostfactory.xml
egosh user logon -u "SYMPHONY_USERNAME -x "SYMPHONY_PASSWORD
egosh service start HostFactory
次のように置き換えます。
SYMPHONY_USERNAME: 認証用の Symphony ユーザー名。SYMPHONY_PASSWORD: Symphony ユーザーのパスワード。
コネクタをテストする
Compute Engine のプロバイダをテストするリソース リクエストを作成します。
そのためには、次のいずれかの方法を使用します。
Symphony GUI: Symphony GUI を使用してリソース リクエストを作成する手順については、IBM ドキュメントのクラウドホストのリクエストと返却を手動でスケジュールするをご覧ください。
REST API: REST API を使用してリソース リクエストを作成するには、次の操作を行います。
ホスト ファクトリ REST API のホストとポートを確認します。
egosh client view REST_HOST_FACTORY_URL出力は次のようになります。
CLIENT NAME: REST_HOST_FACTORY_URL DESCRIPTION: http://sym2.us-central1-c.c.symphonygcp.internal:9080/platform/rest/hostfactory/ TTL : 0 LOCATION : 40531@10.0.0.33 USER : Admin CHANNEL INFORMATION: CHANNEL STATE 9 CONNECTEDREST API を使用してリソース リクエストを作成するには、次のコマンドを使用します。
HOST=PRIMARY_HOST PORT=PORT TEMPLATE_NAME=INSTANCE_TEMPLATE_NAME PROVIDER_NAME=gcpgceinst curl -X POST -u "SYMPHONY_USER:SYMPHONY_PASSWORD" -H "Content-Type: application/json" -d "{ \"demand_hosts\": [ { \"prov_name\": \"$PROVIDER_NAME\", \"template_name\": \"$TEMPLATE_NAME\", \"ninstances\": 1 } ] }" \ http://$HOST:$PORT/platform/rest/hostfactory/requestor/admin/request次のように置き換えます。
PRIMARY_HOST: 前のコマンドの出力から取得したプライマリ ホストのホスト名。PORT: 前のコマンドの出力から取得したプライマリ ホストのポート番号(9080など)。SYMPHONY_TEMPLATE_ID:gcpgceinstprov_templates.jsonファイルで定義されているtemplateId(template-gcp-01など)。SYMPHONY_USER: 認証用の Symphony ユーザー。SYMPHONY_PASSWORD: Symphony ユーザーのパスワード。
成功すると、出力は次の例のようになります。
{"scheduled_request_id":["SD-641ef442-1f9e-40ae-ae16-90e152ed60d2"]}