Jelaskan bugnya
Plugin Trident CSI Node ( csi.trident.netapp.io
) pada satu node sekarang tidak terdaftar setelah versi Kubernetes diperbarui dari v1.18.9 ke v1.19.4. Pod pada node ini tidak dapat lagi memasang dan melepas volume Trident.
Kita melihat pesan berikut di log kubelet.
csi.trident.netapp.io
tidak terdaftar sejak soket pendaftaran ( /var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock
) telah dihapus.
I1119 05:47:54.246972 6550 plugin_watcher.go:212] Menghapus jalur soket /var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock dari cache status yang diinginkan
I1119 05:47:53.162305 6550 Reconcioner.go:139] operationExecutor.UnregisterPlugin dimulai untuk plugin di "/var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock" (detail plugin: &{/var /lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock 04-11-2020 05:08:19.553684094 +0000 UTC m=+38.893901704 0x704c200 csi.trident.netapp.io})
I1119 05:47:53.163390 6550 csi_plugin.go:177] kubernetes.io/csi: RegistrationHandler.DeRegisterPermintaan plugin untuk plugin csi.trident.netapp.io
Pod tidak dapat meng-unmount volume karena csi.trident.netapp.io
tidak ditemukan.
E1119 09:02:52.819122 6550 nestedpendingoperations.go:301] Operasi untuk "{v olumeName:kubernetes.io/csi/csi.trident.netapp.io ^pvc-75a6fd7f-7aee-45e8-a5fa-d4500272528e podName:ad9018a7d1-409018a7d -4e0c-9e71-cba46dfc3657 nodeName:}" gagal. Tidak ada percobaan ulang yang diizinkan hingga 19-11-2020 09:04:54.819071328 +0000 UTC m=+1310234.159288938 (durasiBeforeRetry 2m2s). Kesalahan: "UnmountVolume.TearDown gagal untuk volume "data" (UniqueName: "kubernetes.io/csi/csi.trident.netapp.io^pvc-75a6fd7f-7aee-45e8-a5fa-d4500272528e") pod "ad18a7d1-4090-4e0c -9e71-cba46dfc3657" (UID: "ad18a7d1-4090-4e0c-9e71-cba46dfc3657") : kubernetes.io/csi: mounter.SetUpAt gagal mendapatkan klien CSI: nama driver csi.trident.netapp.io tidak ditemukan dalam daftar driver CSI terdaftar"
Kami menemukan bahwa dua pod trident-csi
(Node Plugin) pada node ini berjalan secara bersamaan untuk waktu yang sangat singkat, dan bahwa driver-registrar
yang lama telah berhenti setelah yang baru dimulai.
driver-registrar
menghapus soket pendaftaran ( /var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock
) ketika menerima SIGTERM ( node_register.go#L113-L116 ). Menghapus socket menyebabkan kubelet membatalkan registrasi plugin Trident. Saya percaya ini adalah penyebab masalahnya.
Pod Trident-csi (Node Plugin) dikelola oleh DaemonSet. Biasanya, hanya satu pod yang berjalan di setiap node. Tetapi setelah Kubernetes diperbarui, trident-csi Daemonset dibuat ulang oleh trident-operator
. Menghapus DaemonSet memungkinkan dua pod (lama dan baru) berjalan secara bersamaan.
Kami mengkonfirmasi ini di log trident-operator
.
Di sini, Daemonset trident-csi
telah dihapus.
time="2020-11-19T05:47:45Z" level=debug msg="DaemonSet Kubernetes yang Dihapus." DaemonSet=trisula-csi namespace=trisula
Daemonset trident-csi
kemudian dibuat segera setelahnya.
time="2020-11-19T05:47:45Z" level=debug msg="Membuat objek." kind=DaemonSet name=trisula-csi namespace=trisula
Setelah Kubernetes diperbarui, flag shouldUpdate
disetel ke true ( controller.go#L1110 ). Tampaknya flag shouldUpdate
menyebabkan trident-csi
Daemonset dihapus( installer.go#L1489-L1494 ).
Lingkungan
silenceAutosupport: true
(Operator Trident)untuk mereproduksi
Memperbarui versi Kubernetes dapat mereproduksi masalah ini. Karena memperbarui Kubernetes membutuhkan waktu lama dan tidak selalu terjadi, kami mengonfirmasi perilaku berikut yang menyebabkan masalah ini melalui berbagai demonstrasi.
$ kubectl describe csinodes.storage.k8s.io <NODE_NAME>
...
Spec:
Drivers:
csi.trident.netapp.io:
Node ID: <NODE_NAME>
Topology Keys: [topology.kubernetes.io/zone]
trident-csi
DaemonSet untuk menjalankan dua pod trident-csi pada setiap node.$ kubectl get ds -n trident trident-csi -o json | jq '.metadata.name|="trident-csi-2"' | kubectl apply -f -
trident-csi-2
DaemonSet yang disalin.$ kubectl delete ds -n trident trident-csi-2
$ kubectl describe csinodes.storage.k8s.io <NODE_NAME>
Spec:
trident-csi
DaemonSet. DaemonSet akan segera dibuat ulang oleh operator trisula.$ kubectl delete ds -n trident trident-csi
trident-csi
pada setiap node.$ kubectl get pods -n trident -o wide
Perilaku yang diharapkan
Pod dapat memasang dan melepas volume Trident setelah versi Kubernetes diperbarui.
konteks tambahan
Tidak ada
Halo @tksm
Terima kasih telah memberikan detail masalah ini dan melihat dengan cermat penyebab yang mendasarinya, analisis Anda sangat membantu. Jendela antara penghentian pod daemonset dan mendapatkan rekreasi sangat penting, dan yang terakhir hanya akan terjadi ketika yang pertama telah selesai. Oleh karena itu, operator harus memastikan bahwa sebelum pembuatan daemonset, pod-pod milik daemonset sebelumnya semuanya dihapus dan kemudian hanya membuat daemonset baru.
Karena penasaran, apakah Anda keberatan saya menanyakan jumlah cluster yang mengalami masalah ini selama pemutakhiran?
Terima kasih!
Hai, @ntap-arorar
Terima kasih telah mengonfirmasi. Saya pikir ide Anda akan memperbaiki masalah ini.
Kami telah mengalami masalah ini hanya pada satu cluster sejauh ini, karena kami hanya mengupgrade beberapa cluster sebagai pengujian.
Kami akan menyertakan perbaikan ini dalam rilis Trident v21.01.
Masalah ini telah diperbaiki dengan commit 820579d .
Komentar yang paling membantu
Kami akan menyertakan perbaikan ini dalam rilis Trident v21.01.