Trident: Trident-csi crashloop pada referensi snapshot yang tidak valid

Dibuat pada 7 Des 2020  ·  5Komentar  ·  Sumber: NetApp/trident

Jelaskan bugnya

Penyebaran trisula-csi mengalami crashlooping karena

I1207 08:20:13.609384 1 connection.go:186] GRPC error: rpc error: code = FailedPrecondition desc = Trident initialization failed; error attempting to clean up snapshot snapshot-SOMEUUID from backend ontapnas.... : error reading volume size: flexvol trident_pvc_SOMEOTHERUUID not found

Untuk beberapa alasan trident-csi mengikuti sisa referensi ke snapshot di backend PVC yang tidak mendukung snapshot.
Snapshot itu sendiri tidak ada lagi untuk PVC itu (mungkin telah salah dibuat di kubernetes di masa lalu [>1 bulan yang lalu]). Saya bahkan telah menghapus PVC asli. Tetapi masalah sebenarnya adalah menghapus objek "volumesnapshot" untuk snapshot itu, sepertinya tidak menghapus semua referensi lain untuk itu.

Backendnya adalah "ontap-nas-economy" ( https://netapp-trident.readthedocs.io/en/latest/kubernetes/operations/tasks/backends/ontap/drivers.html , yang q-tree).

Sepertinya CSI mencoba mencari snapshot untuk PV (qtree) yang disediakan di backend 'ekonomi', tapi sebenarnya memeriksa volume pvc di backend ontap-nas biasa. Yang ditetapkan sebagai default kami juga. Saya menduga masalah ini terjadi karena kelas penyimpanan default adalah kelas ekonomi, ketika snapshot dibuat. Itu berubah nanti untuk mengatur default ke ontap-nas yang mendukung backend, tetapi referensi mungkin rusak/tidak dibersihkan dengan benar pada saat itu (?).

Referensi lain tersebut antara lain:

  • a VolumeSnapshotContent yang mereferensikan snapshot/pvc.
  • referensi objek TridentVolume yang menghapus PVC
  • a TridentTransaction yang juga berisi referensi ke snapshot itu.

Menghapus referensi sebelumnya akan memperbaiki masalah.

keadaan awal:

Beberapa waktu lalu, sumber daya volumesnapshot dibuat untuk backend yang tidak mendukungnya. Menghapus volumesnapshot itu tampaknya tidak menghapus referensinya pada objek trisula crd lainnya.

Apa yang memicu bug:

Restart beberapa node, restart kubelet pada salah satu node yang memiliki volumeattachment untuk snapshot/pvc.

Lingkungan
Buka shift 4.6.*

  • Versi trisula: 20.07.1 (juga macet di 20.10.0 setelah memutakhirkan)
  • Bendera instalasi trisula yang digunakan: --debug
  • Waktu proses kontainer: cri-o://1.19.0-24
  • Versi Kubernetes: v1.19.0
  • Orkestra Kubernetes: Openshift 4.6.*
  • Gerbang fitur yang diaktifkan Kubernetes: [mis. CSINodeInfo]
  • OS: Red Hat Enterprise Linux CoreOS 46.82
  • Jenis backend NetApp: [misalnya CVS untuk AWS, ONTAP AFF 9.5, HCI 1.7]

Untuk Mereproduksi

  • Setel backend penyimpanan default ke yang tidak mendukung snapshot.
  • Buat objek volumesnapshot untuk backend yang tidak mendukung snapshot
  • Ubah SC default menjadi yang mendukung snapshot
  • Hapus volumesnapshot
  • Mulai ulang node yang berisi lampiran untuk snapshot itu.
  • Setelah me-restart node, restart pod trident-csi.
  • Periksa apakah semua referensi telah dihapus.

Perilaku yang diharapkan

Tidak ada crashlooping pada referensi TridentTransaction yang rusak.
Cetak peringatan dan lanjutkan ATAU bersihkan referensi yang rusak ATAU tambahkan tanda untuk mengaktifkan/menonaktifkan perilaku ini.

bug tracked

Semua 5 komentar

Solusinya adalah menghapus transaksi trisula secara manual dan memulai ulang pod trisula. ini masih bug yang perlu dibenahi.
Langkah-langkah untuk solusinya di bawah ini
Periksa entri dalam CRD transaksi trident.

# oc dapatkan tridenttransaction -n trident
# oc dapatkan tridenttransaction -n trident -o json

[ corona@stablrebco2 ~]$ oc dapatkan ttx -n trisula
NAMA USIA
pvc-63836175-1515-4326-b73f-cae3e0963be7-snapshot-0462e2ea-f167-4846-86a3-10cc6599b4a8 8d

3) Hapus entri yang ada di CRD transaksi trident.
Sebelum menghapus entri CRD tridenttransaction, Anda mungkin perlu mengedit entri sumber daya CRD dan menghapus finalizers(trident.netapp.io)

Untuk mengedit CRD, gunakan editor vi: (Ingat untuk menyimpan perubahan)

kubectl (oc) edit tridenttransaction pvc-63836175-1515-4326-b73f-cae3e0963be7-snapshot-0462e2ea-f167-4846-86a3-10cc6599b4a8 -n trident

Hapus baris di bawah finalizer yang berisi entri "trident.netapp.io".

4) Untuk menghapus CRD transaksi trident.

oc hapus ttx pvc-63836175-1515-4326-b73f-cae3e0963be7-snapshot-0462e2ea-f167-4846-86a3-10cc6599b4a8 -n trisula

Konfirmasi transaksi trident telah dihapus.

oc dapatkan ttx -n trisula

5) Setelah ini pod Trident akan muncul dan dalam status Running. Jika tidak, hapus pod trisula utama, (pod dengan nama pod terpanjang).
Ini akan memunculkan pod trisula baru yang akan mencoba menginisialisasi lagi dan harus berhasil diinisialisasi karena tidak ada transaksi basi yang harus ditangani selama inisialisasi.

oc dapatkan pod -n trisula

oc hapus pod-n trisula

apakah akan ada rilis patch untuk memperbaiki bug?

Hai @promothp ,

Bug ini bersama semua bug lainnya dievaluasi berdasarkan tingkat keparahan dan diprioritaskan untuk diperbaiki. Jika memungkinkan, perbaikan bug untuk masalah ini akan disertakan dalam rilis Trident v21.01 pada akhir Januari.

Tambahkan suara saya untuk memiliki tambalan lebih cepat dari nanti!

Perbaikan ini termasuk dalam rilis Trident v21.01 dengan commit 0ce1aaf .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat