Compute Engine Symphony プロバイダをインストールする

このドキュメントでは、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 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

次のように置き換えます。

マネージド インスタンス グループを作成する

前の手順のインスタンス テンプレートを使用して、マネージド インスタンス グループ(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

次のように置き換えます。

MIG の作成の詳細については、シングルゾーンに MIG を作成する をご覧ください

Pub/Sub を設定する

Symphony プロバイダが VM ライフサイクル イベントに関する通知を受信できるようにするには、Pub/Sub トピックとサブスクリプションを構成します。

  1. Symphony プライマリ ホストで、次の環境変数を設定します。

    export GCP_PROJECT=PROJECT_ID
    export PUBSUB_TOPIC=PUBSUB_TOPIC
    

    次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクトの ID。
    • PUBSUB_TOPIC: トピックの名前(hf-gce-vm-events など)。Google Cloud
  2. Pub/Sub トピックを作成します。

    gcloud pubsub topics create $PUBSUB_TOPIC
    
  3. gcloud 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"
    

    このコマンドの出力には、次のステップで使用するサービス アカウントが含まれます。

  4. 前のステップのサービス アカウントに 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 は、ロギング シンクの作成出力のサービス アカウント名に置き換えます。

  5. ログを受信するサブスクリプションを作成します。

    gcloud pubsub subscriptions create ${PUBSUB_TOPIC}-sub \
        --topic=${PUBSUB_TOPIC}
    
  6. サービス アカウントに、サブスクリプションを登録するための正しい権限が付与されていることを確認します。

    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 プライマリ ホストで次の手順を行います。

  1. Symphony Connectors の yum リポジトリを追加します。 Google Cloud

    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
    EOM
    
  2. Compute 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 実行可能ファイルをビルドしてインストールするには、次の手順を行います。

  1. GitHub から symphony-gcp-connector リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.git
    
  2. プロジェクトの hf-provider ディレクトリに移動します。

    cd PROJECT_ROOT/hf-provider
    

    PROJECT_ROOT は、hf-provider ディレクトリを含む最上位ディレクトリのパス(/home/user/symphony-gcp-connector など)に置き換えます。

  3. uv がインストールされていない場合は、インストールします。

    pip install uv
    
  4. uv を使用して Python 仮想環境を作成します。

    uv venv
    
  5. 仮想環境をアクティブにします。

    source .venv/bin/activate
    
  6. 必要なプロジェクトの依存関係をインストールします。

    uv pip install .
    
  7. Python アプリケーションをスタンドアロンの実行可能ファイルにバンドルする PyInstaller をインストールします。

    uv pip install pyinstaller
    
  8. Compute Engine クラスタ用の hf-gce CLI を作成します。

    uv run pyinstaller hf-gce.spec --clean
    
  9. インストールを確認するには、実行可能ファイルに対して --help コマンドを実行します。必要な環境変数を設定しないと、エラーが表示されることがあります。

    dist/hf-gce --help
    
  10. 実行可能ファイルをプロバイダ プラグインの bin ディレクトリにコピーします。

    mkdir -p ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin
    cp dist/hf-gce ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin/
    
  11. スクリプトをプロバイダ プラグインの 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 プロバイダ プラグインを有効にするには、ホスト ファクトリー構成に登録します。

  1. $HF_TOP/conf/providerplugins/hostProviderPlugins.json ファイルを開きます。

    $HF_TOP 環境変数は、 source コマンドを使用すると環境で定義されます。値は、IBM Spectrum Symphony ホスト ファクトリー サービスの最上位のインストール ディレクトリのパスです。

  2. 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 プロバイダを構成するには、プロバイダ インスタンスを作成します。

  1. プロバイダ インスタンスのディレクトリを設定します。

    • ソースコードからプロバイダをビルドした場合は、 ディレクトリと構成ファイルを手動で作成する必要があります。

      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
      
  2. $HF_TOP/conf/providers/gcpgceinst/ ディレクトリに gcpgceinstprov_config.json ファイルを作成または編集します。このファイルには、プロバイダのメイン構成が含まれています。プロバイダは次の構成変数をサポートしています。 デフォルト値がない変数は、この構成で指定する必要があります。

    変数名 説明 デフォルト値
    HF_DBDIR このプロバイダが状態データベースを保存する場所。 HostFactory 環境で $HF_DBDIR として定義されます。
    HF_TEMPLATES_FILENAME テンプレート ファイルの名前。 gcpgceinstprov_templates.json
    GCP_CREDENTIALS_FILE サービス アカウントの認証情報ファイルの場所。 Google Cloud この値を指定しない場合、アプリケーションはデフォルトの認証情報を使用します。
    GCP_PROJECT_ID 実際の プロジェクトの ID。 Google Cloud なし
    GCP_INSTANCE_PREFIX このプロバイダによって作成されたすべてのホストの先頭に付加する文字列。 sym-
    LOGFILE プロバイダがログを送信するログファイルの場所。 HostFactory 環境変数 HF_PROVIDER_LOGDIR で定義されたディレクトリにある、生成された名前のファイル。
    LOG_LEVEL Python ログレベル WARNING
    PUBSUB_TIMEOUT 最新の Pub/Sub イベントがこの期間(秒単位)より古い場合、Pub/Sub リスナーは切断されます。このタイムアウトは、Pub/Sub イベント リスナーが自動的に起動された場合にのみ適用されます。それ以外の場合、リスナーは無期限に実行され、管理者がライフサイクルを制御する必要があります。 600
    PUBSUB_TOPIC Pub/Sub トピックの名前。この変数は下位互換性のみを目的としています。 hf-gce-vm-events
    PUBSUB_SUBSCRIPTION VM イベントをモニタリングする Pub/Sub サブスクリプションの名前。 hf-gce-vm-events-sub
    PUBSUB_LOCKFILE Pub/Sub イベント リスナーがアクティブかどうかを示すファイルの名前。 /tmp/sym_hf_gcp_pubsub.lock
    PUBSUB_AUTOLAUNCH true に設定すると、プロバイダは 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 を設定するをご覧ください。
  3. 同じディレクトリに、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 Cloud
      • INSTANCE_GROUP_NAME: プロバイダが管理するインスタンス グループの名前(symphony-compute-ig など)。
  4. これらのファイルを作成したら、プロバイダ インスタンス ディレクトリが次の例のようになっていることを確認します。

    ├── gcpgceinstprov_config.json
    └── gcpgceinstprov_templates.json
    

プロバイダ インスタンスを有効にする

プロバイダ インスタンスを有効にするには、ホスト ファクトリー構成ファイルで有効にします。

  1. $HF_TOP/conf/providers/hostProviders.json ファイルを開きます。

  2. 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 プロバイダを使用してリソースをプロビジョニングできるようにするには、そのリクエスタに対して有効にします。

  1. $HF_TOP/conf/requestors/hostRequestors.json ファイルを開きます。

  2. 適切なリクエスタ インスタンスで、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 を使用してリソース リクエストを作成する手順は次のとおりです。

    1. ホスト ファクトリー 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                   CONNECTED
      
    2. REST 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 ファイルで定義された templateIdtemplate-gcp-01 など)。
      • SYMPHONY_USER: 認証用の Symphony ユーザー。
      • SYMPHONY_PASSWORD: Symphony ユーザーのパスワード。

      成功すると、出力は次のようになります。

      {"scheduled_request_id":["SD-641ef442-1f9e-40ae-ae16-90e152ed60d2"]}
      

次のステップ