Secara default, ACK Kube Queue hanya memeriksa kuota Max yang didefinisikan dalam ElasticQuotaTree. Setelah workload lolos pemeriksaan kuota, workload tersebut diproses oleh penjadwal. Jika Anda memerlukan logika validasi dequeue yang lebih kompleks, Anda dapat menggunakan mekanisme AdmissionCheck. AdmissionCheck adalah mekanisme eksternal yang dapat dipasang (pluggable) yang disediakan oleh ACK Kube Queue untuk memberikan validasi tambahan sebelum sebuah workload didequeue dari antrian, sehingga hanya workload yang memenuhi syarat yang dijadwalkan.
Cara kerja
Setelah AdmissionCheck ditambahkan ke kluster, ACK Kube Queue tidak langsung mengatur QueueUnit ke fase Dequeued setelah lolos pemeriksaan kuota. Sebagai gantinya, QueueUnit diatur ke fase Reserved, dan entri admissionChecks dengan status Pending ditambahkan ke bidang status QueueUnit.
apiVersion: scheduling.x-k8s.io/v1alpha1
kind: QueueUnit
metadata:
...
spec:
...
status:
admissionChecks:
- lastTransitionTime: "2025-01-17T01:46:58Z"
message: ""
name: sample-prov
state: Pending
lastUpdateTime: "2025-01-17T01:46:58Z"
message: Pencadangan sumber daya berhasil, menunggu pemeriksaan penerimaan siap
phase: Reserved
podState: {}
Setiap AdmissionCheckController memeriksa admissionChecks-nya masing-masing. Setelah pemeriksaan berhasil, controller tersebut mengatur state dalam admissionChecks menjadi Ready. Ketika semua AdmissionCheck berada dalam status Ready, QueueUnit masuk ke status Dequeued.
apiVersion: scheduling.x-k8s.io/v1alpha1
kind: QueueUnit
metadata:
...
spec:
...
status:
admissionChecks:
- lastTransitionTime: "2025-01-17T01:47:58Z"
message: Succeeded
name: sample-prov
state: Ready
lastUpdateTime: "2025-01-17T01:50:45Z"
message: Dequeued
phase: Dequeued
podState:
pending: 1
Konfigurasi AdmissionCheck
Rincian konfigurasi
Administrator harus mengonfigurasi komponen-komponen berikut di kluster.
-
Satu controller: AdmissionCheckController (ACController) kustom.
AdmissionCheckController adalah controller yang Anda kelola untuk melakukan pemeriksaan kustom. Dengan mendengarkan bidang
admissionChecksdistatusQueueUnit, controller dapat mengidentifikasi QueueUnit yang memerlukan pemeriksaan kustom. Controller menentukan apakah perlu memeriksa entriadmissionChecksdengan memverifikasi apakah nilaicontrollerNamedalam AdmissionCheck sesuai dengannamepada bidangadmissionChecksdistatusQueueUnit. Setelah pemeriksaan selesai, controller memperbaruistatusentriadmissionChecksyang sesuai distatusQueueUnit menjadiReadyatauRejectedberdasarkan hasilnya. -
Dua Custom Resource Definition (CRD):
-
AdmissionCheck
CRD ini diinstal secara otomatis bersama ACK Kube Queue. Untuk mendefinisikan logika pemeriksaan kustom, Anda membuat custom resource (CR) yang menentukan controller yang menangani pemeriksaan tersebut dan mereferensikan parameternya.
Contoh berikut menunjukkan manifes AdmissionCheck dan bidang-bidang yang tersedia.
apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: sample-prov spec: controllerName: provisioning-request-admission-controller parameters: apiGroup: kueue.x-k8s.io kind: ProvisioningRequestConfig name: prov-test-configParameter
Type
Deskripsi
controllerNamestring
Menentukan nama controller yang memantau dan memproses pemeriksaan admission ini.
parametersstruct
Jenis struct yang terdiri dari tiga bidang string
apiGroup,kind, danname, yang menjelaskan parameter yang terkait dengan AdmissionCheck. -
Parameter pemeriksaan kustom
Resource AdmissionCheck menggunakan bidang
parametersuntuk mereferensikan objek parameter kustom. Controller membaca parameter ini untuk menjalankan logika pemeriksaan tertentu. Dengan menggunakan parameter berbeda untuk setiap pemeriksaan, satu controller dapat melakukan berbagai jenis pemeriksaan. Anda harus menginstal CRD dan membuat CR untuk parameter kustom tersebut.
-
-
Item konfigurasi dalam antrian:
Setelah Anda men-deploy AdmissionCheckController, AdmissionCheck, dan parameter kustom, kluster Anda siap melakukan pemeriksaan kustom. Anda kemudian dapat mengaktifkan pemeriksaan kustom untuk antrian tertentu dengan menambahkannya ke konfigurasi antrian tersebut.
Contoh konfigurasi
Contoh ini menunjukkan cara mengonfigurasi AdmissionCheck menggunakan ProvisioningRequestAdmissionCheckController.
1. Aktifkan controller ProvisioningRequestAdmissionCheck
ProvisioningRequestAdmissionCheckController adalah controller yang disediakan oleh ACK Kube Queue yang bekerja dengan ProvisioningRequest. Anda dapat mengaktifkan ProvisioningRequestAdmissionCheck dengan mengatur .Values.admissionCheckController.enabled ke true saat menginstal Helm chart untuk ACK Kube Queue. Setelah diaktifkan, ProvisioningRequestAdmissionCheckController akan dideploy secara otomatis.
# Chart Url: https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ack-kube-queue-1.22.4.tgz
admissionCheckController:
enabled: true # Atur ke true untuk mengaktifkan ProvisioningRequestAdmissionCheck
image:
repository: acs/prevreq-controller
tag: v1.0.0-aliyun-d31082a1
burst: 50
controller:
defaultPreemptible: true
enableBlockingMode: false
enableStrictPriority: false
image:
repository: acs/kube-queue
tag: v0.11.1-aliyun-34b259af
queueGroupPlugin: elasticquota
resources:
# ...
2. Gunakan controller dalam AdmissionCheck
Untuk menggunakan ProvisioningRequestAdmissionCheckController, buat AdmissionCheck seperti pada contoh berikut dan atur controllerName AdmissionCheck menjadi provisioning-request-admission-controller.
apiVersion: kueue.x-k8s.io/v1beta1
kind: AdmissionCheck
metadata:
name: sample-prov
spec:
controllerName: provisioning-request-admission-controller
parameters:
apiGroup: kueue.x-k8s.io
kind: ProvisioningRequestConfig
name: prov-test-config
3. Definisikan parameter dengan ProvisioningRequestConfig
Controller ProvisioningRequestAdmissionCheck menggunakan ProvisioningRequestConfig untuk mendefinisikan parameter pemeriksaan kustom. Manifes berikut menunjukkan bidang-bidang yang tersedia.
apiVersion: kueue.x-k8s.io/v1beta1
kind: ProvisioningRequestConfig
metadata:
name: prov-test-config
spec:
provisioningClassName: atomic-scale-up.kubernetes.io
parameters:
managedResources:
- nvidia.com/gpu
|
Parameter |
Type |
Deskripsi |
|
|
string |
Saat |
|
|
map[string]string |
disalin ke bidang |
|
|
[]string |
Jika QueueUnit berisi bidang ini, |
4. Tambahkan AdmissionCheck ke antrian
Anda dapat menambahkan pemeriksaan ke konfigurasi antrian di bidang admissionChecks. Berikut adalah contohnya.
apiVersion: scheduling.x-k8s.io/v1alpha1
kind: Queue
metadata:
name: example-queue # Ganti dengan nama antrian tempat Anda ingin mengaktifkan AdmissionCheck
namespace: kube-queue
spec:
...
admissionChecks:
- name: sample-prov # Tentukan nama AdmissionCheck yang telah Anda buat sebelumnya
selector: # metav1.LabelSelector. Hanya QueueUnit yang sesuai dengan selector ini yang menjalani pemeriksaan kustom.
matchLabels:
app: gpu