デフォルトでは、ACK Kube Queue は ElasticQuotaTree で定義されているMax クォータのみをチェックします。ワークロードがクォータチェックに合格すると、スケジューラによって処理されます。より複雑なデキュー検証ロジックが必要な場合は、AdmissionCheck メカニズムを使用できます。AdmissionCheck は、ACK Kube Queue が提供する外部のプラグ可能なメカニズムで、ワークロードがキューからデキューされる前に追加の検証を行うことで、適格なワークロードのみがスケジュールされることを保証します。
仕組み
`AdmissionCheck` がクラスターに追加されると、`ACK Kube Queue` は、クォータチェックに合格した後、すぐに `QueueUnit` を Dequeued 位相に設定しません。代わりに、`QueueUnit` は Reserved 位相に設定され、`Pending` 状態の admissionChecks が `QueueUnit` の status フィールドに追加されます。
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: Reserved resources success, waiting admission checks to be ready
phase: Reserved
podState: {}
各 AdmissionCheckController は、それぞれの admissionChecks をチェックし、チェックがパスした後、admissionChecks の state を Ready にセットします。すべての AdmissionChecks が Ready ステートになると、QueueUnit は 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
AdmissionCheck の設定
設定の詳細
管理者は、クラスターに次のコンポーネントを設定する必要があります。
-
1つのコントローラー:カスタム AdmissionCheckController (ACController)。
`AdmissionCheckController` は、カスタムチェックを実行するためにユーザーがメンテナンスするコントローラーです。QueueUnit の
statusにあるadmissionChecksフィールドをリッスンすることで、コントローラーはカスタムチェックを必要とする QueueUnit を特定できます。QueueUnit のstatusのadmissionChecksフィールド内のnameに対応する AdmissionCheck 内のcontrollerNameを調べることで、コントローラーはadmissionChecksエントリをチェックする必要があるかどうかを判断できます。チェックが完了すると、コントローラーは結果に基づいて、QueueUnit のstatus内の対応するadmissionChecksエントリのstatusをReadyまたはRejectedに更新します。 -
2つのカスタムリソース定義 (CRD):
-
AdmissionCheck
この CRD は ACK Kube Queue とともに自動的にインストールされます。カスタムチェックロジックを定義するには、チェックを処理するコントローラーを指定し、そのパラメーターを参照するカスタムリソース (CR) を送信します。
次の例は、AdmissionCheck マニフェストとその利用可能なフィールドを示しています。
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パラメーター
タイプ
説明
controllerNamestring
このアドミッションチェックを監視および処理するコントローラーの名前を指定します。
parametersstruct
apiGroup、kind、およびnameという 3 つの文字列フィールドで構成され、AdmissionCheck に関連付けられたパラメーターを記述する構造体型です。 -
カスタムチェックパラメーター
AdmissionCheck リソースは `parameters` フィールドを使用して、カスタムパラメーターオブジェクトを参照します。コントローラーはこれらのパラメーターを読み取って、特定のチェックロジックを実行します。チェックごとに異なるパラメーターを使用することで、単一のコントローラーでさまざまな種類のチェックを実行できます。カスタムパラメーターの CRD をインストールし、CR を送信する必要があります。
-
-
キュー内の設定項目:
AdmissionCheckController、AdmissionCheck、およびカスタムパラメーターをデプロイすると、クラスターはカスタムチェックを実行する準備が整います。その後、キューの設定に追加することで、特定のキューのカスタムチェックを有効にできます。
設定例
この例では、ProvisioningRequestAdmissionCheckController を使用して AdmissionCheck を設定する方法を示します。
1. ProvisioningRequestAdmissionCheck コントローラーの有効化
ProvisioningRequestAdmissionCheckController とは、ACK Kube Queue が提供するコントローラーで、ProvisioningRequest と連携して動作します。ACK Kube Queue の Helm チャートをインストールする際に、.Values.admissionCheckController.enabled を true に設定することで、ProvisioningRequestAdmissionCheck を有効にできます。有効にすると、ProvisioningRequestAdmissionCheckController は自動的にデプロイされます。
# Chart Url: https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ack-kube-queue-1.22.4.tgz
admissionCheckController:
enabled: true # true に設定して 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. AdmissionCheck でのコントローラーの使用
ProvisioningRequestAdmissionCheckController を使用するには、次の例に示すように AdmissionCheck を送信し、AdmissionCheck の controllerName を 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. ProvisioningRequestConfig によるパラメーターの定義
ProvisioningRequestAdmissionCheck コントローラーは、ProvisioningRequestConfig を使用してカスタムチェックパラメーターを定義します。次のマニフェストは、その利用可能なフィールドを示しています。
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
|
パラメーター |
タイプ |
説明 |
|
|
string |
|
|
|
map[string]string |
|
|
|
[]string |
QueueUnit にこのフィールドが含まれている場合、 |
4. キューへの AdmissionCheck の追加
キュー構成のadmissionChecksフィールドにチェックを追加できます。以下は例です。
apiVersion: scheduling.x-k8s.io/v1alpha1
kind: Queue
metadata:
name: example-queue # AdmissionCheck を有効にするキューの名前に置き換えてください
namespace: kube-queue
spec:
...
admissionChecks:
- name: sample-prov # 先に作成した AdmissionCheck の名前を指定します
selector: # metav1.LabelSelector です。このセレクターに一致する QueueUnit のみがカスタムチェックを受けます。
matchLabels:
app: gpu