Soalan dan skop
Kluster inferens berbilang penyewa memperuntukkan pemecut melalui Dynamic Resource Allocation (DRA). Pemacu menggunakan CPU, memori, atau hugepages bagi setiap peranti, dan sesetengah peranti memerlukan penjajaran NUMA. Reka pelan Node Allocatable Kubernetes v1.36 supaya penjadual mengambil kira peruntukan DRA dan permintaan Pod biasa secara bersama. Terangkan pemetaan ResourceSlice, status Pod, pelancaran (rollout), pemantauan, dan sempadan rollback.
Kemas kini rasmi DRA v1.36 menerangkan sumber Node Allocatable sebagai lelaran pertama yang membawa CPU, memori, dan hugepages yang diuruskan DRA ke dalam perakaunan nod standard. Keupayaan ini masih berstatus alfa, jadi reka bentuk memerlukan kawalan perlindungan ciri eksperimen.
Konteks dan sempadan
Soalan ini memfokuskan pada perakaunan sumber pra-penjadualan, kekangan topologi, dan keselamatan pelepasan. Peruntukan perkakasan di dalam pemacu dan toleransi kesalahan peringkat perniagaan ialah pergantungan luaran; jawapan harus menyatakan versi API, feature gate, dasar kesegaran (freshness policy), ketekalan lejar, dan syarat rollback.
Perkara yang diuji oleh penemu duga
- Sama ada anda boleh menghubungkan lejar sumber, penjadual, pemacu DRA, ResourceSlice, dan status Pod.
- Sama ada anda membezakan kapasiti peranti daripada sumber nod yang digunakan oleh peruntukan peranti dan daripada permintaan Pod biasa.
- Sama ada anda mengendalikan NUMA, hugepages, kemas kini tidak teratur, pemulaan semula pemacu, dan ResourceSlice yang lapuk (stale).
- Sama ada anda boleh melancarkan feature gate alfa dengan kenari, kebolehcerapan, rollback, dan keserasian pemacu lama.
- Sama ada kemas kini status dihadkan kepada sub-sumber sintetik DRA dan kebenaran berskop nod.
Jawapan 30 saat
“Saya akan meminta pemacu DRA mengisytiharkan sumbangan CPU, memori, atau hugepage bagi setiap peranti dalam nodeAllocatableResourceMappings pada ResourceSlice. Penjadual menggabungkan peruntukan daripada tuntutan yang terikat dengan permintaan Pod biasa dalam lejar nod, mengira setiap tuntutan sekali sahaja. Jejak tetap boleh menggunakan allocationMultiplier; jejak berasaskan kapasiti boleh menggunakan capacityKey. Status Pod mendedahkan hasilnya melalui nodeAllocatableResourceClaimStatuses. Saya hanya akan mendayakan DRANodeAllocatableResources pada nod kenari, menguji NUMA, kemas kini lapuk, dan tingkah laku tergantung (pending), serta menghentikan tuntutan baharu jika lejar atau pemetaan menjadi tidak selamat.”
Penyelesaian langkah demi langkah
- Tentukan model sumber. Simpan ID peranti, ResourceClaim, nod, zon NUMA, nama sumber, unit, versi pemetaan, dan masa pemerhatian dalam lejar yang boleh dimainkan semula. Asingkan kapasiti peranti daripada penggunaan CPU, memori, dan hugepage; satu tuntutan mesti dimasukkan ke dalam lejar sekali sahaja.
- Terbitkan pemetaan ResourceSlice. Pemacu DRA menulis
nodeAllocatableResourceMappingsdalamResourceSlice. Kunci pemetaan boleh mewakili CPU, memori, ephemeral-storage, atau hugepages. Jejak tetap bagi setiap peranti boleh diwakili denganallocationMultiplier; penggunaan berasaskan kapasiti boleh menggunakancapacityKey.
resourceSlice:
nodeAllocatableResourceMappings:
cpu:
allocationMultiplier: 2
memory:
allocationMultiplier: 4Gi
hugepages-2Mi:
capacityKey: consumedIni hanya menggambarkan semantik pemetaan. Jenis medan dan unit mesti disemak berdasarkan skema API Kubernetes semasa dan pelaksanaan pemacu; ia bukan objek sedia hantar.
- Gabungkan lejar penjadualan. Penjadual membaca ResourceSlice dan ResourceClaim yang terikat, mengira sumbangan DRA, dan menambah permintaan Pod biasa. Gunakan kunci tuntutan yang stabil untuk penyahduplikasian. Jika ResourceSlice lapuk atau pemetaannya tiada, kekalkan Pod baharu dalam keadaan pending dan keluarkan amaran daripada membuat penjadualan berdasarkan kapasiti lama.
- Kendalikan NUMA dan susunan. Rekodkan afiniti dan versi NUMA. Lakukan komit peruntukan, pelepasan, atau kemas kini ResourceSlice hanya apabila susunan versi nod adalah monotonik. Semasa pemulaan semula pemacu, bina semula pemetaan sebelum menerima tuntutan baharu untuk mengelakkan peruntukan berganda sementara.
- Dedahkan status dan telemetri.
status.nodeAllocatableResourceClaimStatusesPod merekodkan status sumber nod tuntutan tersebut. Jejak kapasiti lejar, penggunaan, usia pemetaan, sebab pending, kiraan penolakan pendua, dan kegagalan penempatan NUMA. Hubung kaitkan penulisan status dan keputusan penjadualan dengan UID tuntutan.
- Kenari dan rollback. Selepas keserasian satah kawalan (control-plane), penjadual, dan pemacu disahkan, dayakan
DRANodeAllocatableResourceshanya untuk nod kenari. Uji ResourceSlice, Pod biasa yang bercampur dengan tuntutan, pemulaan semula nod, peningkatan taraf pemacu, dan pelepasan. Sekiranya berlaku kegagalan, hentikan tuntutan baharu, kekalkan ikatan sedia ada, eksport lejar, baiki pemetaan, dan sambung semula mengikut versi. Jangan anggap setiap kluster boleh mendayakan keupayaan alfa dengan selamat.
- Sempadan keselamatan. Berikan pemacu DRA kebenaran sub-sumber sintetik yang diperlukan sahaja untuk kemas kini statusnya. Pemacu setempat nod menggunakan kata kerja peka nod dan RBAC berkeistimewaan paling rendah (least-privilege). Penulisan yang gagal harus memberi amaran dan dicuba semula; meluaskan kebenaran tidak membaiki ketidakkonsistenan lejar.
Jawapan model
Saya akan menganggap Node Allocatable sebagai lejar sumber yang mempunyai versi. Pemacu mengisytiharkan sumbangan peranti kepada CPU, memori, atau hugepages dalam nodeAllocatableResourceMappings; sumbangan tetap menggunakan allocationMultiplier, dan sumbangan berasaskan kapasiti menggunakan capacityKey. Penjadual membaca tuntutan yang terikat, menggabungkan sumbangan setiap tuntutan dengan permintaan Pod biasa, dan menyahduplikasi mengikut UID tuntutan supaya penggunaan peranti dan penggunaan sumber nod tidak dikira dua kali.
Lejar merekodkan nod, peranti, NUMA, versi pemetaan, dan masa pemerhatian. Semasa ResourceSlice lapuk, regresi versi, atau pemulaan semula pemacu berlaku, Pod baharu kekal pending dan bukannya dijadualkan daripada kapasiti lama. nodeAllocatableResourceClaimStatuses Pod menyokong bacaan semula dan diagnosis, tetapi ia tidak menggantikan semakan ketekalan lejar.
Oleh kerana v1.36 masih bertaraf alfa, saya akan mendayakan DRANodeAllocatableResources pada nod kenari terlebih dahulu dan menguji campuran tuntutan dan Pod, NUMA, pemulaan semula nod, pelepasan, dan peningkatan taraf pemacu. Rollback menghentikan tuntutan baharu, mengekalkan ikatan sedia ada, dan mengeksport lejar sebelum pembaikan pemetaan. RBAC dihadkan kepada sub-sumber sintetik DRA dan kebenaran berskop nod.
Kesilapan lazim
- Kesilapan: Menolak CPU nod sekali bagi setiap peranti dan sekali lagi selepas percubaan semula tuntutan → Sebab ia gagal: tiada kunci keidempotanan yang stabil → Penyelesaian: nyahduplikasi mengikut UID tuntutan, ID peranti, dan versi pemetaan.
- Kesilapan: Menghantar YAML ilustrasi sebagai objek API pengeluaran → Sebab ia gagal: skema medan dan unit mempunyai versi → Penyelesaian: sahkan API ResourceSlice dan versi pemacu.
- Kesilapan: Terus menggunakan kapasiti lama semasa ResourceSlice tidak tersedia → Sebab ia gagal: data lapuk boleh menyebabkan lebihan komitmen (overcommit) → Penyelesaian: gunakan tetingkap kesegaran dan kekalkan tuntutan baharu pending selepas tamat tempoh.
- Kesilapan: Mendayakan gate alfa di semua tempat secara serentak → Sebab ia gagal: keserasian dan rollback belum diuji → Penyelesaian: gunakan kenari, metrik, hentikan penerimaan tuntutan, dan lejar yang boleh dipulihkan.
- Kesilapan: Meluaskan RBAC untuk membetulkan ralat penulisan status → Sebab ia gagal: ia meluaskan kuasa tanpa membetulkan ketekalan data → Penyelesaian: gunakan sub-sumber sintetik, kata kerja peka nod, dan log audit.
Soalan susulan dan jawapan
Bilakah anda perlu menggunakan allocationMultiplier berbanding capacityKey?
Gunakan allocationMultiplier apabila setiap peruntukan menggunakan jumlah CPU atau memori yang tetap. Gunakan capacityKey apabila penggunaan berbeza mengikut kapasiti peranti atau beban kerja, dengan semantik yang ditakrifkan oleh pemacu dan boleh diaudit. Bekukan unit dan pemversian untuk kedua-dua pilihan.
Bagaimanakah anda mengelakkan pengiraan dua kali bagi permintaan Pod biasa dan pemetaan DRA?
Kekalkan satu lejar: permintaan biasa memasuki aliran permintaan, manakala sumbangan DRA memasuki aliran peruntukan yang dikunci oleh UID tuntutan. Penjadual menggunakan setiap pemetaan sekali dan merekodkan sumber serta versi. Kunci pendua ditolak dan diberi amaran.
Patutkah penjadualan disambung semula serta-merta selepas pemacu dimulakan semula?
Tidak. Bina semula ResourceSlice, sahkan tuntutan yang terikat, sahkan versi dan kapasiti yang monotonik, kemudian terima tuntutan baharu. Semasa pembinaan semula, kekalkan ikatan sedia ada dan biarkan Pod baharu dalam keadaan pending.
Bagaimanakah anda menunjukkan bahawa penempatan NUMA mengekalkan perakaunan?
Mainkan semula peristiwa merentasi NUMA, NUMA yang sama, percubaan semula pelepasan, dan pemulaan semula nod. Bandingkan jumlah keseluruhan nod, sub-lejar NUMA, dan status Pod. Jejak kegagalan penempatan, capahan lejar, masa pending, dan kiraan penolakan pendua.
Bilakah keupayaan alfa boleh dinaikkan taraf (promoted)?
Memerlukan liputan pemacu yang serasi, latih tubi rollback, mainan semula pemulaan semula nod dan peningkatan taraf, tetingkap pemerhatian sifar capahan, serta SLO kapasiti dan pending yang jelas. Binaan yang berjaya atau ujian satu nod tidak mencukupi untuk pelancaran penuh.
Rujukan
- Kemas kini DRA Kubernetes v1.36 (Blog Kubernetes)
- Feature Gates (Dokumentasi Kubernetes)
- ResourceSlice API (Dokumentasi Kubernetes)
- Pod API (Dokumentasi Kubernetes)
- Panduan pengukuhan DRA (Dokumentasi Kubernetes)
Senarai semak temu duga
Lukis aliran dari pemacu ke ResourceSlice, tuntutan, penjadual, lejar Node Allocatable, dan status Pod. Kemudian tambah keidempotanan, versi, NUMA, kenari, dan keistimewaan paling rendah.
Pengajaran utama dalam satu ayat
DRA Node Allocatable berjaya apabila lejar tunggal, berversi, dan selamat daripada rollback mengambil kira sumbangan sumber nod sebenar bagi setiap tuntutan.
Terus berlatih
Lanjutkan pemetaan kepada ResourceClaim berbilang nod dan terangkan bagaimana topologi, kesegaran (freshness), dan pemulihan mengubah keputusan penjadualan.