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

Container Compute Service:カスタムスケジューラーの使用

最終更新日:Sep 17, 2026

Container Service for Kubernetes (ACK) クラスターには、デフォルトスケジューラーが組み込まれています。Pod をクラスターに送信すると、デフォルトで default-scheduler という名前のスケジューラーがリソースを割り当てます。特別なリソースタイプや複雑なスケジューリングポリシーに対応するために、ACK クラスターではカスタムスケジューラーを使用できます。このトピックでは、ACK クラスターでカスタムスケジューラーを使用する方法とその制約について説明します。

前提条件

  • acs-virtual-node コンポーネントがインストールされており、そのバージョンが v2.12.0-acs.8 以降であること。

  • kube-scheduler コンポーネントがインストールされており、そのバージョンが次の要件を満たしていること。

    ACK クラスターバージョン

    必須の kube-scheduler バージョン

    1.32 以降

    すべてのバージョンがサポートされています。

    1.31

    v1.31.0-aliyun-1.1.2 以降。

    1.30

    v1.30.3-aliyun-1.1.2 以降。

    1.28

    v1.28.9-aliyun-1.1.2 以降。

    kube-scheduler コンポーネントの Enable custom labels and schedulers for GPU-HPN nodes オプションは、最近のバージョンではデフォルトで有効になっています。詳細については、「kube-scheduler」をご参照ください。

    説明

    カスタムスケジューラを使用する場合、Pod に spec.schedulerName を設定する必要があります。詳細については、「Pod のスケジューラを指定する」をご参照ください。

操作手順

手順1:カスタムスケジューラーのデプロイ

クラスターにカスタムスケジューラーをデプロイします。詳細については、「Kubernetes ドキュメント」をご参照ください。

手順2:ACK スケジューラー設定の変更

  1. ACS コンソール にログインします。左側のナビゲーションペインで、クラスター をクリックします。

  2. クラスター ページで、管理するクラスターを見つけ、その ID をクリックします。クラスター詳細ページの左側のナビゲーションペインで、操作 > アドオン を選択します。

  3. [Add-ons] ページで、 [Kube Scheduler] カードを見つけ、 [Configuration] をクリックします。

  4. ダイアログボックスで [Enable custom labels and schedulers for GPU-HPN nodes] を選択し、 [OK] をクリックします。

    詳細については、「kube-scheduler」をご参照ください。
  5. 次の表に、このオプションが有効または無効になっている場合の Pod とノードへの影響の比較を示します。

    説明

    この機能は、GPU-HPN の Pod とノードにのみ適用されます。カスタムスケジューラーは他のコンピュートタイプではサポートされていません。

    デフォルトスケジューラー (無効)

    カスタムスケジューラー (有効)

    Pod スケジューラー名

    カスタマイズはサポートされていません。Pod の送信後、spec.schedulerName フィールドは default-scheduler で上書きされます。

    Pod の spec.schedulerName を任意の値に設定でき、送信後にこの値が変更されることはありません。

    Pod のスケジューリングプロセス

    デフォルトの ACK スケジューラーがすべての Pod のリソースを割り当てます。

    デフォルトの ACK スケジューラーは、spec.schedulerName が default-scheduler の Pod のみをスケジューリングします。カスタムスケジューラーは、他のすべての Pod のリソース割り当てを担当します。

    GPU-HPN ノードのラベル、アノテーション、Taint に対する制約

    ノードのラベル、アノテーション、Taint の追加、変更、削除には ACK の制約が適用されます。詳細については、「ノードのラベルと Taint の管理」をご参照ください。

    ノードのラベル、アノテーション、Taint の追加、変更、削除に ACK の制約は適用されなくなります。

    Pod アフィニティスケジューリングの制約

    アフィニティフィールドの設定には ACK の制約が適用されます。詳細については、「ノードアフィニティスケジューリング」をご参照ください。

    アフィニティフィールドの設定に ACK の制約は適用されなくなります。

手順3:Pod へのカスタムスケジューラーの割り当て

  1. 次の内容で dep-with-koordinator.yaml という名前のファイルを作成します。

    このファイルは Deployment アプリケーションを定義するもので、Pod テンプレートで koord-scheduler という名前のカスタムスケジューラーを指定します。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-with-koordinator
      labels:
        app: dep-with-koordinator
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: dep-with-koordinator
      template:
        metadata:
          labels:
            app: dep-with-koordinator
            # コンピュートクラスを gpu-hpn として指定します。カスタムスケジューラーは他のコンピュートタイプではサポートされていません。
            alibabacloud.com/compute-class: gpu-hpn
        spec:
          containers:
          - name: demo
            image: registry.cn-hangzhou-finance.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "infinity"
          restartPolicy: Always
          # 手順1でデプロイしたカスタムスケジューラーの名前を指定します。
          schedulerName: koord-scheduler
  2. Pod を ACK クラスターに送信します。

    kubectl apply -f dep-with-koordinator.yaml
  3. Pod の設定で schedulerName を確認します。

    kubectl get pod -lapp=dep-with-koordinator -o custom-columns=NAME:.metadata.name,schedulerName:.spec.schedulerName

    予想される出力:

    # Pod は koord-scheduler という名前のカスタムスケジューラーを指定します。
    NAME                               schedulerName
    dep-with-koordinator-xxxxx-xxxxx   koord-scheduler

よくある質問

PVC スケジューリングエラー:Insufficient attachable-volumes-xxx

この問題は、デフォルトの Kubernetes スケジューラーでは発生しません。これは、一部のカスタムスケジューラーが PersistentVolumeClaim (PVC) リソースを処理する際に、ノードの Container Storage Interface (CSI) Node オブジェクトが存在するか、対応する CSI ドライバーの容量情報が報告されていることを必要とするためです。ノードがこれらの条件を満たさない場合、スケジューラーはリソースが不足していると誤って判断することがあります。

これを解決するには、特定の CSI ドライバーを無視するようにスケジューラーを設定します。たとえば、Volcano スケジューラーを使用する場合、起動パラメーター --ignored-provisioners=${csi-driver-name} を追加できます。

# 複数のドライバーをコンマで区切って指定できます。
--ignored-provisioners=povplugin.csi.alibabacloud.com

使用している CSI ドライバーに基づいてパラメーターを調整してください。

リソース不足エラー:resource in cluster is overused または queue resource quota insufficient

この問題は、デフォルトの Kubernetes スケジューラーでは発生しません。一部のカスタムスケジューラーは、ephemeral-storage などの CPU やメモリ以外のリソースの容量値をミリ単位に変換するためです。仮想ノードはデフォルトで非常に大きな容量を報告するため、この変換によって 64 ビットの整数オーバーフローが発生する可能性があります。これにより、スケジューラーがノードまたはクラスターの残存容量を負の値として誤って計算し、リソース不足エラーがトリガーされます。この問題を解決するには、テクニカルサポートにチケットを起票してください。