Saat operasi komponen gagal di Konsol Container Service for Kubernetes (ACK), sebuah kode kesalahan muncul di layar. Halaman ini menjelaskan semua kode kesalahan komponen, penyebabnya, serta cara mengatasinya.
Referensi kode kesalahan
| Kode kesalahan | Deskripsi |
|---|---|
| AddonOperationFailed.ResourceExists | Resource yang dibutuhkan oleh komponen sudah ada di kluster |
| AddonOperationFailed.ReleaseNameInUse | Rilis Helm dengan nama yang sama dengan komponen sudah ada |
| AddonOperationFailed.WaitForAddonReadyTimeout | Pod komponen tidak dapat mencapai status Ready setelah permintaan pembaruan dikirim |
| AddonOperationFailed.APIServerUnreachable | ACK tidak dapat mengakses Kubernetes API server |
| AddonOperationFailed.ResourceNotFound | Resource yang dibutuhkan oleh komponen tidak ditemukan |
| AddonOperationFailed.TillerUnreachable | Helm V2 Tiller tidak dapat diakses |
| AddonOperationFailed.FailedCallingWebhook | Webhook mutasi untuk resource komponen tidak dapat dipanggil |
| AddonOperationFailed.UserForbidden | Tiller tidak memiliki izin Kontrol akses berbasis peran (RBAC) yang diperlukan |
| AddonOperationFailed.TillerNotFound | Tidak ada pod Tiller yang sedang berjalan di kluster |
| AddonOperationFailed.ErrPatchingClusterRoleBinding | ClusterRoleBinding yang dibutuhkan oleh komponen sudah ada tetapi memiliki konfigurasi yang bertentangan |
| AddonOperationFailed.ErrApplyingPatch | Manifes YAML komponen tidak kompatibel antar versi |
AddonOperationFailed.ResourceExists
Gejala
Konsol menampilkan pesan kesalahan seperti berikut:
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 releasePenyebab
Resource yang dibutuhkan oleh komponen sudah ada di kluster, sehingga mencegah instalasi. Hal ini biasanya terjadi ketika:
Versi lain dari komponen (misalnya versi open-source) telah diinstal dengan metode berbeda.
Komponen diinstal dengan Helm V2, dan resource-nya tidak dihapus sebelum migrasi ke Helm V3.
Resource dengan nama yang sama dengan yang dibutuhkan komponen dibuat secara manual.
Solusi
Hapus resource yang bertentangan sebagaimana disebutkan dalam pesan kesalahan, lalu coba lagi instalasi atau pembaruannya.
Pesan kesalahan tersebut memberi tahu Anda resource mana yang harus dihapus. Bagian berikut mencantumkan perintah spesifik untuk komponen tertentu.
arms-prometheus
Untuk arms-prometheus, hapus namespace tempat arms-prometheus diinstal. Dalam kebanyakan kasus, arms-prometheus diinstal di namespace arms-prom. Jalankan perintah berikut, lalu instal atau perbarui arms-prometheus kembali.
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-systemack-node-local-dns
Beban kerja Anda tidak terpengaruh setelah resource dihapus. Jangan menambahkan pod antara penghapusan dan pembaruan. Jika Anda melakukannya, hapus dan buat ulang pod tersebut setelah pembaruan komponen agar cache DNS dimasukkan kembali.
kubectl delete MutatingWebhookConfiguration ack-node-local-dns-admission-controllerSetelah resource dihapus, perbarui 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-systemSetelah resource dihapus, instal atau perbarui arms-cmonitor.
AddonOperationFailed.ReleaseNameInUse
Penyebab
Rilis Helm dengan nama yang sama dengan komponen sudah ada di kluster. Hal ini mencegah Helm menginstal atau memperbarui komponen. Penyebab umum:
Versi lain dari komponen diinstal dengan metode berbeda.
Masih tersisa rilis Helm dari upaya instalasi sebelumnya.
Solusi
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Konsol ACKKonsol ACKKonsol ACKKonsol ACKClusters.
Di halaman Clusters, klik nama kluster target. Di panel kiri, pilih Applications > Helm.
Temukan rilis Helm yang bernama sama dengan komponen. Di kolom Actions, klik Delete. Di kotak dialog, pilih Clear Release Records lalu klik OK.
Instal atau perbarui komponen.
AddonOperationFailed.WaitForAddonReadyTimeout
Penyebab
Permintaan pembaruan telah dikirim, tetapi pod komponen tidak dapat mencapai status Ready dalam periode timeout.
Troubleshooting
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster target. Di panel kiri, pilih Operations > Event Center.
Di tab Events (Cluster Resource Events), atur Level ke Warning, pilih namespace tempat komponen dideploy, dan atur Type ke Pods. Tinjau detail event untuk mengidentifikasi penyebabnya. Bagian berikut menjelaskan penyebab umum beserta solusinya.
Penyebab dan solusi umum
Penyebab 1: Pod tidak dapat dijadwalkan (FailedScheduling)
Node di kluster tidak memenuhi persyaratan penjadwalan untuk pod komponen. Periksa detail event untuk salah satu pesan berikut:
| Pesan event | Penyebab | Solusi |
|---|---|---|
Insufficient memory atau Insufficient cpu | Node kekurangan sumber daya | Hapus pod yang tidak diperlukan, tambahkan node ke kluster, atau tingkatkan konfigurasi node |
the pod didn't tolerate | Pod komponen tidak mentoleransi taint pada node | Hapus taint dari node |
didn't match pod anti-affinity rules | Aturan anti-afinitas tidak dapat dipenuhi | Tambahkan node ke kluster |
Setelah masalah penjadwalan terselesaikan, perbarui komponen kembali.
Penyebab 2: Sandbox pod tidak dapat dibuat (FailedCreatePodSandBox)
Plugin jaringan tidak dapat mengalokasikan alamat IP ke pod. Periksa detail event:
Jika pesan berisi
vSwitch have insufficient IP, tambahkan vSwitch pod baru dalam mode Terway.Jika pesan berisi
transport: Error while dialing, lakukan troubleshooting pada pod untuk memeriksa apakah plugin jaringan kluster berfungsi dengan benar.
AddonOperationFailed.APIServerUnreachable
Penyebab
ACK tidak dapat menjangkau Kubernetes API server. Penyebab paling umum adalah instans Server Load Balancer (SLB) yang mengekspos API server dikonfigurasi salah atau tidak berfungsi sebagaimana mestinya.
Solusi
Lihat Memecahkan Masalah Pengecualian Permintaan Server API.
AddonOperationFailed.ResourceNotFound
Penyebab
Resource yang dibutuhkan oleh komponen hilang—kemungkinan besar dihapus atau dimodifikasi secara eksternal—sehingga komponen tidak dapat diperbarui secara langsung.
Solusi
Uninstall komponen tersebut dan instal versi terbaru.
AddonOperationFailed.TillerUnreachable
Penyebab
Komponen menggunakan Helm V2, yang bergantung pada Tiller untuk instalasi dan pembaruan. Tiller mengalami kesalahan dan tidak dapat diakses.
Solusi
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster target. Di panel kiri, pilih Workloads > Pods.
Pilih namespace
kube-system. Temukan dan hapus pod tiller. Sistem akan membuat ulang pod tersebut secara otomatis.Setelah pod Tiller mencapai status Ready, coba lagi operasi komponen.
AddonOperationFailed.FailedCallingWebhook
Gejala
Konsol menampilkan pesan kesalahan seperti berikut:
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"Penyebab
Webhook mutasi yang dikonfigurasi untuk resource komponen tidak dapat dipanggil, sehingga memblokir pembaruan resource.
Solusi
Lakukan troubleshooting pada webhook yang gagal dan perbaiki masalahnya, lalu perbarui komponen kembali. Anda dapat mengidentifikasi webhook yang tidak dapat dipanggil dari pesan kesalahan.
Pada contoh di atas, webhook rancher-webhook di namespace cattle-system tidak tersedia.
AddonOperationFailed.UserForbidden
Penyebab
Kluster menggunakan Helm V2, tetapi Tiller tidak memiliki izin RBAC yang diperlukan untuk mengkueri dan memperbarui resource, sehingga mencegah instalasi atau pembaruan komponen.
Solusi
Berikan izin RBAC yang diperlukan kepada Tiller. Untuk detailnya, lihat Kontrol akses berbasis peran.
AddonOperationFailed.TillerNotFound
Penyebab
Kluster menggunakan Helm V2, tetapi tidak ada pod Tiller yang berjalan normal di kluster.
Solusi
Lakukan troubleshooting pada pod tiller-deploy di namespace kube-system. Setelah pod berjalan normal, coba lagi operasi komponen. Untuk langkah troubleshooting, lihat Troubleshoot masalah pod.
AddonOperationFailed.ErrPatchingClusterRoleBinding
Penyebab
ClusterRoleBinding yang dibutuhkan oleh komponen sudah ada di kluster, tetapi konfigurasinya bertentangan dengan yang diharapkan komponen. Hal ini biasanya terjadi ketika versi open-source dari komponen diinstal secara terpisah.
Solusi
Uninstall versi open-source komponen dari kluster:
Masuk ke ACK console. Pada panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster target. Di panel kiri, pilih Applications > Helm.
Temukan rilis Helm yang bernama sama dengan komponen. Di kolom Actions, klik Delete. Di kotak dialog, pilih Clear Release Records lalu klik OK.
Instal atau perbarui komponen.
AddonOperationFailed.ErrApplyingPatch
Gejala
Konsol menampilkan pesan kesalahan seperti berikut:
spec.template.spec.initContainers[1].name: Duplicate value: "install-cni"Penyebab
Manifes YAML versi komponen yang saat ini diinstal tidak kompatibel dengan versi target, sehingga mencegah pembaruan. Hal ini dapat terjadi ketika:
Versi lain dari komponen (misalnya versi open-source) diinstal dengan metode berbeda.
Manifes YAML komponen dimodifikasi secara manual.
Versi yang saat ini diinstal sudah tidak didukung.
Solusi
Modifikasi manifes YAML komponen berdasarkan pesan kesalahan. Jika Anda memerlukan bantuan, kirim tiket.
Contoh: Konflik nama kontainer Flannel
Jika versi Flannel yang sudah tidak didukung diinstal, pembaruan dapat gagal dengan:
spec.template.spec.initContainers[1].name: Duplicate value: "install-cni"Untuk memperbaikinya, edit manifes DaemonSet Flannel:
kubectl -n kube-system edit ds kube-flannel-dsDalam manifes, temukan definisi kontainer install-cni di bawah spec.template.spec.containers dan hapus bagian tersebut (baris 7 hingga 21 pada contoh di bawah):
containers:
- name: kube-flannel
image: registry-vpc.{{.Region}}.aliyuncs.com/acs/flannel:{{.ImageVersion}}
command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr" ]
...
# Baris yang tidak relevan tidak ditampilkan. Hapus baris komentar 7 hingga 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/
# Baris yang tidak relevan tidak ditampilkan. Hapus baris komentar 7 hingga 21.
name: flannel-cfg
...
Menghapus baris-baris ini tidak mengganggu beban kerja yang sedang berjalan. Pembaruan rolling akan dimulai secara otomatis. Setelah selesai, perbarui Flannel dari Konsol ACK. Untuk detailnya, lihat Mengelola komponen.