このドキュメントでは、Compute Engine 用の IBM Symphony プロバイダをインストールして構成する方法について説明します。仮想マシン(VM)インスタンス イベントをモニタリングするように Pub/Sub を設定し、プロバイダ プラグインをビルドしてインストールし、Symphony ホスト ファクトリー環境内でプロバイダ インスタンスを構成する方法について説明します。
向け Symphony コネクタの詳細については、IBM Spectrum Symphony と を統合する Google Cloudをご覧ください。 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 CloudNETWORK_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: トピックの名前(hf-gce-vm-eventsなど)。Google Cloud
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 プライマリ ホストで次の手順を行います。
Symphony Connectors の
yumリポジトリを追加します。 Google Cloudsudo 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/" }プロバイダ プラグインのバージョン 1.2 を使用していて、 のデフォルト値を使用している場合、結果の
scriptPath値はINSTALL_FOLDER/hostfactory/1.2/providerplugins/gcpgce/scripts/になります。$HF_TOP
プロバイダ インスタンスを設定する
環境用に 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_FILEサービス アカウントの認証情報ファイルの場所。 Google Cloud この値を指定しない場合、アプリケーションはデフォルトの認証情報を使用します。 GCP_PROJECT_ID実際の プロジェクトの ID。 Google Cloud なし 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の場合は、任意のメソッドを使用して Pub/Sub イベント リスナーを起動する必要があります。コマンドはhf-gce monitorEventsです。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: インスタンス グループが配置されているゾーン(us-central1-aなど)。 Google CloudINSTANCE_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"]}