Soalan
Kubernetes v1.35 mendokumentasikan Scheduling Group sebagai keupayaan alpha. Reka bentuk platform kelompok (batch) di mana pekerja (worker) yang saling bergantung hanya dimulakan apabila sekurang-kurangnya minCount Pod boleh diletakkan bersama. Terangkan bagaimana PodGroup, penjadual (scheduler), pengawal (controller), penskalaan automatik (autoscaling), dan pengendalian kegagalan bekerjasama. Nyatakan andaian versi dan feature-gate.
Perkara yang diuji oleh penemu duga
Ujian utama adalah sama ada anda boleh mengangkat kebolehlaksanaan daripada satu Pod kepada kumpulan sambil mengekalkan konsistensi API, penjadualan, dan runtime state. Jawapan yang mantap membezakan basic daripada gang, mengendalikan PodGroup yang tiada, kekurangan kapasiti, kegagalan ahli, preemption, dan kebolehcerapan (observability), serta mengelak daripada mempersembahkan API alpha sebagai sedia untuk pengeluaran (production-ready) sepenuhnya.
Soalan penjelasan
- Adakah setiap pekerja perlu bermula bersama, atau adakah ambang serentak yang lebih rendah mencukupi?
- Adakah ahli-ahli merupakan Job sekali jalan (one-shot) atau perkhidmatan jangka panjang?
- Adakah mereka memerlukan GPU, kekangan topologi, atau penempatan rentas kluster? Rujukan yang didokumentasikan ialah PodGroup dalam namespace yang sama.
- Apakah tarikh akhir (deadline) menunggu, dan adakah sesuatu tugas boleh beratur, meminjam kapasiti, atau diturunkan taraf (downgrade)?
Rangka kerja 30 saat
Mulakan dengan batasannya: Scheduling Group dan dasar PodGroup adalah alpha dalam v1.35, dinyahdayakan secara lalai, dan memerlukan feature gate GenericWorkload. Kemudian bincangkan empat lapisan: kontrak API, penjadualan kumpulan, kitaran hayat dan operasi. Workload mencipta PodGroup; Pod merujuknya; scheduler menggunakan dasar dan minCount; controller menguruskan masa tamat, percubaan semula (retry), dan pembersihan; metrik serta undur balik (rollback) melindungi pelancaran (rollout).
Reka bentuk langkah demi langkah
1. Model dan invarian
Controller mencipta satu PodGroup bagi setiap larian dengan ahli yang diingini, dasar, versi, dan penyewa (tenant). Setiap Pod menetapkan spec.schedulingGroup.podGroupName kepada PodGroup dalam namespace yang sama. Medan ini tidak boleh diubah (immutable), jadi memindahkan Pod bermakna mencipta set baharu. Untuk gang, tiada ahli yang diikat (bind) sehingga invarian minCount dipenuhi.
2. Memilih dasar
Gunakan basic apabila ahli boleh berjalan secara bebas dan pengelompokan adalah terutamanya untuk pengurusan dan kebolehcerapan. Gunakan gang untuk latihan yang berganding rapat atau kerja kelompok; kumpulan ini hanya boleh dilaksanakan apabila sekurang-kurangnya minCount ahli boleh dijadualkan serentak. Menetapkan minCount di bawah jumlah keseluruhan membolehkan keanjalan; menetapkannya sama dengan jumlah keseluruhan memerlukan semua ahli.
3. Mesin keadaan penyerahan dan menunggu
Cipta PodGroup sebelum mencipta Pod supaya rujukan dapat diselesaikan. Jika objek yang dirujuk tiada, Pod kekal Pending dan scheduler mencuba semula selepas kumpulan itu wujud. Jejaki keadaan seperti PendingGroup, WaitingCapacity, Feasible, Bound, Running, Failed, dan Cancelled, setiap satu dengan generasi, sebab, dan cap masa.
4. Penjadualan dan penyelarasan kapasiti
Scheduler menilai nod calon terlebih dahulu menggunakan penapis, topologi, peranti, dan keutamaan, kemudian memeriksa kebolehlaksanaan kumpulan. Operasi ikat (bind) mestilah boleh dicuba semula dan idempoten, dan hanya berlaku selepas bilangan calon mencapai minCount. Autoscaler harus menggunakan bentuk sumber kumpulan dan menskalakan untuk keseluruhan permintaan dan bukannya menambah kapasiti untuk Pod pertama sahaja.
5. Preemption, tarikh akhir, dan keadilan
Berikan kumpulan keutamaan dan berat giliran yang konsisten supaya preemption tidak meninggalkan separuh kumpulan yang tidak boleh digunakan. Apabila mencapai tarikh akhir, batalkan kumpulan dan lepaskan tempahan; percubaan semula menggunakan generasi baharu supaya ahli lapuk tidak boleh menyertai semula. Kuota penyewa, saiz kumpulan maksimum, dan penuaan giliran menghalang gang besar daripada memonopoli kluster.
6. Kegagalan ahli dan undur balik
Selepas permulaan, ahli yang ranap tidak boleh dianggap sebagai bukti bahawa kumpulan itu kini sihat. Bergantung pada semantik tugasan, mulakan semula satu ahli atau tamatkan kumpulan; tugasan latihan biasanya memulihkan checkpoint dan mencipta generasi baharu. Memadam Workload harus membersihkan Pod yang dimiliki dan PodGroup sambil mengekalkan peristiwa terminal untuk tujuan audit.
7. Kebolehcerapan dan batas keselamatan
Dedahkan kependaman giliran kumpulan, bilangan ahli yang boleh dilaksanakan, minCount, bilangan peningkatan skala dan preemption, serta sebab kegagalan. Webhook kemasukan (admission webhook) mengesahkan namespace, kuota, saiz kumpulan, dan ketersediaan feature gate. Oleh kerana API ini adalah alpha, gunakan suis pelancaran eksplisit, ujian keserasian, dan laluan rollback yang pantas.
Contoh jawapan yang mantap
"Saya akan memastikan Workload controller mencipta PodGroup dalam namespace yang sama dengan dasar gang dan minCount bersamaan dengan pekerja minimum yang diperlukan untuk membuat kemajuan. Pod merujuknya melalui medan schedulingGroup yang immutable. Controller mencipta kumpulan terlebih dahulu; rujukan yang belum selesai kekal Pending. Scheduler menilai sumber, topologi, dan keutamaan untuk semua ahli dan hanya mengikat (bind) apabila bilangan yang boleh dilaksanakan mencapai minCount. Autoscaler berskala daripada bentuk sumber kumpulan. Tarikh akhir membatalkan seluruh kumpulan dan melepaskan kapasiti; larian latihan yang gagal mendapat generasi baharu yang dipulihkan daripada checkpoint. Manifas deployment secara eksplisit merekodkan v1.35 alpha dan GenericWorkload, dan pelancaran bermula dalam kluster yang terpencil."
Mod kegagalan lazim
- Memanggil
basicsebagai semua-atau-tiada (all-or-nothing) walaupun ahlinya boleh dijadualkan secara berasingan. - Hanya menggunakan label tanpa menerangkan rujukan PodGroup namespace yang sama dan medan yang immutable.
- Mengabaikan kumpulan yang hilang, peningkatan skala, tarikh akhir, preemption, atau generasi percubaan semula.
- Meninggalkan status alpha dan feature gate
GenericWorkload. - Membincangkan pengikatan yang berjaya tanpa pembatalan peringkat kumpulan dan metrik.
Hala tuju susulan
Bagaimana jika PodGroup dicipta selepas Pod?
Pod kekal Pending, dan scheduler mempertimbangkannya semula selepas PodGroup dicipta. Controller masih perlu mencipta kumpulan terlebih dahulu untuk memendekkan tempoh menunggu ini.
Bagaimanakah anda memilih minCount?
Gunakan keselarian berguna minimum aplikasi, sumber per-Pod, dan masa giliran yang boleh diterima, kemudian kuat kuasakan kuota dan had atas.
Bagaimanakah anda mengelakkan kebuluran (starvation) gang?
Gabungkan baris gilir yang adil (fair queues), penuaan, had saiz kumpulan, kuota penyewa, dan pembatalan tarikh akhir sambil memantau masa menunggu kumpulan.
Apakah perbezaan ini dengan scheduling gates?
Gate mengawal apabila satu Pod memasuki baris gilir yang boleh dijadualkan. Scheduling Group membolehkan scheduler menilai satu set melalui PodGroup. Ia boleh digabungkan, tetapi metrik dan semantik kegagalannya harus dikekalkan secara berasingan.
Bilakah anda akan menangguhkan pelancaran?
Tangguhkan apabila versi kluster, feature gate, pemalam scheduler, atau autoscaler tidak serasi, atau apabila peningkatan versi alpha dan undur balik (rollback) belum diuji. Gunakan queue controller yang eksplisit sebagai reka bentuk interim.
Rujukan
- Dokumentasi Kubernetes: "Scheduling Group".
- Dokumentasi Kubernetes: "PodGroup Scheduling Policies".
- Dokumentasi Kubernetes: "Scheduling API Reference".