ACK のアドオン操作が失敗したときに返される各エラーコードの原因と解決策について説明します。
エラーコードリファレンス
| エラーコード | 説明 |
|---|---|
| AddonOperationFailed.ResourceExists | アドオンで必要なリソースがクラスターにすでに存在します |
| AddonOperationFailed.ReleaseNameInUse | アドオンと同じ名前の Helm リリースがすでに存在します |
| AddonOperationFailed.WaitForAddonReadyTimeout | 更新リクエストの送信後、アドオンの Pod が Ready 状態に達しません |
| AddonOperationFailed.APIServerUnreachable | ACK が Kubernetes API サーバーにアクセスできません |
| AddonOperationFailed.ResourceNotFound | アドオンで必要なリソースが見つかりません |
| AddonOperationFailed.TillerUnreachable | Helm V2 の Tiller にアクセスできません |
| AddonOperationFailed.FailedCallingWebhook | アドオンリソースのミューティング Webhook を呼び出せません |
| AddonOperationFailed.UserForbidden | Tiller に必要なロールベースのアクセス制御 (RBAC) 権限がありません |
| AddonOperationFailed.TillerNotFound | クラスターで実行されている Tiller Pod がありません |
| AddonOperationFailed.ErrPatchingClusterRoleBinding | アドオンで必要な ClusterRoleBinding は存在しますが、競合する設定があります |
| AddonOperationFailed.ErrApplyingPatch | アドオンの YAML マニフェストにバージョン間の互換性がありません |
AddonOperationFailed.ResourceExists
症状
コンソールに次のようなエラーが表示されます:
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
原因
アドオンで必要なリソースがクラスターにすでに存在します。一般的な原因は次のとおりです:
-
別のバージョン (オープンソース版など) が異なる方法でインストールされています。
-
アドオンが Helm V2 でインストールされ、そのリソースが Helm V3 に移行する前に削除されていません。
-
同じ名前のリソースが手動で作成されています。
ソリューション
エラーメッセージに表示された競合するリソースを削除してから、操作を再試行します。
以下のセクションでは、特定のアドオンのコマンドをリストアップします。
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
削除してもワークロードに影響はありません。削除と更新の間に Pod を追加しないでください。追加した場合は、更新後にそれらの Pod を削除して再作成し、DNS キャッシュを再インジェクトする必要があります。
kubectl delete MutatingWebhookConfiguration ack-node-local-dns-admission-controller
リソースを削除した後、ack-node-local-dns を更新します。
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
リソースを削除した後、arms-cmonitor をインストールまたは更新します。
AddonOperationFailed.ReleaseNameInUse
原因
同じ名前の Helm リリースがすでに存在するため、インストールまたは更新ができません。一般的な原因は次のとおりです:
-
別のバージョンが異なる方法でインストールされています。
-
以前のインストール試行による Helm リリースが残っています。
ソリューション
-
ACK コンソールにログインします。左側メニューで、[クラスター] をクリックします。
-
[クラスター] ページで、対象のクラスターの名前をクリックします。左側メニューで、[アプリケーション] > [Helm] を選択します。
-
アドオンの Helm リリースを見つけます。[操作] 列で、[削除] をクリックします。ダイアログボックスで、[リリース記録をクリア] を選択し、[OK] をクリックします。
-
アドオンをインストールまたは更新します。
AddonOperationFailed.WaitForAddonReadyTimeout
原因
更新が送信された後、アドオンの Pod がタイムアウト期間内に Ready 状態に達しません。
トラブルシューティング
-
ACK コンソールにログインします。左側メニューで、[クラスター] をクリックします。
-
[クラスター] ページで、対象のクラスターの名前をクリックします。左側メニューで、[オペレーション] > [イベントセンター] を選択します。
-
[イベント (クラスターリソースイベント)] タブで、[レベル] を [警告] に設定し、アドオンがデプロイされている名前空間を選択し、[タイプ] を [Pod] に設定します。イベントの詳細を確認して原因を特定します。
一般的な原因と解決策
原因 1:Pod をスケジューリングできない (FailedScheduling)
クラスターノードがアドオン Pod のスケジューリング要件を満たしていません。イベント詳細で次のメッセージを確認します:
| イベントメッセージ | 原因 | ソリューション |
|---|---|---|
Insufficient memory または Insufficient cpu |
ノードのリソースが不足しています | 不要な Pod を削除する、クラスターにノードを追加する、またはノードの設定をアップグレードする |
the pod didn't tolerate |
アドオン Pod がノードのテイントを許容しません | ノードからテイントを削除する |
didn't match pod anti-affinity rules |
アンチアフィニティルールを満たせません | クラスターにノードを追加する |
スケジューリングの問題を解決した後、アドオンの更新を再試行します。
原因 2:Pod サンドボックスを作成できない (FailedCreatePodSandBox)
ネットワークプラグインが Pod に IP アドレスを割り当てることができません。イベント詳細を確認します:
-
メッセージに
vSwitch have insufficient IPが含まれている場合は、Terway モードで新しい Pod vSwitch を追加します。 -
メッセージに
transport: Error while dialingが含まれている場合は、Pod のトラブルシューティングを行い、クラスターのネットワークプラグインを確認します。
AddonOperationFailed.APIServerUnreachable
原因
ACK が Kubernetes API サーバーに到達できません。通常、API サーバーを公開している Server Load Balancer (SLB) インスタンスの設定が誤っていることが原因です。
ソリューション
「API サーバーリクエストの例外のトラブルシューティング」をご参照ください。
AddonOperationFailed.ResourceNotFound
原因
必要なアドオンリソースが見つかりません。外部から削除または変更された可能性が高く、インプレース更新ができません。
ソリューション
アドオンをアンインストールし、最新バージョンをインストールします。
AddonOperationFailed.TillerUnreachable
原因
アドオンは Helm V2 を使用しており、Tiller に依存しています。Tiller でエラーが発生し、アクセスできなくなっています。
ソリューション
-
ACK コンソールにログインします。左側メニューで、[クラスター] をクリックします。
-
[クラスター] ページで、対象のクラスターの名前をクリックします。左側メニューで、[ワークロード] > [Pod] を選択します。
-
kube-system名前空間を選択します。[tiller] Pod を見つけて削除します。システムが自動的に再作成します。 -
Tiller Pod が Ready 状態になった後、アドオン操作を再試行します。
AddonOperationFailed.FailedCallingWebhook
症状
コンソールに次のようなエラーが表示されます:
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"
原因
アドオンリソースのミューティング Webhook を呼び出せないため、更新がブロックされています。
ソリューション
エラーメッセージで特定された、エラーとなっている Webhook を修正し、アドオンの更新を再試行します。
この例では、cattle-system 名前空間の rancher-webhook Webhook が利用できません。
AddonOperationFailed.UserForbidden
原因
クラスターは Helm V2 を使用していますが、Tiller にリソースを管理するための RBAC 権限がないため、アドオンの操作ができません。
ソリューション
Tiller に必要な RBAC 権限を付与します。「ロールベースのアクセス制御」をご参照ください。
AddonOperationFailed.TillerNotFound
原因
クラスターは Helm V2 を使用していますが、Tiller Pod が実行されていません。
ソリューション
kube-system 名前空間の tiller-deploy Pod のトラブルシューティングを行います。Pod が正常に実行された後、アドオン操作を再試行します。「Pod の問題のトラブルシューティング」をご参照ください。
AddonOperationFailed.ErrPatchingClusterRoleBinding
原因
アドオンで必要な ClusterRoleBinding は存在しますが、競合する設定があります。通常、別途インストールされたオープンソース版が原因です。
ソリューション
オープンソースのアドオンバージョンをアンインストールします:
-
ACK コンソールにログインします。左側メニューで、[クラスター] をクリックします。
-
[クラスター] ページで、対象のクラスターの名前をクリックします。左側メニューで、[アプリケーション] > [Helm] を選択します。
-
アドオンの Helm リリースを見つけます。[操作] 列で、[削除] をクリックします。ダイアログボックスで、[リリース記録をクリア] を選択し、[OK] をクリックします。
-
アドオンをインストールまたは更新します。
AddonOperationFailed.ErrApplyingPatch
症状
コンソールに次のようなエラーが表示されます:
spec.template.spec.initContainers[1].name: Duplicate value: "install-cni"
原因
インストールされているバージョンの YAML マニフェストがターゲットバージョンと互換性がありません。一般的な原因は次のとおりです:
-
別のバージョン (オープンソース版など) が異なる方法でインストールされています。
-
アドオンの YAML マニフェストが手動で変更されています。
-
現在インストールされているバージョンはサポートされなくなりました。
ソリューション
エラーメッセージに基づいてコンポーネントの YAML マニフェストを修正します。サポートが必要な場合は、してください。
例: Flannel コンテナ名の競合
廃止された Flannel バージョンがインストールされている場合、更新は次のエラーで失敗することがあります:
spec.template.spec.initContainers[1].name: Duplicate value: "install-cni"
Flannel DaemonSet マニフェストを編集します:
kubectl -n kube-system edit ds kube-flannel-ds
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" ]
...
# - 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/
name: flannel-cfg
...
これらの行を削除しても、実行中のワークロードが中断されることはありません。ローリングアップデートが自動的に開始されます。完了後、ACK コンソールから Flannel を更新します。「コンポーネントの管理」をご参照ください。