ACS クラスターには、すべての Pod にリソースを割り当てる組み込みの default-scheduler が含まれています。ギャングスケジューリングやトポロジーを考慮した配置など、複雑なスケジューリングポリシーを必要とする GPU-HPN ワークロードの場合、カスタムスケジューラ (例: Koordinator や Volcano) をデプロイし、ACS がそれを使用するように設定できます。
カスタムスケジューラは、GPU-HPN Pod のみにサポートされています。その他のすべてのコンピューティングタイプは通常の仮想ノードを使用し、カスタムスケジューラをサポートしていません。
前提条件
開始する前に、以下を確認してください。
コンピューティングタイプが High-Performance Network GPU (gpu-hpn) に設定された Pod
バージョン v2.12.0-acs.8 以降の acs-virtual-node アドオンがインストールされていること
カスタムスケジューラをサポートするバージョンの kube-scheduler コンポーネントがインストールされていること:
ACS クラスターバージョン 最小 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 以降
GPU-HPN Pod にカスタムスケジューラを使用する場合、各 Pod の spec.schedulerName フィールドを設定します。詳細については、「Pod のスケジューラを指定する」をご参照ください。注意事項
カスタムスケジューラを有効にすると、ACS が GPU-HPN Pod とノードを処理する方法が変わります。続行する前に、動作の違いを確認してください。
| 側面 | デフォルトスケジューラ (無効) | カスタムスケジューラ (有効) |
|---|---|---|
| Pod スケジューラ名 | カスタマイズ不可。Pod を送信すると、spec.schedulerName は default-scheduler に上書きされます。 | カスタマイズ可能。送信後も spec.schedulerName は保持され、任意の値に設定できます。 |
| Pod スケジューリングプロセス | ACS デフォルトスケジューラは、すべての Pod にリソースを割り当てます。 | ACS デフォルトスケジューラは、spec.schedulerName が default-scheduler である Pod のみを処理します。その他のすべての Pod は、カスタムスケジューラによって処理されます。 |
| GPU-HPN ノードラベルと Taint 制約 | ノードラベル、アノテーション、Taint の追加、変更、削除は、ACS の制約に従います。詳細については、「ノードラベルと Taint の管理」をご参照ください。 | ノードラベル、アノテーション、Taint の制約は適用されなくなります。 |
| Pod アフィニティスケジューリング制約 | アフィニティフィールド設定は、ACS の制約に従います。詳細については、「ノードアフィニティスケジューリング」をご参照ください。 | アフィニティフィールドの制約は適用されなくなります。 |
これらの変更は、GPU-HPN Pod とノードにのみ適用されます。その他のコンピューティングタイプはカスタムスケジューラをサポートしていません。
カスタムスケジューラのデプロイと設定
ステップ 1: カスタムスケジューラのデプロイ
ACS クラスターにカスタムスケジューラをデプロイします。必要な ServiceAccount および ClusterRoleBinding の設定を含む完全な例については、「Kubernetes ドキュメント」をご参照ください。
ステップ 2: ACS でカスタムスケジューラを有効にする
「ACS コンソール」にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、対象のクラスターの ID をクリックします。左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。
[アドオン]ページで、[Kube Scheduler]カードを見つけて、[設定]をクリックします。
ダイアログボックスで、[カスタムラベルおよびGPU-HPN ノード用スケジューラの有効化] を選択し、[OK] をクリックします。
ステップ 3: Pod のカスタムスケジューラを設定する
dep-with-koordinator.yamlという名前のファイルを次の内容で作成します。この Deployment は、Pod テンプレートにalibabacloud.com/compute-class: gpu-hpnを設定し、koord-schedulerをスケジューラとして割り当てます。koord-schedulerをステップ 1 で設定した名前に置き換えます。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-schedulerDeployment をクラスターに適用します。
kubectl apply -f dep-with-koordinator.yamlPod がカスタムスケジューラを使用していることを検証します。
kubectl get pod -lapp=dep-with-koordinator -o custom-columns=NAME:.metadata.name,schedulerName:.spec.schedulerName期待される出力:
NAME schedulerName dep-with-koordinator-xxxxx-xxxxx koord-scheduler
よくある質問
Pod がカスタムスケジューラで PVC を使用すると、「Insufficient attachable-volumes-xxx」エラーが発生するのはなぜですか?
一部のカスタムスケジューラでは、ノードの Container Storage Interface (CSI) Node オブジェクトが存在し、対応する CSI ドライバーの容量情報が報告されている必要があります。この条件が満たされない場合、デフォルトの Kubernetes スケジューラがこのケースを自動的に処理するにもかかわらず、スケジューラはリソース不足エラーを報告します。
特定の CSI ドライバーを無視するようにカスタムスケジューラを設定します。Volcano スケジューラの場合、起動時に --ignored-provisioners フラグを追加します。
# 複数のドライバーをコンマで区切ります。
--ignored-provisioners=povplugin.csi.alibabacloud.comクラスター内の CSI ドライバーと一致するようにドライバー名を調整してください。