IBM Symphony を Google Kubernetes Engine(GKE)と統合してリソースを動的に管理するには、GKE 用の Symphony プロバイダをインストールして構成する必要があります。このプロバイダを使用すると、Symphony はコンピューティング リソースを GKE クラスタ内の Pod としてプロビジョニングして管理できます。これにより、Kubernetes オーケストレーションによる効率的なワークロード スケーリングが可能になります。
この統合を有効にするには、クラスタに Kubernetes オペレータをインストールし、Symphony プライマリ ホストにプロバイダ プラグインをインストールして、GKE と通信するように Symphony のホスト ファクトリー サービスを構成します。
向け Symphony コネクタの詳細については、 Google Cloud IBM Spectrum Symphony と Google Cloud を統合するをご覧ください。
始める前に
GKE 用の Symphony プロバイダをインストールするには、次のリソースが必要です。
- ホスト ファクトリー サービスが有効になっている IBM Spectrum Symphony クラスタが実行されていること。
- GKE クラスタが実行されていること。作成するには、GKE の概要をご覧ください。
- 適切な権限が付与されたサービス アカウント。詳細については、必要な ロールをご覧ください。
- GKE クラスタと通信するようにインストールおよび構成された
kubectlコマンドライン ツール installed and configured to communicate with your GKE cluster。
必要なロール
オペレーターをインストールして 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値を変更して、クラスタ管理の方法に合わせることもできます。
オペレータ マニフェストを適用する
マニフェストを構成したら、Kubernetes クラスタに適用します。
マニフェストは、kubectl または
Cluster Toolkit を使用して適用できます。
kubectl:
kubectlを使用してマニフェストを適用するには、次の コマンドを実行します。kubectl apply -f manifests.yamlCluster Toolkit: GKE インフラストラクチャが Cluster Toolkit によって管理されている場合は、マニフェストを適用するために、
modules/management/kubectl-applyソースを GKE ブループリントに追加します。GKE ブループリントと同じディレクトリにmanifests.yamlファイルがあることを前提とした構成例を次に示します。- 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 で次の操作を行います。
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 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/など)を作成します。$HF_TOP環境変数は、profile.platform scriptをソースにしている場合は、環境に定義されています。この値は、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*Symphony ResourceCR のインスタンスを参照するときに API 呼び出しで使用されます。 Google Cloudgcp-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 プロバイダを使用してリソースをプロビジョニングするには、そのリクエスタに対して有効にします。
$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"]}