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

Container Service for Kubernetes:ack-co-schedulerを使用したリソーススケジューリングの調整

最終更新日:Mar 09, 2025

Kubernetesスケジューラと比較して、Container Service for Kubernetes (ACK) が提供するスケジューラは、ギャングスケジューリング、トポロジ対応CPUスケジューリング、Elastic Container Instanceベースのスケジューリングなど、より多くの機能をサポートしています。 このトピックでは、登録済みクラスターにack-co-schedulerをインストールする方法と、ACKのスケジューリング機能を使用する方法について説明します。 ack-co-schedulerを使用すると、これらの機能をビッグデータアプリケーションやAIアプリケーションなどのさまざまなタイプのアプリケーションに適用して、リソースの使用率を向上させることができます。

前提条件

  • 登録済みクラスターが作成され、外部Kubernetesクラスターが登録済みクラスターに接続されます。 詳細については、「ACKコンソールでの登録済みクラスターの作成」をご参照ください。

  • 次の表に、必要なシステムコンポーネントのバージョンを示します。

    コンポーネント

    バージョン

    Kubernetes

    V1.18.8以降

    ヘルム

    ≥ 3.0

    Docker

    19.03.5

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

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

使用上の注意

ジョブをデプロイするときは、スケジューラの名前をack-co-schedulerに設定する必要があります。 これを行うには、. template.spec.schedulerNameack-co-schedulerに設定します。

ack-co-schedulerのインストール

onectlを使用してack-co-schedulerをインストールする

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

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

    onectl addon install ack-co-scheduler

    期待される出力:

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

ACKコンソールを使用してack-co-schedulerをインストールする

  1. ACKコンソールにログインして左側のナビゲーションウィンドウのクラスターをクリックします。

  2. クラスターページで、管理するクラスターの名前をクリックし、左側のナビゲーションウィンドウの操作 > アドオンを選択します。

  3. [アドオン] ページで、[その他] タブをクリックします。 ack-co-schedulerカードで、[インストール] をクリックします。

  4. 表示されたメッセージボックスで、[OK] をクリックします。

ギャングスケジューリング

ACKによって提供されるギャングスケジューリング機能は、新しいkube-schedulerフレームワークの上に開発されています。 この機能は、オールオアナッシングのシナリオでのジョブスケジューリングのソリューションを提供します。

次のテンプレートを使用して、ギャングスケジューリングが有効になっている分散TensorFlowトレーニングジョブをデプロイできます。 分散TensorFlowトレーニングジョブを実行する方法の詳細については、「ギャングスケジューリングでの作業」をご参照ください。

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   # Specify ack-co-scheduler as the 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スケジューリングを有効にする前に、リソースコントローラーをクラスターにインストールする必要があります。 詳細については、「コンポーネントの管理」をご参照ください。

次のテンプレートを使用して、トポロジ対応の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 # Specify ack-co-scheduler as the scheduler. 
      containers:
      - name: nginx-numa
        image: nginx:1.13.3
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 4
          limits:
            cpu: 4

Elastic Containerインスタンスベースのスケジューリング

Elastic Container Instanceベースのスケジューリングは、Alibaba Cloudがエラスティックリソーススケジューリングに提供するスケジューリングポリシーです。 注釈を追加して、アプリケーションを展開するときに使用するリソースを指定できます。 Elastic Compute Service (ECS) インスタンスまたはelastic containerインスタンスのみを使用するように指定するか、ECSリソースが不足している場合にシステムがelastic containerインスタンスを要求できるようにすることができます。 Elastic Container Instanceベースのスケジューリングは、さまざまなワークロードシナリオでリソース要件を満たすことができます。

Elastic Containerインスタンスベースのスケジューリングを有効にする前に、クラスターにack-virtual-nodeをインストールする必要があります。 詳細については、「ACKクラスターでのElastic Container Instanceの使用」をご参照ください。

次のテンプレートを使用して、Elastic Container Instanceベースのスケジューリングが有効になっているデプロイを作成できます。 Elastic Container Instanceベースのスケジューリングの使用方法の詳細については、「Elastic Container Instanceベースのスケジューリングの使用」をご参照ください。

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 # Specify the type of resource that you want to use for elastic scheduling. 
      labels:
        app: nginx
    spec:
      schedulerName: ack-co-scheduler # Specify ack-co-scheduler as the scheduler. 
      containers:
      - name: nginx
        image: nginx
        resources:
          limits:
            cpu: 2
          requests:
            cpu: 2

注釈alibabacloud.com/burst-resourceをテンプレートに追加します。 ポッド構成のメタデータセクションを使用して、使用するリソースの種類を指定します。 alibabacloud.com/burst-resourceの有効な値:

  • 値を指定しない場合、クラスター内の既存のECSリソースのみが使用されます。 デフォルト設定です。

  • eci: クラスター内のECSリソースが不足している場合、Elasticコンテナインスタンスが使用されます。

  • ec_only: エラスティックコンテナインスタンスのみが使用されます。 クラスター内のECSリソースは使用されません。

cGPUの使用

cGPUの使用方法の詳細については、「cGPUの使用」、「GPUリソースの監視と分離」、および「ノードプールを使用してcGPUを制御する」をご参照ください。