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

Container Service for Kubernetes:ack-co-scheduler コンポーネントを用いたコスケジューリングの有効化

最終更新日:Mar 07, 2026

ネイティブの Kubernetes スケジューラと比較して、Container Service for Kubernetes (ACK) スケジューラは、Gang スケジューリング、CPU トポロジー認識スケジューリング、ECI エラスティックスケジューリングなどの追加機能を提供します。本トピックでは、登録済みクラスターに ack-co-scheduler コンポーネントをインストールする方法について説明します。これにより、お客様が独自に管理する Kubernetes クラスターで ACK のスケジューリング機能を利用できるようになります。この機能を活用することで、ビッグデータや AI など、さまざまなアプリケーションのパフォーマンス向上を容易に実現できます。

前提条件

  • 登録済みクラスターを作成し、お客様が独自に管理する Kubernetes クラスターをそのクラスターに接続します。詳細については、「ACK One 登録済みクラスターの作成」をご参照ください。

  • システムコンポーネントは、以下の表に示すバージョン要件を満たしている必要があります。

    コンポーネント

    バージョン要件

    Kubernetes

    1.18.8 以降

    Helm

    3.0 以降

    Docker

    19.03.5

    オペレーティングシステム

    CentOS 7.6、CentOS 7.7、Ubuntu 16.04、Ubuntu 18.04、Alibaba Cloud Linux

注意事項

ジョブをデプロイする際には、.template.spec.schedulerNameack-co-scheduler に設定して、スケジューラ名を `ack-co-scheduler` として指定する必要があります。

ack-co-scheduler コンポーネントのインストール

onectl を使用したインストール

  1. オンプレミス環境のマシンに onectl をインストールします。詳細については、「onectl を使用した登録済みクラスターの管理」をご参照ください。

  2. 以下のコマンドを実行して、ack-co-scheduler コンポーネントをインストールします。

    onectl addon install ack-co-scheduler

    期待される出力例:

    Addon ack-co-scheduler, version **** installed.

コンソールを使用したインストール

  1. Container Service Management Console にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。

  3. アドオン管理 ページで、その他 タブをクリックします。ack-co-scheduler コンポーネントを見つけ、カードの右下にある インストール をクリックします。

  4. 確認ダイアログボックスで、OK をクリックします。

Gang スケジューリング

ACK では、新しい Kube-scheduler フレームワークに基づいて Gang スケジューリングを実装しており、ネイティブのスケジューラがサポートできない「すべてまたは何もなし(all-or-nothing)」のジョブスケジューリング問題を解決します。

以下のテンプレートを使用して、TensorFlow 分散ジョブをクラスターに送信します。分散 TensorFlow ジョブの実行に関する詳細については、「Gang スケジューリングの使用」をご参照ください。

apiVersion: "kubeflow.org/v1"
kind: "TFJob"
metadata:
  name: "tf-smoke-gpu"
spec:
  tfReplicaSpecs:
    PS:
      replicas: 1
      template:
        metadata:
          creationTimestamp: null
          labels:
            pod-group.scheduling.sigs.k8s.io/name: tf-smoke-gpu
            pod-group.scheduling.sigs.k8s.io/min-available: "2"
        spec:
          schedulerName: ack-co-scheduler   # スケジューラ名を ack-co-scheduler に設定します。
          containers:
          - args:
            - python
            - tf_cnn_benchmarks.py
            - --batch_size=32
            - --model=resnet50
            - --variable_update=parameter_server
            - --flush_stdout=true
            - --num_gpus=1
            - --local_parameter_device=cpu
            - --device=cpu
            - --data_format=NHWC
            image: registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3
            name: tensorflow
            ports:
            - containerPort: 2222
              name: tfjob-port
            resources:
              limits:
                cpu: '10'
            workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
          restartPolicy: OnFailure
    Worker:
      replicas: 4
      template:
        metadata:
          creationTimestamp: null
          labels:
            pod-group.scheduling.sigs.k8s.io/name: tf-smoke-gpu
            pod-group.scheduling.sigs.k8s.io/min-available: "2"
        spec:
          schedulerName: ack-co-scheduler
          containers:
          - args:
            - python
            - tf_cnn_benchmarks.py
            - --batch_size=32
            - --model=resnet50
            - --variable_update=parameter_server
            - --flush_stdout=true
            - --num_gpus=1
            - --local_parameter_device=cpu
            - --device=gpu
            - --data_format=NHWC
            image: registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3
            name: tensorflow
            ports:
            - containerPort: 2222
              name: tfjob-port
            resources:
              limits:
                cpu: 10
            workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
          restartPolicy: OnFailure

CPU トポロジー認識スケジューリング

CPU トポロジー認識スケジューリングを使用する前に、resource-controller コンポーネントをデプロイしてください。詳細については、「アドオンの管理」をご参照ください。

以下のテンプレートを使用して、デプロイメントで CPU トポロジー認識スケジューリングを有効化します。CPU トポロジー認識スケジューリングに関する詳細については、「CPU トポロジー認識スケジューリングの有効化」をご参照ください。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-numa
  labels:
    app: nginx-numa
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-numa
  template:
    metadata:
      annotations:
        cpuset-scheduler: "true"
      labels:
        app: nginx-numa
    spec:
      schedulerName: ack-co-scheduler # スケジューラ名を ack-co-scheduler に設定します。
      containers:
      - name: nginx-numa
        image: nginx:1.13.3
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 4
          limits:
            cpu: 4

ECI エラスティックスケジューリング

ECI エラスティックスケジューリングは、Alibaba Cloud が提供するエラスティックなスケジューリングポリシーです。サービスをデプロイする際に、アノテーションを追加することで、ECS リソースのみを使用する、ECI リソースのみを使用する、または ECS リソースが不足した場合に自動的に ECI リソースを要求するといった制御が可能です。ECI エラスティックスケジューリングは、さまざまなワークロードシナリオにおける変動するエラスティックリソース需要に対応します。

ECI エラスティックスケジューリングを使用する前に、クラスターに ack-virtual-node コンポーネントをデプロイしてください。詳細については、「ACK での ECI の使用」をご参照ください。

以下のテンプレートを使用して、デプロイメントで ECI エラスティックスケジューリングを有効化します。ECI エラスティックスケジューリングの使用に関する詳細については、「ElasticResource を使用した ECI エラスティックスケジューリングの実装(非推奨)」をご参照ください。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx
      annotations:
        alibabacloud.com/burst-resource: eci # エラスティックリソースの種類を指定するアノテーションを追加します。
      labels:
        app: nginx
    spec:
      schedulerName: ack-co-scheduler # スケジューラ名を ack-co-scheduler に設定します。
      containers:
      - name: nginx
        image: nginx
        resources:
          limits:
            cpu: 2
          requests:
            cpu: 2

template.metadata 配下の Pod アノテーション alibabacloud.com/burst-resource を設定して、エラスティックリソースの種類を指定します。alibabacloud.com/burst-resource の指定可能な値は以下のとおりです。

  • このアノテーションを指定しない場合:クラスター内の既存の ECS リソースのみを使用します。

  • eci:クラスター内の ECS リソースが不足した場合に、ECI リソースを使用します。

  • eci_only:クラスター内の ECS リソースは一切使用せず、ECI リソースのみを使用します。

共有 GPU スケジューリング

共有 GPU スケジューリングの使用方法については、「共有 GPU スケジューリングコンポーネントの実行」「GPU リソースの監視および分離」「ノードプールを用いた共有 GPU の管理」をご参照ください。