Kubernetesクラスターでは、スケジューリングとは、kube-schedulerという名前のスケジューリングコンポーネントが、クラスターのリソース総量に基づいてPodをノードにスケジュールするプロセスのことを指します。Alibaba Cloud Container Compute Service (ACS) クラスターは、仮想ノードの形式でリソースを提供します。そのため、複雑なリソース割り当てポリシーを考慮する必要はありません。アプリケーションのオーケストレーションルールに集中できます。このトピックでは、ACSクラスターで一般的に使用されるスケジューリングポリシーの使用方法と注意事項について説明します。
Kubernetesネイティブスケジューリングポリシー
Kubernetesネイティブスケジューラーは、さまざまなスケジューリングプラグインを提供します。ACSの仮想ノードでは、アフィニティ関連のポリシーに焦点を当て、アプリケーションのパフォーマンスと高可用性を確保できます。これには、ゾーン全体にPodを分散するためのトポロジスプレッド制約、ノードアフィニティ、Pod間アフィニティの使用が含まれます。
ポリシー | 説明 | 参照 |
トポロジスプレッド制約を使用してゾーン全体にPodを分散する | TopologyKeyフィールドで仮想ノードのラベルを指定して、ワークロードをゾーン全体に分散できます。 | |
ノードアフィニティ | ラベルは仮想ノードに追加され、ゾーンなどのノードのさまざまな属性を示します。nodeSelectorなどのフィールドでアフィニティ要件を記述することにより、特定の属性を持つ仮想ノードでアプリケーションを実行できます。 | |
Pod間アフィニティ | このポリシーは、Pod間の親和性設定を表すために使用されます。ノードアフィニティと比較して、このポリシーは、ノードで既に実行されているPodのラベルに基づいて、Podをスケジュールできるノードを制限します。podAffinityなどのフィールドでアフィニティ要件を記述することにより、特定のトポロジドメインにPodをスケジュールできます。 |
カスタム優先順位に基づくリソーススケジューリング
ポリシー | 説明 | シナリオ | 参照 |
カスタム優先順位に基づくリソーススケジューリング | 作成するPodに対して、複数の計算クラスまたは計算QoSクラスを指定できます。リソースが不足している場合、スケジューラーは他のタイプのPodを作成しようとします。 | 特定の種類のアプリケーションの使用を優先します。たとえば、計算ジョブは、費用対効果の高いベストエフォートインスタンスを使用することを好む場合があります。 |
ジョブスケジューリング
Kubernetesクラスターでは、ジョブを実行するアプリケーションは、多様なリソース要件を持っています。たとえば、AIトレーニングジョブでは、Podのグループが同時にリソースを申請できる必要があります。多数のアプリケーションがデプロイされているクラスターでは、リソース容量管理も必要です。ACSは、ジョブを実行するアプリケーションに対して次のスケジューリングポリシーを提供します。
ポリシー | 説明 | シナリオ | 参照 |
ギャングスケジューリング | すべてのPodが同時にリソースを要求できるように、リソースはPodのグループにバッチとして割り当てられる必要があります。スケジューリング要件が満たされない場合、すべてのPodはPending状態のままになります。 | Message Passing Interface (MPI) ジョブなどの高性能コンピューティングおよびAIトレーニングジョブ。すべてのレプリカを起動した場合にのみ、アプリケーションを実行できます。 | |
キャパシティスケジューリング | このポリシーにより、ACSクラスターは特定の名前空間にリソース容量制限を課すことができます。 | 複数のユーザーまたはアプリケーションが同じクラスターを共有する場合、名前空間ごとにリソースの使用量を制限する必要があります。 |