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リリースを削除するには、次の手順を実行します。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。Helmページで、コンポーネントにちなんで名付けられた残りのHelmリリースを見つけます。 [アクション] 列の [削除] をクリックします。 [削除] ダイアログボックスで、[リリースレコードのクリア] を選択し、[OK] をクリックします。
Helmリリースが削除されたら、コンポーネントをインストールまたは更新します。
AddonOperationFailed.WaitForAddonReadyTimeout
原因
コンポーネントの更新要求は送信されますが、コンポーネントポッドはReady状態に到達できません。 その結果、コンポーネントを更新することができない。
トラブルシューティング
次の手順を実行して、コンポーネントポッドがReady状態に到達できない問題をトラブルシューティングします。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。[イベントセンター] ページで、コンポーネントがデプロイされている名前空間を選択し、[タイプ] ドロップダウンリストから [ポッド] を選択し、[レベル] ドロップダウンリストから [警告] を選択します。 次に、コンポーネントに関連するイベントを表示できます。
イベントの詳細を分析して原因を特定できます。 次の一般的な原因と解決策のセクションでは、この問題の一般的な原因と解決策について説明します。
一般的な原因とソリューション
原因1: コンポーネントポッドをスケジュールできません
イベントコンテンツ: FailedScheduling
イベントの説明: クラスター内のノードは、次の理由により、コンポーネントポッドをホストするための要件を満たしていません。 イベントの詳細に基づいて原因を特定できます。
ノードで使用可能なCPUおよびメモリリソースが、コンポーネントポッドをホストするには不十分です。 この場合、[メモリ不足] または [cpu不足] がイベントの詳細に含まれます。
ノードは、コンポーネントポッドによって許容されない汚染を有する。 この場合、イベントの詳細にはポッドが含まれます。
ノードは、コンポーネントポッドのアンチアフィニティ規則を満たすには不十分です。 この場合、didn't match pod anti-affinity rulesがイベントの詳細に含まれます。
解決策: コンポーネントポッドをスケジュールするための要件を満たすために、次の操作を実行します。 次に、コンポーネントを再度更新します。
不要なテイントをノードから削除します。 詳細については、「テイントの管理」をご参照ください。
不要になったポッドを削除します。 詳細については、「ポッドの管理」をご参照ください。
クラスターにノードを追加します。 詳細については、「ノードプールの作成」をご参照ください。
クラスター内のノードをアップグレードします。 詳細については、「ワーカーノードの設定のアップグレード」をご参照ください。
原因2: コンポーネントポッドを作成できません
イベントコンテンツ: FailedCreatePodSandBox
イベントの説明: Podサンドボックスの作成に失敗しました。 この問題の一般的な原因は、ネットワークプラグインがポッドにIPアドレスを割り当てることができないことです。
解決策:
イベントの詳細にvSwitchのIPが不足している場合は、Terwayモードで新しいポッドvSwitchを追加します。 詳細については、「Terwayプラグインを使用するクラスター内のポッドvSwitchの数を増やす」をご参照ください。
イベントの詳細にtransport: Error while dialが含まれている場合は、クラスターのネットワークプラグインが期待どおりに機能するかどうかを確認します。 詳細については、「ポッドのトラブルシューティング」をご参照ください。
AddonOperationFailed.APIServerUnreachable
原因
ACKはクラスターのKubernetes APIサーバーにアクセスできません。 原因は、Kubernetes APIサーバーの公開に使用されるServer Load Balancer (SLB) インスタンスが期待どおりに機能しないか、SLBインスタンスが適切に構成されていないことです。
解決策
この問題を解決する方法の詳細については、「クラスターリソースにアクセスするときにAPIサーバーリクエストの例外が発生する」をご参照ください。
AddonOperationFailed.ResourceNotFound
原因
システムはコンポーネントが必要とするリソースを見つけることができず、コンポーネントを直接更新することはできません。 原因は、リソースが変更または削除されたことです。
解決策
コンポーネントをアンインストールし、最新バージョンのコンポーネントをインストールします。
AddonOperationFailed. TilerUnreachable
原因
コンポーネントはHelm V2を使用してインストールされ、コンポーネントのインストールまたは更新はTillerに依存しています。 ティラーにエラーが発生し、アクセスできません。 そのため、コンポーネントに対する操作は実行できません。
解決策
次の手順を実行して、Tillerを再起動します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。kube-system名前空間を選択します。 ティラーポッドを見つけて削除します。 次に、システムがポッドを再作成するのを待ちます。
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の設定は、コンポーネントが必要とする設定とは異なります。 その結果、コンポーネントを更新することができない。 コンポーネントのオープンソースバージョンがクラスターにインストールされていることが原因である可能性があります。
解決策
クラスターにインストールしたオープンソースバージョンをアンインストールするには、次の手順を実行します。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。Helmページで、コンポーネントにちなんで名付けられた残りのHelmリリースを見つけます。 [アクション] 列の [削除] をクリックします。 [削除] ダイアログボックスで、[リリースレコードのクリア] を選択し、[OK] をクリックします。
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を更新できます。 詳細については、「コンポーネントの管理」をご参照ください。