すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ACK Kube Queue へのカスタムアドミッションチェックの追加

最終更新日:Jun 23, 2026

デフォルトでは、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 をチェックし、チェックがパスした後、admissionChecksstateReady にセットします。すべての 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 の statusadmissionChecks フィールド内の name に対応する AdmissionCheck 内の controllerName を調べることで、コントローラーは admissionChecks エントリをチェックする必要があるかどうかを判断できます。チェックが完了すると、コントローラーは結果に基づいて、QueueUnit の status 内の対応する admissionChecks エントリの statusReady または 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

      パラメーター

      タイプ

      説明

      controllerName

      string

      このアドミッションチェックを監視および処理するコントローラーの名前を指定します。

      parameters

      struct

      apiGroupkind、および name という 3 つの文字列フィールドで構成され、AdmissionCheck に関連付けられたパラメーターを記述する構造体型です。

    • カスタムチェックパラメーター

      AdmissionCheck リソースは `parameters` フィールドを使用して、カスタムパラメーターオブジェクトを参照します。コントローラーはこれらのパラメーターを読み取って、特定のチェックロジックを実行します。チェックごとに異なるパラメーターを使用することで、単一のコントローラーでさまざまな種類のチェックを実行できます。カスタムパラメーターの CRD をインストールし、CR を送信する必要があります。

  • キュー内の設定項目:

    AdmissionCheckController、AdmissionCheck、およびカスタムパラメーターをデプロイすると、クラスターはカスタムチェックを実行する準備が整います。その後、キューの設定に追加することで、特定のキューのカスタムチェックを有効にできます。

設定例

この例では、ProvisioningRequestAdmissionCheckController を使用して AdmissionCheck を設定する方法を示します。

1. ProvisioningRequestAdmissionCheck コントローラーの有効化

ProvisioningRequestAdmissionCheckController とは、ACK Kube Queue が提供するコントローラーで、ProvisioningRequest と連携して動作します。ACK Kube Queue の Helm チャートをインストールする際に、.Values.admissionCheckController.enabledtrue に設定することで、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 の controllerNameprovisioning-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

パラメーター

タイプ

説明

provisioningClassName

string

provisioningRequest が作成されると、これは provisioningRequestProvisioningClass フィールドにコピーされます。

parameters

map[string]string

provisioningRequest が作成されると、provisioningRequestParameters フィールドにコピーされます。

managedResources

[]string

QueueUnit にこのフィールドが含まれている場合、provisioningRequest が作成されます。それ以外の場合、その state は直接 Ready に設定されます。

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