Trident: Plugin Trident CSI Node tidak terdaftar setelah versi Kubernetes diperbarui

Dibuat pada 25 Nov 2020  ·  4Komentar  ·  Sumber: NetApp/trident

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.

Pesan kesalahan

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"

Dua trisula-csi berjalan bersamaan

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.

image

DaemonSet dibuat kembali setelah diperbarui

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

  • Versi trisula: 20.10.0 dengan operator trisula
  • Bendera instalasi trisula yang digunakan: silenceAutosupport: true (Operator Trident)
  • Waktu proses kontainer: Docker 19.03.13
  • Versi Kubernetes: v1.19.4
  • Orkestra Kubernetes: Kubernetes
  • Gerbang fitur yang diaktifkan Kubernetes:
  • OS: Ubuntu 18.04
  • Jenis backend NetApp: ONTAP AFF 9.1P14
  • Lainnya:

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.

Dua trident-csi menyebabkan kubelet membatalkan registrasi plugin Trident

  1. Konfirmasikan bahwa driver Trident CSI terdaftar di node.
$ kubectl describe csinodes.storage.k8s.io <NODE_NAME>
...
Spec:
  Drivers:
    csi.trident.netapp.io:
      Node ID:        <NODE_NAME>
      Topology Keys:  [topology.kubernetes.io/zone]
  1. Salin 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 -
  1. Tunggu hingga berjalan, lalu hapus trident-csi-2 DaemonSet yang disalin.
$ kubectl delete ds -n trident trident-csi-2
  1. Konfirmasikan bahwa driver Trident CSI telah menghilang di bagian Drivers pada node. (Ini akan memakan waktu lama)
$ kubectl describe csinodes.storage.k8s.io <NODE_NAME>
Spec:

Membuat ulang DaemonSet memungkinkan dua pod (lama dan baru) berjalan secara bersamaan

  1. Hapus trident-csi DaemonSet. DaemonSet akan segera dibuat ulang oleh operator trisula.
$ kubectl delete ds -n trident trident-csi
  1. Anda akan melihat dua pod 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

bug tracked

Komentar yang paling membantu

Kami akan menyertakan perbaikan ini dalam rilis Trident v21.01.

Semua 4 komentar

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 .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat