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.schedulerNameをack-co-schedulerに設定します。
ack-co-schedulerのインストール
onectlを使用してack-co-schedulerをインストールする
オンプレミスマシンにonectlをインストールします。 詳細については、「onectlを使用した登録済みクラスターの管理」をご参照ください。
次のコマンドを実行して、ack-co-schedulerをインストールします。
onectl addon install ack-co-scheduler期待される出力:
Addon ack-co-scheduler, version **** installed.
ACKコンソールを使用してack-co-schedulerをインストールする
ACKコンソールにログインして左側のナビゲーションウィンドウのクラスターをクリックします。
クラスターページで、管理するクラスターの名前をクリックし、左側のナビゲーションウィンドウのを選択します。
[アドオン] ページで、[その他] タブをクリックします。 ack-co-schedulerカードで、[インストール] をクリックします。
表示されたメッセージボックスで、[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: 4Elastic 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を制御する」をご参照ください。