機密コンテナのトラブルシューティング方法は?

これらの可能性のある問題を検討する。

この問題は、セットアップ時の設定ミスが原因である可能性がある。

問題のトラブルシューティングを開始するには、以下のコマンドを実行して、機密コンテナに関するデータをできる限り収集する。

  1. そのオペレーターに関する情報を収集する。

    oc get csv -n openshift-sandboxed-containers-operator
    
    oc describe csv -n openshift-sandboxed-containers-operator
    
    oc get all -n openshift-sandboxed-containers-operator
    
  2. DaemonSets に関連するすべてのポッドからログとイベントを取得します。

    oc describe pod/osc-caa-ds-<random string> -n openshift-sandboxed-containers-operator
    
    oc logs pod/osc-caa-ds-<random string> -n openshift-sandboxed-containers-operator
    
    oc describe pod/osc-config-sync-install-<random string> -n openshift-sandboxed-containers-operator
    
    oc logs pod/osc-config-sync-install-<random string> -n openshift-sandboxed-containers-operator
    
    oc describe pod/osc-rpm-install-<random string> -n openshift-sandboxed-containers-operator
    
    oc logs pod/osc-rpm-install-<random string> -n openshift-sandboxed-containers-operator
    
  3. ポッドに関する情報を収集する。

    a. コントローラのマネージャに関する情報を収集する。

    oc describe pod/controller-manager-<random string> -n openshift-sandboxed-containers-operator
    
    oc logs pod/controller-manager-<random string> -n openshift-sandboxed-containers-operator
    

    b. ランダムな文字列についてログを収集する。

    oc logs pod/<random string>
    
    oc describe pod/<random string>
    

    c. openshift-sandboxed-containers-operator-bundle についての情報を集める。

    oc logs pod/trikprot-openshift-sandboxed-containers-operator-bundle-<version>
    
    oc describe pod/trikprot-openshift-sandboxed-containers-operator-bundle-<version>
    
  4. ConfigMaps に関する情報を収集してください。

    a. フィーチャーゲートに関する情報を集める。

    oc get configmap/osc-feature-gates -n openshift-sandboxed-containers-operator -o yaml
    

    b. ピアポッドに関する情報を収集する。

    oc get configmap/peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
    

    c. その秘密に関する情報を集めましょう。

    oc get secret/auth-json-secret -n openshift-sandboxed-containers-operator
    
    oc get secret/peer-pods-secret -n openshift-sandboxed-containers-operator
    

    d. KataConfig に関する情報を収集してください。

    oc get kataconfigs.kataconfiguration.openshift.io/kata-runtime-settings -n openshift-sandboxed-containers-operator -o yaml
    

    e. カスタムリソース定義に関する情報を収集する。

    oc get crd/peerpods.confidentialcontainers.org
    
    oc get crd/kataconfigs.kataconfiguration.openshift.io
    
  5. ピアポッドの容量と制限を確認する。

    a. すべてのワーカーノードで、現在のピアポッドの制限をチェックします。

    oc get nodes -o json | jq -r '[.items[] | select (.status.allocatable["kata.peerpods.io/vm"] != null)| .status.allocatable["kata.peerpods.io/vm"] | tonumber] | add'
    

    b. 各ワーカーノードで割り当てられたリソースをチェックする。

    for n in $(oc get nodes -o name); do
      echo "=== $n ==="
      oc describe "$n" | sed -n '/Allocated resources:/,/Events:/p'
    done
    

    c. 現在実行中のピアポッドの数をカウントする。

    oc get pods -A -o json | jq '.items[] | select(.spec.runtimeClassName == "kata-remote") | "\(.metadata.namespace)/\(.metadata.name)"' | wc -l
    

よくある問題と解決策

不十分 kata.peerpods.io/vm エラー

ピア・ポッドのスケジューリング時に以下のようなエラーが発生した場合:

Warning FailedScheduling 0/30 nodes are available: 9 Insufficient kata.peerpods.io/vm. preemption: 0/30 nodes are available: 9 No preemption victims found for incoming pod.

このエラーは、ワーカーノードが PEERPODS_LIMIT_PER_NODE の上限に達したことを示しています。 デフォルトの上限は、ワーカーノードあたり10ピアポッドです。

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

  1. 現在の制限と実行中のピアポッドの数を確認します。

    oc get nodes -o json | jq '.items[] | {name: .metadata.name, allocatable: .status.allocatable["kata.peerpods.io/vm"], capacity: .status.capacity["kata.peerpods.io/vm"]}'
    
  2. peer-pods-cm ConfigMap の PEERPODS_LIMIT_PER_NODE の値を大きくする。 詳細については、 機密コンテナの作成を 参照のこと。

    oc -n openshift-sandboxed-containers-operator patch cm peer-pods-cm \
      --type merge \
      -p '{"data":{"PEERPODS_LIMIT_PER_NODE":"24"}}'
    
  3. Cloud API Adapter デーモンセットを再起動します。

    oc -n openshift-sandboxed-containers-operator rollout restart daemonset/osc-caa-ds
    
  4. 新しいリミットが適用されていることを確認する。

    oc get nodes -o json | jq -r '[.items[] | select (.status.allocatable["kata.peerpods.io/vm"] != null)| .status.allocatable["kata.peerpods.io/vm"] | tonumber] | add'
    

ピアポッドの制限と容量計画の詳細については、「 ワーカーノードあたりいくつのピアポッドを実行できますか?

OSC Operator へのアップグレード後に発生した IAM 認証エラー 1.12.1

OpenShift Sandboxed Containers Operator をバージョンにアップグレードした後、Cloud API Adapter (CAA) のログに次のようなエラーが表示された場合は、 1.12.1:

cloud-api-adaptor: cluster error with:
 Unauthorized
further details:
 {
    "StatusCode": 401,
    "Result": {
        "code": "A0007",
        "description": "You do not have the correct permissions to perform this action..."
    }
}

バージョン 1.12.1 では、 IBM Cloud のIKSクラスターサービスAPIからクラスターのセキュリティグループを自動的に取得するという新しい要件が導入されました。 IBMCLOUD_IAM_PROFILE_ID を認証(コンピュートリソースの識別)に使用する際、IAM プロファイルには、クラスタサービス API をクエリするために必要な権限が設定されていない可能性があります。

次のいずれかのオプションを選択します。

IAMの追加権限を付与する(推奨)

IAMプロファイルを更新し、IKSクラスターサービスAPIに対する権限、具体的には GetClusterTypeSecurityGroups() を呼び出す権限を含めるようにします。 必要な権限を追加するには、 IBM Cloud の管理者にお問い合わせください。

セキュリティグループのIDを明示的に設定する

peer-pods-cm ( ConfigMap )で、 IBMCLOUD_VPC_SG_ID 環境変数を設定し、クラスタのセキュリティグループの自動検索をバイパスします。 その後、Cloud API Adapter のデーモンセットを再起動してください。

  1. ConfigMap に、ご自身のセキュリティグループ ID を設定してください。
    oc -n openshift-sandboxed-containers-operator patch cm peer-pods-cm \
      --type merge \
      -p '{"data":{"IBMCLOUD_VPC_SG_ID":"<your-security-group-id>"}}'
    ```
2. Cloud API Adapter デーモンセットを再起動します。

```sh {: pre}
    oc -n openshift-sandboxed-containers-operator rollout restart daemonset/osc-caa-ds
    ```
APIキー認証に切り替える

IBMCLOUD_IAM_PROFILE_ID 認証から IBMCLOUD_API_KEY 認証に切り替えます。 APIキーによる認証では、明示的なIAMポリシーが設定されたサービスIDが使用されます。このサービスIDのスコープを、必要なクラスターサービスの権限が含まれるように設定することができます。 peer-pods-secret のシークレットを、IAMプロファイルIDの代わりにご自身のAPIキーで更新してください。

この変更の詳細については、 アップストリームの cloud-api-adaptor のコミット dde66055 を参照してください。

CPU不足エラー

ピア・ポッドのスケジューリング時に以下のようなエラーが発生した場合:

Warning FailedScheduling 0/3 nodes are available: 3 Insufficient cpu. preemption: 0/3 nodes are available: 3 No preemption victims found for incoming pod.

このエラーは、ワーカーノードに十分なCPUリソースがないことを示しています。 各ピアポッドは、実際のワークロードが別のVSIで実行されているにもかかわらず、 Kubernetes ポッド構築のためにワーカーノードで約 250m CPUを消費します。

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

  1. ワーカーノードのCPU割り当てを確認してください。

    for n in $(oc get nodes -o name); do
      echo "=== $n ==="
      oc describe "$n" | sed -n '/Allocated resources:/,/Events:/p'
    done
    
  2. 次のオプションのいずれかを選択してください。

    • クラスターにワーカーノードを追加する
    • より多くのワーカーノードを使用する vCPUs
    • ワーカーノードの容量に合わせて PEERPODS_LIMIT_PER_NODE の値を減らしてください
    • CPUリソースを解放するために、ワーカーノードから他のワークロードを削除する