すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:コンポーネントのトラブルシューティング

最終更新日:Nov 14, 2024

Container Service for Kubernetes (ACK) コンソールでコンポーネントをインストール、更新、または変更するときにエラーが発生した場合、コンソールにエラーコードが表示されます。 このトピックのエラーコードを検索して、エラーの詳細、エラーの原因、およびエラーの解決策を表示できます。 このトピックでは、コンポーネントを管理するときに表示される可能性のあるエラーコードを一覧表示し、これらのエラーの原因と解決策について説明します。

AddonOperationFailed.ResourceExists

原因

コンポーネントが必要とする特定のリソースがすでにクラスターに存在するため、コンポーネントを直接インストールすることはできません。 このエラーコードは、次のシナリオで返される可能性があります。

  • 他の方法を使用して、クラスタ内のコンポーネントの別のバージョン (オープンソースバージョンなど) をインストールしている必要があります。

  • Helm V2を使用してコンポーネントをインストールしており、HelmをV3に更新する前にコンポーネントが移行またはアンインストールされていない。

  • クラスター内のコンポーネントが必要とするリソースと同じ名前のリソースが作成されている必要があります。

解決策

問題の原因となった既存のリソースを削除します。 エラーメッセージで、問題の原因となった既存のリソースを表示できます。 例:

Addonステータスが一致しない

Addon status not match, failed upgrade helm addon arms-cmonitor for cluster c3cf94b952cd34b54b71b10b7********, err: rendered manifests contain a resource that already exists. Unable to continue with update: ConfigMap "otel-collector-config" in namespace "arms-prom" exists and cannot be imported into the current release

にインポートできません

エラーメッセージは、arms-prom名前空間のotel-collector-config ConfigMapを削除する必要があることを示しています。

次の例は、特定のコンポーネントのこの問題を修正する方法を示しています。

  • 腕-プロメテウス

    arms-prometheusの場合は、arms-prometheusがインストールされている名前空間を削除します。 ほとんどの場合、arms-prometheusはarms-prom名前空間にインストールされます。 次のコマンドを実行して、次のリソースを削除します。 次に、arms-prometheusを再度インストールまたは更新します。

    kubectl delete ClusterRole arms-kube-state-metrics
    kubectl delete ClusterRole arms-node-exporter
    kubectl delete ClusterRole arms-prom-ack-arms-prometheus-role
    kubectl delete ClusterRole arms-prometheus-oper3
    kubectl delete ClusterRole arms-prometheus-ack-arms-prometheus-role
    kubectl delete ClusterRole arms-pilot-prom-k8s
    kubectl delete ClusterRoleBinding arms-node-exporter
    kubectl delete ClusterRoleBinding arms-prom-ack-arms-prometheus-role-binding
    kubectl delete ClusterRoleBinding arms-prometheus-oper-bind2
    kubectl delete ClusterRoleBinding kube-state-metrics
    kubectl delete ClusterRoleBinding arms-pilot-prom-k8s
    kubectl delete ClusterRoleBinding arms-prometheus-ack-arms-prometheus-role-binding
    kubectl delete Role arms-pilot-prom-spec-ns-k8s
    kubectl delete Role arms-pilot-prom-spec-ns-k8s -n kube-system
    kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s
    kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s -n kube-system
  • ack-node-local-dns

    ack-node-local-dnsの場合、次のコマンドを実行して次のリソースを削除し、ack-node-local-dnsを再度更新します。

    重要

    これらのリソースが削除されても、ビジネスは影響を受けません。 ただし、これらのリソースが削除されてからコンポーネントが再度更新されるまでの間は、ポッドを追加しないことをお勧めします。 この期間中に新しいポッドを追加する場合は、コンポーネントが更新された後にこれらのポッドを削除して再作成し、DNSキャッシュをポッドに再度挿入することをお勧めします。

    kubectl delete MutatingWebhookConfiguration ack-node-local-dns-admission-controller
  • 腕-cmonitor

    arms-cmonitorの場合、次のコマンドを実行して次のリソースを削除し、arms-cmonitorを再度インストールまたは更新します。

    kubectl delete ConfigMap otel-collector-config -n arms-prom
    kubectl delete ClusterRoleBinding arms-prom-cmonitor-role-binding
    kubectl delete ClusterRoleBinding arms-prom-cmonitor-install-init-role-binding
    kubectl delete ClusterRole arms-prom-cmonitor-role
    kubectl delete ClusterRole arms-prom-cmonitor-install-init-role
    kubectl delete ServiceAccount cmonitor-sa-install-init -n kube-system

AddonOperationFailed.ReleaseNameInUse

原因

コンポーネントにちなんで名付けられたHelmリリースは、すでにクラスターに存在します。 そのため、Helmを使用してコンポーネントを直接インストールまたは更新することはできません。 このエラーコードは、次のシナリオで返される可能性があります。

  • 他の方法を使用して、クラスタ内のコンポーネントの別のバージョン (オープンソースバージョンなど) をインストールしている必要があります。

  • コンポーネントにちなんで名付けられた残りのHelmリリースが存在します。

解決策

クラスター内の既存のHelmリリースを削除するには、次の手順を実行します。

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[アプリケーション] > [ヘルム] を選択します。

  3. Helmページで、コンポーネントにちなんで名付けられた残りのHelmリリースを見つけます。 [アクション] 列の [削除] をクリックします。 [削除] ダイアログボックスで、[リリースレコードのクリア] を選択し、[OK] をクリックします。

  4. Helmリリースが削除されたら、コンポーネントをインストールまたは更新します。

AddonOperationFailed.WaitForAddonReadyTimeout

原因

コンポーネントの更新要求は送信されますが、コンポーネントポッドはReady状態に到達できません。 その結果、コンポーネントを更新することができない。

トラブルシューティング

次の手順を実行して、コンポーネントポッドがReady状態に到達できない問題をトラブルシューティングします。

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[操作] > [イベントセンター] を選択します。

  3. [イベントセンター] ページで、コンポーネントがデプロイされている名前空間を選択し、[タイプ] ドロップダウンリストから [ポッド] を選択し、[レベル] ドロップダウンリストから [警告] を選択します。 次に、コンポーネントに関連するイベントを表示できます。

    イベントの詳細を分析して原因を特定できます。 次の一般的な原因と解決策のセクションでは、この問題の一般的な原因と解決策について説明します。

一般的な原因とソリューション

原因1: コンポーネントポッドをスケジュールできません

イベントコンテンツ: FailedScheduling

イベントの説明: クラスター内のノードは、次の理由により、コンポーネントポッドをホストするための要件を満たしていません。 イベントの詳細に基づいて原因を特定できます。

  • ノードで使用可能なCPUおよびメモリリソースが、コンポーネントポッドをホストするには不十分です。 この場合、[メモリ不足] または [cpu不足] がイベントの詳細に含まれます。

  • ノードは、コンポーネントポッドによって許容されない汚染を有する。 この場合、イベントの詳細にはポッドが含まれます。

  • ノードは、コンポーネントポッドのアンチアフィニティ規則を満たすには不十分です。 この場合、didn't match pod anti-affinity rulesがイベントの詳細に含まれます。

解決策: コンポーネントポッドをスケジュールするための要件を満たすために、次の操作を実行します。 次に、コンポーネントを再度更新します。

原因2: コンポーネントポッドを作成できません

イベントコンテンツ: FailedCreatePodSandBox

イベントの説明: Podサンドボックスの作成に失敗しました。 この問題の一般的な原因は、ネットワークプラグインがポッドにIPアドレスを割り当てることができないことです。

解決策:

AddonOperationFailed.APIServerUnreachable

原因

ACKはクラスターのKubernetes APIサーバーにアクセスできません。 原因は、Kubernetes APIサーバーの公開に使用されるServer Load Balancer (SLB) インスタンスが期待どおりに機能しないか、SLBインスタンスが適切に構成されていないことです。

解決策

この問題を解決する方法の詳細については、「クラスターリソースにアクセスするときにAPIサーバーリクエストの例外が発生する」をご参照ください。

AddonOperationFailed.ResourceNotFound

原因

システムはコンポーネントが必要とするリソースを見つけることができず、コンポーネントを直接更新することはできません。 原因は、リソースが変更または削除されたことです。

解決策

コンポーネントをアンインストールし、最新バージョンのコンポーネントをインストールします。

AddonOperationFailed. TilerUnreachable

原因

コンポーネントはHelm V2を使用してインストールされ、コンポーネントのインストールまたは更新はTillerに依存しています。 ティラーにエラーが発生し、アクセスできません。 そのため、コンポーネントに対する操作は実行できません。

解決策

次の手順を実行して、Tillerを再起動します。

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [ポッド] を選択します。

  3. kube-system名前空間を選択します。 ティラーポッドを見つけて削除します。 次に、システムがポッドを再作成するのを待ちます。

  4. TillerポッドがReady状態になったら、操作を再度実行します。

AddonOperationFailed.FailedCallingWebhook

原因

コンポーネントが必要とする特定のリソース用に変更Webhookが作成され、Webhookを呼び出すことはできません。 その結果、これらのリソースは更新できません。

解決策

Webhookのトラブルシューティングを行い、問題を修正します。 次に、コンポーネントを再度更新します。 エラーメッセージで呼び出すことができないwebhookを表示できます。 例:

failed to create: Internal error occurred: failed calling webhook "rancher.cattle.io": failed to call webhook: Post "https://rancher-webhook.cattle-system.svc:443/v1/webhook/mutation?timeout=10s": no endpoints available for service "rancher-webhook"

上記のエラーメッセージは、rancher-webhook webhookを呼び出すことができないことを示しています。

AddonOperationFailed.UserForbidden

原因

Helm V2はクラスターで使用されますが、Tillerにはリソースのクエリと更新を行うロールベースのアクセス制御 (RBAC) 権限がありません。 その結果、コンポーネントをインストールまたは更新できません。

解決策

必要なRBAC権限をTillerに付与します。 詳細については、「ロールベースのアクセス制御」をご参照ください。

AddonOperationFailed.TillerNotFound

原因

クラスターはHelm V2を使用しますが、クラスターでは通常どおりTillerポッドは実行されません。 そのため、Helmを使用してコンポーネントを管理することはできません。

解決策

kube-system名前空間のtiller-deployポッドの問題をトラブルシューティングします。 tiler-deployポッドが通常どおり実行された後、コンポーネントを管理します。 ポッドの問題をトラブルシューティングする方法の詳細については、「ポッドのトラブルシューティング」をご参照ください。

AddonOperationFailed.ErrPatchingClusterRoleBinding

原因

コンポーネントが依存するClusterRoleBindingは、すでにクラスターに存在します。 ただし、ClusterRoleBindingの設定は、コンポーネントが必要とする設定とは異なります。 その結果、コンポーネントを更新することができない。 コンポーネントのオープンソースバージョンがクラスターにインストールされていることが原因である可能性があります。

解決策

クラスターにインストールしたオープンソースバージョンをアンインストールするには、次の手順を実行します。

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[アプリケーション] > [ヘルム] を選択します。

  3. Helmページで、コンポーネントにちなんで名付けられた残りのHelmリリースを見つけます。 [アクション] 列の [削除] をクリックします。 [削除] ダイアログボックスで、[リリースレコードのクリア] を選択し、[OK] をクリックします。

  4. Helmリリースが削除されたら、コンポーネントをインストールまたは更新します。

AddonOperationFailed.ErrApplyingPatch

原因

以前のコンポーネントバージョンのYAMLテンプレートは、新しいバージョンのYAMLテンプレートと互換性がありません。 その結果、コンポーネントを更新することができない。 この問題は、次のシナリオで発生する可能性があります。

  • 他の方法を使用して、クラスタ内のコンポーネントの別のバージョン (オープンソースバージョンなど) をインストールしている必要があります。

  • コンポーネントのYAMLテンプレートを変更しました。

  • コンポーネントの以前のバージョンは廃止されています。

解決策

エラーメッセージに基づいて、クラスターにインストールされているコンポーネントのYAMLテンプレートを変更する必要があります。 詳細については、チケットを起票します。

たとえば、廃止されたFlannelバージョンがクラスターにインストールされ、コンポーネントの更新はコンテナー名の競合により失敗します。 次のエラーメッセージが返されます。

spec.template.spec.initContainers[1].name: Duplicate value: \"install-cni\"

この問題を修正するには、kubectl -n kube-system edit ds kube-flannel-dsコマンドを実行して、FlannelのYAMLテンプレートを変更します。 spec.template.spec.containersフィールドのinstall-cniという名前のコンテナー定義を削除します。 この例では、コメント行7〜21を削除します。

      containers:
      - name: kube-flannel
        image: registry-vpc.{{.Region}}.aliyuncs.com/acs/flannel:{{.ImageVersion}}
        command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr" ]
        ...
        # Irrelevant lines are not shown. Delete comment lines 7 to 21. 
    # - command:
      # - /bin/sh
      # - -c
      # - set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf;
        # while true; do sleep 3600; done
      # image: registry-vpc.cn-beijing.aliyuncs.com/acs/flannel:v0.11.0.1-g6e46593e-aliyun
      # imagePullPolicy: IfNotPresent
      # name: install-cni
      # resources: {}
      # terminationMessagePath: /dev/termination-log
      # terminationMessagePolicy: File
      # volumeMounts:
      # - mountPath: /etc/cni/net.d
        # name: cni
      # - mountPath: /etc/kube-flannel/
         # Irrelevant lines are not shown. Delete comment lines 7 to 21. 
          name: flannel-cfg
        ...
       

上記の行を削除してもサービスが中断することはありません。 行が削除されると、Flannelがデプロイされているコンテナーに対してローリングアップデートが自動的に実行されます。 更新が完了したら、ACKコンソールでFlannelを更新できます。 詳細については、「コンポーネントの管理」をご参照ください。