IBM Spectrum Symphony コネクタのトラブルシューティング

このドキュメントでは、 Google Cloudの IBM Spectrum Symphony 統合に関する一般的な問題を解決する方法について説明します。具体的には、IBM Spectrum Symphony ホスト ファクトリー サービスCompute Engine と GKE プロバイダのコネクタKubernetes 用 Symphony オペレータのトラブルシューティング ガイダンスについて説明します。

Symphony ホスト ファクトリー サービスの問題

これらの問題は、中央の Symphony ホスト ファクトリー サービスに関連しています。このサービスのメイン ログファイルは、Linux の次の場所にあります。

$EGO_TOP/hostfactory/log/hostfactory.hostname.log

ホスト ファクトリの環境変数を読み込むときに、$EGO_TOP 環境変数を設定します。IBM Spectrum Symphony では、$EGO_TOP は Enterprise Grid Orchestrator(EGO)のインストール ルートを指します。これは、クラスタのコア リソース マネージャーです。Linux での $EGO_TOP のデフォルトのインストール パスは通常 /opt/ibm/spectrumcomputing です。

クラスタが保留中のワークロード用に新しい VM を追加しない

この問題は、Symphony キューにジョブが含まれているにもかかわらず、ホスト ファクトリーが負荷を管理するための新しい仮想マシン(VM)をプロビジョニングできない場合に発生します。ホスト ファクトリ ログファイルに SCALE-OUT メッセージが含まれていません。

この問題は通常、Symphony リクエスターが正しく構成または有効化されていない場合に発生します。この問題を解決するには、構成されたリクエスタのステータスを確認して、リクエスタが有効になっており、保留中のワークロードがあることを確認します。

  1. リクエスタ構成ファイルを見つけます。通常、このファイルは次の場所にあります。

    $HF_TOP/conf/requestors/hostRequestors.json
    

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

  2. hostRequestors.json ファイルを開き、symAinst エントリを見つけます。このセクションで、enabled パラメータが 1 の値に設定され、プロバイダ リストに構成済みの Google Cloud プロバイダ インスタンスの名前が含まれていることを確認します。

    • Compute Engine 構成の場合、プロバイダ リストには、Compute Engine プロバイダのインストール時に プロバイダ インスタンスを有効にするで作成した Compute Engine プロバイダの名前が表示されている必要があります。
    • GKE 構成の場合、プロバイダ リストには、GKE プロバイダのインストール時に プロバイダ インスタンスを有効にするで作成した GKE プロバイダの名前が表示されている必要があります。
  3. symAinst リクエスト元が有効になっていることを確認したら、スケールアウトが必要な保留中のワークロードがコンシューマーにあるかどうかを確認します。

    すべてのコンシューマーとそのワークロードのステータスのリストを表示します。

    egosh consumer list
    
  4. 出力で、ワークロードに関連付けられているコンシューマーを探し、ワークロードが保留中であることを確認します。リクエスタが有効で、ワークロードが保留中であるにもかかわらず、ホスト ファクトリー サービスがスケールアウト リクエストを開始しない場合は、HostFactory サービスログでエラーを確認します。

ホストのファクトリー サービスが起動しない

ホスト ファクトリー サービスが実行されていない場合は、次の手順で問題を解決します。

  1. HostFactory サービスのステータスを確認します。

    egosh service list
    

    出力で HostFactory サービスを見つけ、STATE フィールドに STARTED のステータスが表示されていることを確認します。

  2. HostFactory サービスが開始されていない場合は、再起動します。

    egosh service stop HostFactory
    egosh service start HostFactory
    

その他のエラーとロギング

ホスト ファクトリー サービスで他のエラーが発生した場合は、ログの詳細度を上げて、より詳細なログを取得します。手順は次のとおりです。

  1. 編集する hostfactoryconf.json ファイルを開きます。通常、このファイルは次の場所にあります。

    $EGO_TOP/hostfactory/conf/
    

    $EGO_TOP 環境変数の値の詳細については、Symphony ホスト ファクトリー サービスの問題をご覧ください。

  2. HF_LOGLEVEL の値を LOG_INFO から LOG_DEBUG に更新します。

    {
      ...
      "HF_LOGLEVEL": "LOG_DEBUG",
      ...
    }
    
  3. 変更が完了したら、ファイルを保存します。

  4. 変更を有効にするには、HostFactory サービスを再起動します。

    egosh service stop HostFactory
    egosh service start HostFactory
    

再起動後、HostFactory サービスはより詳細なログを生成します。このログを使用して、複雑な問題のトラブルシューティングを行うことができます。これらのログは、Linux の $EGO_TOP/hostfactory/log/hostfactory.hostname.log にあるメインのホスト ファクトリ ログファイルで確認できます。

ホスト ファクトリー プロバイダの問題

次の問題は、Compute Engine または Google Kubernetes Engine のホスト ファクトリー プロバイダ スクリプト内で発生します。

詳細なエラー メッセージについては、プロバイダのログ(hf-gce.log または hf-gke.log)を確認してください。hf-gce.log ファイルと hf-gke.log ファイルの場所は、プロバイダ インスタンスを有効にするのプロバイダの構成ファイルで設定された LOGFILE 変数によって決まります。

仮想マシンまたは Pod がプロビジョニングされていない

この問題は、ホスト ファクトリー プロバイダのログに requestMachines.sh スクリプトの呼び出しが表示されているにもかかわらず、 Google Cloudプロジェクトにリソースが表示されない場合に発生することがあります。

この問題を解決する方法は次のとおりです。

  1. プロバイダ スクリプトのログ(hf-gce.log または hf-gke.log)で、 Google Cloud API からのエラー メッセージを確認します。hf-gce.log ファイルと hf-gke.log ファイルの場所は、プロバイダ インスタンスを有効にするでプロバイダの構成ファイルに設定された LOGFILE 変数によって決まります。

  2. サービス アカウントに正しい IAM 権限が付与されていることを確認します。

    1. 現在のアクセス権を表示するの手順に沿って操作します。
    2. サービス アカウントに、プロジェクトに対する Compute インスタンス管理者(v1)(roles/compute.instanceAdmin.v1)の IAM ロールがあることを確認します。ロールの付与方法については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
  3. ホスト テンプレートの Compute Engine パラメータが有効であることを確認するには、次のことを確認する必要があります。

    1. ホスト テンプレート パラメータは、Compute Engine プロバイダのインストール時にプロバイダ インスタンスを設定したときに作成した gcpgceinstprov_templates.json ファイルに存在する必要があります。検証する最も一般的なパラメータは gcp_zonegcp_instance_group です。

    2. gcp_instance_group パラメータで設定されたインスタンス グループが存在することを確認します。インスタンス グループを確認するには、テンプレート ファイルの gcp_instance_group 名と gcp_zone ゾーンの値を使用して、MIG のプロパティを表示するの手順に沿って操作します。

GKE で Pod が Pending または Error 状態で停止する

この問題は、hf-gke ログに GCPSymphonyResource リソースの作成が示された後、GKE クラスタ内の対応する Pod が Running 状態に到達せず、PendingImagePullBackOffCrashLoopBackOff などのステータスが表示される場合に発生することがあります。

この問題は、無効なコンテナ イメージ名、CPU またはメモリリソースの不足、ボリュームまたはネットワーク設定の誤りなど、Kubernetes クラスタ内で問題が発生した場合に発生します。

この問題を解決するには、kubectl describe を使用してカスタム リソースと Pod の両方のイベントを調べ、根本原因を特定します。

kubectl describe gcpsymphonyresource RESOURCE_NAME
kubectl describe pod POD_NAME

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

  • RESOURCE_NAME: リソースの名前。
  • POD_NAME: Pod の名前。

Kubernetes オペレーターの問題のトラブルシューティング

Kubernetes オペレータは、Symphony Pod のライフサイクルを管理します。以降のセクションでは、オペレーターとこれらのリソースで発生する可能性のある一般的な問題のトラブルシューティングについて説明します。

リソース ステータス フィールドに関する問題を診断する

Kubernetes オペレータは、次の 2 つの主要なリソースタイプを使用して GKE の Symphony ワークロードを管理します。

  • GCPSymphonyResource(GCPSR)リソースは、Symphony ワークロードのコンピューティング Pod のライフサイクルを管理します。
  • MachineReturnRequest(MRR)リソースは、コンピューティング リソースの返却とクリーンアップを処理します。

次のステータス フィールドを使用して、GCPSymphonyResource リソースの問題を診断します。

  • phase: リソースの現在のライフサイクル フェーズ。選択肢は PendingRunningWaitingCleanupCompleted です。
  • availableMachines: 使用可能な状態のコンピューティング Pod の数。
  • conditions: タイムスタンプを含む詳細なステータス条件。
  • returnedMachines: 返された Pod のリスト。

次のステータス フィールドを使用して、MachineReturnRequest リソースの問題を診断します。

  • phase: 返品リクエストの現在のフェーズ。オプションは PendingInProgressCompletedFailedPartiallyCompleted です。
  • totalMachines: 返されるマシンの合計数。
  • returnedMachines: 正常に返されたマシンの数。
  • failedMachines: 戻り値に失敗したマシンの数。
  • machineEvents: マシンごとのステータスの詳細。

GCPSymphonyResource リソースが Pending 状態のままになる

この問題は、GCPSymphonyResource リソースが Pending 状態のままで、availableMachines の値が増加しない場合に発生します。

この問題は、以下のいずれかの理由で発生する可能性があります。

  • クラスタ内のノード容量が不足している。
  • コンテナ イメージの pull に関する問題。
  • リソース割り当ての制限。

この問題を解決するには:

  1. Pod のステータスを確認して、イメージの pull またはリソース割り当てに関する問題を特定します。

    kubectl describe pods -n gcp-symphony -l symphony.requestId=REQUEST_ID
    

    REQUEST_ID は、リクエスト ID に置き換えます。

  2. ノードを検査して、十分な容量があることを確認します。

    kubectl get nodes -o wide
    
  3. Pod に Pending ステータスが表示されることがあります。この問題は通常、Kubernetes クラスタのスケールアップに想定よりも時間がかかる場合に発生します。ノードをモニタリングして、コントロール プレーンがスケールアウトできることを確認します。

Pod は返却されません

この問題は、MachineReturnRequest(MRR)を作成しても、returnedMachines の数が増加しない場合に発生します。

この問題は、次の理由で発生する可能性があります。

  • Pod が Terminating 状態で停止する。
  • ノードの接続に関する問題がある。

この問題を解決するには:

  1. Terminating 状態のまま停止している Pod を確認します。

    kubectl get pods -n gcp-symphony --field-selector=status.phase=Terminating
    
  2. 返品手続きの詳細については、MachineReturnRequest を説明します。

    kubectl describe mrr MRR_NAME -n gcp-symphony
    

    MRR_NAME は、MachineReturnRequest の名前で置き換えます。

  3. カスタム リソース オブジェクトを手動で削除します。この削除により、最終的なクリーンアップ ロジックが有効になります。

    kubectl delete gcpsymphonyresource RESOURCE_NAME
    

    RESOURCE_NAME は、GCPSymphonyResource リソースの名前に置き換えます。

MachineReturnRequest で失敗したマシンの数が多い

この問題は、MachineReturnRequest ステータスの failedMachines カウントが 0 より大きい場合に発生します。この問題は、次の理由で発生する可能性があります。

  • Pod の削除がタイムアウトしました。
  • ノードが使用できない。

この問題を解決するには:

  1. 特定のメッセージについては、MachineReturnRequest ステータスの machineEvents を確認します。

    kubectl describe mrr MRR_NAME -n gcp-symphony
    
  2. ノード障害イベントまたはコントロール プレーンのパフォーマンスの問題を探します。

    1. すべてのノードのステータスを取得します。

      kubectl get nodes -o wide
      
    2. 特定のノードを検査します。

      kubectl describe node NODE_NAME
      

Pod が削除されない

この問題は、削除された Pod が Terminating 状態または Error 状態で停止した場合に発生します。

この問題は、次の理由で発生する可能性があります。

  • コントロール プレーンまたはオペレーターの過負荷。タイムアウトや API スロットリング イベントが発生する可能性があります。
  • GCPSymphonyResource リソースの手動削除。

この問題を解決するには:

  1. GCPSymphonyResource リソースが引き続き使用可能で、WaitingCleanup 状態になっていないことを確認します。

    kubectl describe gcpsymphonyresource RESOURCE_NAME
    
  2. GCPSymphonyResource リソースがシステムに存在しなくなった場合は、Pod からファイナライザーを手動で削除します。ファイナライザは、Kubernetes が Pod を完全に削除する前に、Symphony オペレーターがクリーンアップ タスクを完了するまで待機するように Kubernetes に指示します。まず、YAML 構成を調べてファイナライザーを見つけます。

    kubectl get pods -n gcp-symphony -l symphony.requestId=REQUEST_ID -o yaml
    

    REQUEST_ID は、Pod に関連付けられたリクエスト ID に置き換えます。

  3. 出力で、メタデータ セクション内のファイナライザー フィールドを探します。次のような出力が表示されます。

    metadata:
    ...
    finalizers:
    -   symphony-operator/finalizer
    
  4. Pod からファイナライザを手動で削除するには、kubectl patch コマンドを使用します。

    kubectl patch pod -n gcp-symphony -l symphony.requestId=REQUEST_ID --type json -p '[{"op": "remove", "path": "/metadata/finalizers", "value": "symphony-operator/finalizer"}]'
    

    REQUEST_ID は、Pod に関連付けられたリクエスト ID に置き換えます。

古い Symphony リソースが GKE クラスタから自動的に削除されない

ワークロードが完了して GKE が Pod を停止した後、関連する GCPSymphonyResource オブジェクトと MachineReturnRequest オブジェクトが、想定される 24 時間のクリーンアップ期間よりも長く GKE クラスタに残ります。

この問題は、GCPSymphonyResource オブジェクトに必要な Completed status 条件がない場合に発生します。オペレーターの自動クリーンアップ プロセスは、このステータスに基づいてオブジェクトを削除します。この問題を解決するには、次の手順に沿って操作してください。

  1. 問題の GCPSymphonyResource リソースの詳細を確認します。

    kubectl get gcpsr GCPSR_NAME -o yaml
    

    GCPSR_NAME は、この問題が発生している GCPSymphonyResource リソースの名前に置き換えます。

  2. ステータスが True のタイプ Completed の条件を確認します。

    status:
      availableMachines: 0
      conditions:
      -   lastTransitionTime: "2025-04-14T14:22:40.855099+00:00"
        message: GCPSymphonyResource g555dc430-f1a3-46bb-8b69-5c4c481abc25-2pzvc has
          no pods.
        reason: NoPods
        status: "True"        # This condition will ensure this
        type: Completed       # custom resource is cleaned up by the operator
      phase: WaitingCleanup
      returnedMachines:
      -   name: g555dc430-f1a3-46bb-8b69-5c4c481abc25-2pzvc-pod-0
        returnRequestId: 7fd6805f-9a00-41f9-afe9-c38aa35002db
        returnTime: "2025-04-14T14:22:39.373216+00:00"
    

    この条件が GCPSymphonyResource の詳細に表示されず、代わりに phase: WaitingCleanup が表示されている場合、Completed イベントは失われています。

  3. GCPSymphonyResource に関連付けられた Pod を確認します。

    kubectl get pods -l symphony.requestId=REQUEST_ID
    

    REQUEST_ID は、リクエスト ID に置き換えます。

  4. Pod が存在しない場合は、GCPSymphonyResource リソースを安全に削除します。

    kubectl delete gcpsr GCPSR_NAME
    

    GCPSR_NAME は、GCPSymphonyResource の名前で置き換えます。

  5. GCPSymphonyResource を削除する前に Pod が存在していた場合は、Pod を削除する必要があります。Pod がまだ存在する場合は、Pod が削除されないセクションの手順に沿って操作します。

Pod が Symphony クラスタに参加しない

この問題は、Pod が GKE で実行されているにもかかわらず、Symphony クラスタで有効なホストとして表示されない場合に発生します。

この問題は、Pod 内で実行されている Symphony ソフトウェアが Symphony プライマリ ホストに接続して登録できない場合に発生します。この問題は、ネットワーク接続の問題や、コンテナ内の Symphony クライアントの構成ミスが原因で発生することがよくあります。

この問題を解決するには、Pod 内で実行されている Symphony サービスのログを確認します。

  1. SSH または exec を使用して Pod にアクセスし、ログを表示します。

    kubectl exec -it POD_NAME -- /bin/bash
    

    POD_NAME は、Pod の名前に置き換えます。

  2. Pod 内に sh がある場合、EGO デーモンと LIM デーモンのログは $EGO_TOP/kernel/log ディレクトリにあります。$EGO_TOP 環境変数は、IBM Spectrum Symphony インストールのルートを参照します。

    cd $EGO_TOP/kernel/log
    

    $EGO_TOP 環境変数の値の詳細については、Symphony ホスト ファクトリ サービスの問題をご覧ください。

  3. GKE Pod からオンプレミスの Symphony プライマリ Pod への接続をブロックする構成エラーまたはネットワーク エラーのログを確認します。

マシンの返品リクエストが失敗する

この問題は、MachineReturnRequest カスタム リソースを作成したときにスケールイン オペレーション中に発生する可能性がありますが、オブジェクトがスタックし、オペレーターが対応する Symphony Pod を終了しません。

オペレーターのファイナライザー ロジックの障害により、Pod とそれに関連付けられたカスタム リソースをクリーンに削除できません。この問題により、孤立したリソースや不要な費用が発生する可能性があります。

この問題を解決するには、カスタム リソースを手動で削除します。これにより、オペレーターのクリーンアップ ロジックが有効になります。

kubectl delete gcpsymphonyresource RESOURCE_NAME

RESOURCE_NAME は、リソースの名前に置き換えます。