動的リソース管理のために IBM Symphony を Google Kubernetes Engine(GKE)と統合するには、GKE 用の Symphony プロバイダをインストールして構成する必要があります。このプロバイダを使用すると、Symphony は GKE クラスタ内の Pod としてコンピューティング リソースをプロビジョニングして管理できます。これにより、Kubernetes オーケストレーションによる効率的なワークロード スケーリングが可能になります。
この統合を有効にするには、クラスタに Kubernetes オペレータをインストールし、Symphony のプライマリ ホストにプロバイダ プラグインをインストールして、GKE と通信するように Symphony のホスト ファクトリー サービスを構成します。
Google Cloud向け Symphony コネクタの詳細については、IBM Spectrum Symphony とGoogle Cloudを統合するをご覧ください。
始める前に
GKE 用 Symphony プロバイダをインストールするには、次のリソースが必要です。
- ホスト ファクトリー サービスが有効になっている IBM Spectrum Symphony クラスタが実行されていること。
- 実行中の GKE クラスタ。作成するには、GKE の概要をご覧ください。
- 適切な権限が付与されたサービス アカウント。詳細については、必要なロールをご覧ください。
kubectlコマンドライン ツールがインストールされ、GKE クラスタと通信するように構成されている。
必要なロール
オペレーターのインストールと Symphony Pod の管理に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Kubernetes リソースを管理する: Kubernetes Engine 管理者 (
roles/container.admin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Kubernetes オペレータをインストールする
GKE プロバイダをインストールする前に、関連する Kubernetes オペレータをインストールする必要があります。オペレーターは、GKE クラスタ内の Symphony コンピューティング Pod のライフサイクルを管理します。
オペレーター イメージをビルドする
オペレーターの Kubernetes マニフェストを生成してデプロイするには、まずオペレーター コンテナ イメージをビルドする必要があります。マニフェストには、オペレーターが Symphony の管理に使用するカスタム リソース定義(CRD)が含まれています。イメージを取得するには、ソースからビルドします。
ソースからオペレーター イメージをビルドするには、次の操作を行います。
GitHub から
symphony-gcp-connectorリポジトリのクローンを作成します。git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.gitk8s-operatorディレクトリに移動します。cd symphony-gcp-connector/k8s-operatorイメージ名、レジストリ、タグの環境変数を設定します。
export IMAGE="gcp-symphony-operator" export REGISTRY="IMAGE_REPO" export TAG="TAG"次のように置き換えます。
IMAGE_REPO: オペレーター イメージが保存されているイメージ リポジトリ。たとえば、Artifact Registry を使用してオペレーター イメージを保存できます。詳細については、Docker リポジトリを作成するをご覧ください。TAG: オペレータ イメージのタグ(例:0.0.1)。
オペレーター イメージをビルドして push します。
bash -c 'docker buildx build --platform linux/amd64 -t $IMAGE:$TAG -t $IMAGE:latest -t $REGISTRY/$IMAGE:$TAG -t $REGISTRY/$IMAGE:latest .' bash -c 'docker push $REGISTRY/$IMAGE:$TAG && docker push $REGISTRY/$IMAGE:latest'
オペレータ マニフェストを構成する
オペレーター イメージを取得したら、Kubernetes マニフェストを生成して構成する必要があります。
マニフェストを生成するには、オペレーター イメージを指定して
export-manifestsコマンドを使用します。docker run --rm gcp-symphony-operator:latest export-manifests > manifests.yaml任意のテキスト エディタで
manifests.yamlファイルを開きます。spec.template.spec.containersセクションで、imageフィールドを見つけて、その値をレジストリに push したイメージのフルパスに更新します。... containers: - image: IMAGE_REPO/gcp-symphony-operator:TAG name: manager ...次のように置き換えます。
IMAGE_REPO: オペレーター イメージを push したイメージ リポジトリのパス。TAG: オペレーター イメージのビルド時に割り当てたタグ。
省略可:
imagePullPolicy値を変更して、クラスタ管理のプラクティスに合わせることもできます。
Operator マニフェストを適用する
マニフェストを構成したら、Kubernetes クラスタに適用します。マニフェストは、kubectl または Cluster Toolkit を使用して適用できます。
kubectl:
kubectlを使用してマニフェストを適用するには、次のコマンドを実行します。kubectl apply -f manifests.yamlCluster Toolkit: GKE インフラストラクチャが Cluster Toolkit によって管理されている場合は、GKE ブループリントに
modules/management/kubectl-applyソースを追加してマニフェストを適用します。次の構成例では、manifests.yamlファイルが GKE ブループリントと同じディレクトリにあることを前提としています。- id: symphony_operator_install source: modules/management/kubectl-apply use: [gke_cluster] settings: apply_manifests: - source: $(ghpc_stage("manifests.yaml"))詳細については、Cluster Toolkit の概要をご覧ください。
ホスト ファクトリ環境変数を読み込む
ホスト ファクトリー サービスを構成または管理する前に、Symphony 環境変数をシェル セッションに読み込む必要があります。Symphony プライマリ ホスト VM で、次のコマンドを実行します。
source INSTALL_FOLDER/profile.platform
INSTALL_FOLDER は、インストール フォルダのパスに置き換えます。Symphony のデフォルトのインストール フォルダのパスは /opt/ibm/spectrumcomputing です。ただし、Symphony を別の場所にインストールした場合は、環境の正しいパスを使用する必要があります。
このコマンドは profile.platform スクリプトを実行します。このスクリプトは、$EGO_TOP や $HF_TOP などの重要な環境変数をエクスポートし、Symphony コマンドライン ツールをシェルの PATH に追加します。環境が正しく構成されていることを確認するには、新しいターミナル セッションごとにこのコマンドを実行する必要があります。
プロバイダ プラグインをインストールする
GKE プロバイダを Symphony のホスト ファクトリーと統合するには、RPM パッケージから事前構築済みプロバイダ プラグインをインストールするか、ソースコードからプロバイダをビルドします。
事前ビルド済みのプロバイダ プラグインをインストールする
RPM パッケージを使用してプロバイダ プラグインをインストールするには、Symphony プライマリ ホスト VM で次の操作を行います。
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 EOMGKE 用のプロバイダ パッケージをインストールします。
sudo yum install -y hf-gcpgke-provider.x86_64
RPM インストールでは、プロバイダの実行可能ファイルとスクリプトが Symphony ホスト ファクトリー サービスの正しいディレクトリに自動的に配置されます。インストール後、プロバイダ プラグインのディレクトリ構造は、パス $HF_TOP/$HF_VERSION/providerplugins/gcpgke で次のように表示されます。
├── bin
│ ├── hf-gke
│ └── README.md
└── 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.githf-providerディレクトリに移動します。cd PROJECT_ROOT/hf-providerPROJECT_ROOTは、hf-provider ディレクトリを含む最上位ディレクトリのパス(/home/user/symphony-gcp-connectorなど)に置き換えます。uvがインストールされていない場合は、インストールします。pip install uvuvPython パッケージ マネージャーを使用して、Python 仮想環境を作成します。uv venv仮想環境をアクティブにします。
source .venv/bin/activate必要なプロジェクトの依存関係をインストールします。
uv pip install .Python アプリケーションをスタンドアロンの実行可能ファイルにバンドルする PyInstaller をインストールします。
uv pip install pyinstallerGoogle Kubernetes Engine クラスタの
hf-gkeCLI を作成します。uv run pyinstaller hf-gke.spec --cleanインストールを確認するには、実行可能ファイルに対して
--helpコマンドを実行します。必要な環境変数を設定しないと、エラーが表示されることがあります。dist/hf-gke --helpプロバイダを手動でビルドする場合は、バイナリとスクリプトのプロバイダ プラグイン ディレクトリを作成します。
mkdir -p $HF_TOP/$HF_VERSION/providerplugins/gcpgke/bin mkdir -p $HF_TOP/$HF_VERSION/providerplugins/gcpgke/scriptshf-gkeバイナリとスクリプトをプロバイダ プラグイン ディレクトリにコピーします。hf-gkeバイナリは PyInstaller が作成したdist/ディレクトリにあり、スクリプトはscripts/gcpgke/ディレクトリにあります。cp dist/hf-gke $HF_TOP/$HF_VERSION/providerplugins/gcpgke/bin/ cp scripts/gcpgke/* $HF_TOP/$HF_VERSION/providerplugins/gcpgke/scripts/インストール後、プロバイダ プラグインのディレクトリ構造は、パス
$HF_TOP/$HF_VERSION/providerplugins/gcpgkeで次のように表示されます。
├── bin
│ └── hf-gke
└── scripts
├── getAvailableTemplates.sh
├── getRequestStatus.sh
├── getReturnRequests.sh
├── requestMachines.sh
└── requestReturnMachines.sh
プロバイダ プラグインを有効にする
GKE プロバイダ プラグインを有効にするには、ホスト ファクトリ構成に登録する必要があります。
${HF_TOP}/conf/providerplugins/hostProviderPlugins.jsonファイルを開きます。source コマンドは、環境内の
$HF_TOP環境変数を定義します。値は、IBM Spectrum Symphony ホスト ファクトリー サービスの最上位のインストール ディレクトリのパスです。gcpgkeプロバイダ プラグイン セクションを追加します。{ "name": "gcpgke", "enabled": 1, "scriptPath": "${HF_TOP}/${HF_VERSION}/providerplugins/gcpgke/scripts/" }
プロバイダ インスタンスを設定する
環境の GKE プロバイダを構成するには、プロバイダ インスタンスを作成します。
コネクタを手動でビルドする場合は、
$HF_TOP/conf/providers/gcpgkeinst/などのプロバイダ インスタンスのディレクトリを作成します。profile.platform scriptを取得している場合、$HF_TOP環境変数は環境内で定義されています。値は、IBM Spectrum Symphony ホスト ファクトリー サービスの最上位のインストール ディレクトリのパスです。プロバイダ インスタンス ディレクトリ(
$HF_TOP/conf/providers/gcpgkeinst/)で、gcpgkeinstprov_config.jsonファイルを作成または構成します。このファイルには、プロバイダのメイン構成が含まれています。RPM パッケージを使用してプロバイダ プラグインをインストールした場合は、構成ファイルの例をコピーしてカスタマイズできます。
cp $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_config.json.dist $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_config.jsonソースからプロバイダをビルドした場合は、
gcpgkeinstprov_config.jsonファイルを作成します。
このファイルでは通常、関連付けられた GKE クラスタの標準 kubectl 構成ファイルのパスを定義する
GKE_KUBECONFIG変数のみを構成する必要があります。パスを指定しない場合、デフォルトはプロバイダ インスタンス ディレクトリのkubeconfigになります。このパスが、このプロバイダ インスタンスが使用する Kubernetes クラスタの有効な kubectl 構成ファイルを指していることを確認する必要があります。次に、構成の例を示します。
{ "GKE_KUBECONFIG": "kubeconfig" }次の構成変数がサポートされています。
変数名 説明 デフォルト値 GKE_KUBECONFIGkubectl コマンドで使用される構成ファイルのパス。 なし GKE_CRD_NAMESPACE*すべてのリソースが作成される Kubernetes Namespace を定義します。 gcp-symphonyGKE_CRD_GROUP*GKE ホスト ファクトリー オペレーターのカスタム リソースの識別に使用されるリソース グループ。 accenture.comGKE_CRD_VERSION*GKE ホスト ファクトリー オペレーターのカスタム リソースの識別に使用されるバージョン。 v1GKE_CRD_KIND*コンピューティング リソース(Pod)のリクエストを定義するカスタム リソース定義に付けられた名前。 GCP Symphony ResourceGKE_CRD_SINGULAR*Google Cloud Symphony ResourceCR のインスタンスを参照するときに API 呼び出しで使用されます。gcp-symphony-resourceGKE_CRD_RETURN_REQUEST_KIND*コンピューティング リソース(Pod)を返すリクエストを定義するカスタム リソース定義に付けられた名前。 Machine Return RequestGKE_CRD_RETURN_REQUEST_SINGULAR*単一の MachineReturnRequestカスタム リソース インスタンスを参照するときに API 呼び出しで使用されます。machine-return-requestGKE_REQUEST_TIMEOUTGKE コントロール プレーンへのリクエストがレスポンスを待つ時間(秒単位)。 300LOG_LEVELGKE プロバイダがログファイルに書き込むログの詳細レベルを制御します。オプションは CRITICAL、WARNING、ERROR、INFO、DEBUGです。WARNING同じディレクトリに、
gcpgkeinstprov_templates.jsonファイルを作成または構成します。このファイルでは、プロバイダが作成できる Pod のテンプレートを定義します。RPM パッケージを使用してプロバイダ プラグインをインストールした場合は、サンプル テンプレート ファイルをコピーしてカスタマイズできます。
cp $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_templates.json.dist $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_templates.jsonソースからプロバイダをビルドした場合は、
gcpgkeinstprov_templates.jsonファイルを作成します。テンプレート属性は、Pod 仕様のリソースと一致している必要があります。テンプレートの例を次に示します。
{ "templates": [ { "templateId": "template-gcp-01", "maxNumber": 5000, "attributes": { "type": [ "String", "X86_64" ], "ncores": [ "Numeric", "1" ], "ncpus": [ "Numeric", "1" ], "nram": [ "Numeric", "2048" ] }, "podSpecYaml": "pod-specs/pod-spec.yaml" } ] }
同じディレクトリに、Kubernetes クラスタの有効な kubectl 構成ファイルである
kubeconfigファイルを作成します。プロバイダ インスタンス ディレクトリで、
pod-spec.yamlファイルを作成または編集します。このファイルは、GKE クラスタに作成される Symphony コンピューティング Pod の仕様を定義するテンプレートとして機能します。この仕様から作成された Pod はコンピューティング ノードとして機能し、Symphony インストールへのアクセスが必要です。このアクセスは、Symphony のインストールを含むコンテナ イメージを介して、またはインストールを含む共有ファイル システム マウントを介して提供できます。起動時に、Pod はこのアクセス権を使用して Symphony クラスタに参加します。
ファイルを作成する手順は、プロバイダのインストール方法によって異なります。
RPM パッケージからプロバイダをインストールした場合は、インストールに含まれていた
pod-spec.yaml.distファイルの例をコピーします。cp $HF_TOP/conf/providers/gcpgkeinst/pod-specs/pod-spec.yaml.dist $HF_TOP/conf/providers/gcpgkeinst/pod-specs/pod-spec.yamlプロバイダをソースからビルドした場合は、
pod-specsディレクトリとpod-spec.yamlファイルを手動で作成します。mkdir -p $HF_TOP/conf/providers/gcpgkeinst/pod-specs touch $HF_TOP/conf/providers/gcpgkeinst/pod-specs/pod-spec.yaml
これらのファイルを作成したら、プロバイダ インスタンス ディレクトリが次のように表示されることを確認します。
├── gcpgkeinstprov_config.json ├── gcpgkeinstprov_templates.json ├── kubeconfig └── pod-specs └── pod-spec.yaml
プロバイダ インスタンスを有効にする
プロバイダ インスタンスを有効にするには、ホスト ファクトリ構成ファイルで有効にします。
$HF_TOP/conf/providers/hostProviders.jsonファイルを開きます。gcpgkeinstプロバイダ インスタンス セクションを追加します。{ "name": "gcpgkeinst", "enabled": 1, "plugin": "gcpgke", "confPath": "${HF_CONFDIR}/providers/gcpgkeinst/", "workPath": "${HF_WORKDIR}/providers/gcpgkeinst/", "logPath": "${HF_LOGDIR}/" }この構成では、
${HF_CONFDIR}、${HF_WORKDIR}、${HF_LOGDIR}の変数を置き換える必要はありません。これらは、IBM Spectrum Symphony ホスト ファクトリー環境によって自動的に定義される標準の環境変数であるためです。source commandを実行してシェル セッションを構成すると、このスクリプトはこれらの変数を設定して、Symphony インストール内の正しいサブディレクトリを指すようにします。ホスト ファクトリー サービスは、これらの変数を使用して、実行時に完全なパスを構築します。
リクエスト元インスタンスを有効にする
特定のリクエスト元に対して GKE プロバイダを有効にすると、そのリクエスト元が GKE プロバイダを使用してリソースをプロビジョニングできるようになります。
$HF_TOP/conf/requestors/hostRequestors.jsonファイルを開きます。適切なリクエスタ インスタンスで、
providersパラメータにgcpgkeinstを追加します。"providers": ["gcpgkeinst"],プロバイダの値は、プロバイダ インスタンスを有効にするで使用するプロバイダ名と一致している必要があります。
ホスト ファクトリー サービスを開始する
構成の変更を適用するには、ホスト ファクトリー サービスを開始します。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 ユーザーのパスワード。
コネクタをテストする
GKE 用プロバイダをテストするリソース リクエストを作成します。
そのためには、次のいずれかの方法を使用します。
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=SYMPHONY_TEMPLATE_ID PROVIDER_NAME=gcpgkeinst 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:gcpgkeinstprov_templates.jsonファイルで定義されているtemplateId(template-gcp-01など)。SYMPHONY_USER: 認証用の Symphony ユーザー。SYMPHONY_PASSWORD: Symphony ユーザーのパスワード。
成功すると、出力は次の例のようになります。
{"scheduled_request_id":["SD-641ef442-1f9e-40ae-ae16-90e152ed60d2"]}