Container Service for Kubernetes (ACK) は、ジョブ、トポロジー対応、QoS 対応、およびデスケジューリングのポリシーにより、Kubernetes のスケジューリング機能を拡張します。
事前準備
-
役割とビジネスシナリオに基づいてスケジューリングポリシーを選択してください。
-
運用保守エンジニアは、クラスターコストとリソース使用率の最大化、クラスターの高可用性の確保、ノード負荷の分散、単一障害点の回避に重点を置きます。
-
アプリケーション開発者は、アプリケーションのシンプルなデプロイと管理、およびアプリケーションのパフォーマンスを確保するための、CPU、GPU、メモリなどの十分なリソースを必要とします。
-
-
ACK のスケジューリングポリシーを効果的に使用するには、Kubernetes スケジューラ、ノードラベル、ノードプレッシャーエビクション、Pod トポロジー分布制約 について学習してください。
ACK スケジューラは、フィルターおよびスコアプラグインで構成される、オープンソースの Kubernetes スケジューラと同じデフォルトポリシーを使用します。
Kubernetes ネイティブのスケジューリングポリシー
Kubernetes ネイティブのスケジューリングポリシーは、ノードスケジューリングと Pod 間スケジューリングの 2 つのカテゴリに分類されます。
-
ノードスケジューリングポリシー:特定の特性とリソース条件に一致するノードに Pod をスケジュールします。
-
Pod 間スケジューリングポリシー:デプロイを最適化し、アプリケーションの高可用性を確保するために Pod の分散を制御します。
|
ポリシー |
説明 |
シナリオ |
|
ノードにキーと値のペアのラベルを付け、 例:特定のノードに Pod をスケジュールまたは特定のノードプールに Pod をスケジュール。 |
基本的なノード選択方法であり、ソフトスケジューリングルールなどのより複雑なスケジューリング機能はサポートしていません。 |
|
|
|
リージョン、デバイスタイプ、ハードウェアなどの特定の特性を持つノードに Pod をスケジュールします。アンチアフィニティルールは、Pod をノード全体に分散させます。 |
|
|
|
|
|
|
Pod のラベルが、Pod からノードへのスケジューリングを決定します。 |
|
ACK スケジューリングポリシー
ACK は、逆順スケールインを伴う順序付きスケールアウトや、ノードの実際のリソース使用状況に基づく負荷認識スケジューリングなどの要件に対応するため、Kubernetes のスケジューリング機能を拡張しています。
優先度ベースのリソーススケジューリング
-
対象ロール:クラスター運用保守エンジニア。
-
説明:Elastic Compute Service (ECS) インスタンスや Elastic Container Instance などの混合インスタンスタイプ、およびサブスクリプション、従量課金、プリエンプティブルインスタンスなどの課金方法を使用するクラスターの場合、優先度ベースのリソーススケジューリングを設定して、Pod スケジューリングのノード選択順序を定義し、スケールイン時にはその逆順にします。
|
ポリシー |
説明 |
シナリオ |
参照 |
|
カスタム優先度ベースのリソーススケジューリング |
リリースまたはスケーリング時にカスタム スケールインではこの順序が逆になり、Elastic Container Instance、従量課金 ECS インスタンス、サブスクリプション ECS インスタンスの順になります。 |
|
ジョブスケジューリング
-
対象ロール:クラスター運用保守エンジニア。
-
説明:デフォルトのスケジューラは、バッチジョブのスケジューリングには適していません。ACK は、バッチジョブ用のギャングスケジューリングとキャパシティスケジューリングをサポートしています。
|
ポリシー |
説明 |
シナリオ |
参照 |
|
ギャングスケジューリング |
関連するすべての Pod が一緒にスケジュールされるか、まったくスケジュールされないかのいずれかであり、異常なプロセスがグループをブロックするのを防ぎます。 |
|
|
|
キャパシティスケジューリング |
特定の Namespace またはユーザーグループのリソースを予約し、クラスターリソースが限られている場合にリソース共有によって使用率を向上させます。 |
マルチテナントクラスターでは、リソースのライフサイクルと使用パターンが多様であるため、使用率が低くなります。リソースの共有と回収により、全体的な使用率が向上します。 |
トポロジー対応スケジューリング
-
対象ロール:クラスター運用保守エンジニア。
-
説明:機械学習とビッグデータのワークロードには、Pod 間の集中的な通信が必要ですが、デフォルトのスケジューラは Pod をクラスター全体に均等に分散させるため、ジョブの完了時間が延長されます。ネイティブのアフィニティメカニズムでは、複数のトポロジードメインにわたって再試行できません。
|
説明 |
シナリオ |
参照 |
|
スケジューラは、ギャングスケジューリングラベルを使用して、すべての Pod リソース要求が同時に満たされることを保証します。トポロジー対応スケジューリングは、トポロジードメインを反復処理して、すべての Pod 要件を満たすドメインを見つけます。 ノードプールを配置セットに関連付けて、同じ低遅延の配置セット内の ECS インスタンスに Pod をスケジュールし、ジョブのパフォーマンスを向上させます。 |
機械学習またはビッグデータジョブでは、Pod は頻繁に通信する必要があります。スケジューラは、トポロジードメインを反復処理して、すべての Pod 要件を満たすドメインを見つけ、ジョブ完了時間を短縮します。 |
負荷認識スケジューリング
-
対象ロール:クラスター運用保守エンジニアおよびアプリケーション開発者。
-
説明:ネイティブのスケジューラは、実際の使用状況ではなくリソース割り当てに基づいて Pod を割り当てます。ノード負荷はトラフィックとワークロードによって動的に変化するため、ネイティブのスケジューラはリアルタイムのリソース負荷を検出できません。
|
説明 |
シナリオ |
参照 |
|
ACK スケジューラは、ノード負荷履歴を監視し、新しい Pod のリソース使用量を推定して、低負荷ノードに Pod をスケジュールし、過負荷に起因するクラッシュを防ぎます。 |
負荷、アクセス遅延、またはリソース QoS に敏感なアプリケーション。 |
ノード負荷の不均衡を防ぐには、「負荷認識ホットスポットデスケジューリングの使用」をご参照ください。
QoS 対応スケジューリング
-
対象ロール:クラスター運用保守エンジニアおよびアプリケーション開発者。
-
説明:Kubernetes QoS クラス (Guaranteed、Burstable、BestEffort) は、ノードリソースが不足している場合の Pod 退去の優先順位を決定します。ACK は、SLO 対応スケジューリングを追加して、低優先度ジョブのリソースアクセスを確保しながら、レイテンシーに敏感なアプリケーションのパフォーマンスを向上させます。
|
ポリシー |
説明 |
シナリオ |
参照 |
|
CPU Burst |
OS は、サイクル内でコンテナの CPU 使用量をスロットリングする場合があります (CPU スロットリング)。CPU Burst により、アイドル状態のコンテナは CPU タイムスライスを蓄積し、需要が急増したときに CPU 制限を超えてバーストでき、パフォーマンスが向上し、遅延が削減されます。 |
|
|
|
トポロジー対応 CPU スケジューリング |
CPU に敏感な Pod を特定の CPU コアにピン留めして、頻繁なコンテキストスイッチやクロス NUMA メモリアクセスによるパフォーマンス低下を回避します。 |
|
|
|
トポロジー対応 GPU スケジューリング |
複数の GPU 集約型 Pod が同時に実行されると、GPU リソースを奪い合い、GPU または NUMA ノード間で切り替わり、パフォーマンスが低下する可能性があります。トポロジー対応 GPU スケジューリングは、ワークロードを特定の GPU に割り当て、クロス NUMA メモリアクセスを削減し、パフォーマンスを向上させます。 |
|
|
|
動的リソースオーバーコミット |
Pod に割り当てられているが使用されていないリソースを回収し、低優先度のジョブに割り当てることでオーバーコミットします。アプリケーションが互いに影響を与えないように、次の単一ノード QoS ポリシーを併用します。
|
コロケーションによりクラスターのリソース使用率を向上させます。典型的なシナリオには、ML モデルのトレーニングと推論、ビッグデータのバッチ処理と分析、オンラインサービス、オフラインバックアップなどがあります。 |
|
|
Pod のリソースパラメータの動的変更 |
Kubernetes 1.27 以前では、コンテナパラメータを変更するには、Pod を削除して再作成する必要があります。ACK では、Pod を再起動せずに CPU、メモリ、ディスクの IOPS 制限を変更できます。 |
一時的な CPU またはメモリリソースの調整。 |
デスケジューリング
-
対象ロール:クラスター運用保守エンジニアおよびアプリケーション開発者。
-
説明:クラスターの状態が変化すると、実行中の Pod をより適切なノードに移行する必要がある場合があります。
|
ポリシー |
説明 |
シナリオ |
参照 |
|
デスケジューリング |
リソース使用量の不均衡やノード属性の変更によりホットスポットが形成された場合、不適切に配置された Pod を最適なノードに再スケジュールし、ワークロードの高可用性と効率を確保します。 |
|
|
|
負荷認識ホットスポットデスケジューリングの使用 |
負荷認識スケジューリングとホットスポットデスケジューリングを組み合わせて、ノード負荷を監視し、負荷しきい値を超えたノードを自動的に再バランスします。 |
課金
ACK スケジューリングでは、課金ルール に基づいて、クラスター管理とクラウドリソースの料金が発生します。追加のスケジューリングコンポーネントに関する料金は次のとおりです。
-
デフォルトの ACK スケジューラ (kube-scheduler) は、インストールも使用も無料です。
-
ACK のリソーススケジューリングとデスケジューリングは、ack-koordinator に基づいています。ack-koordinator は、インストールも使用も無料ですが、特定のシナリオでは追加料金が発生する場合があります。詳細については、「ack-koordinator (旧 ack-slo-manager)」をご参照ください。
よくある質問
スケジューリングに関する問題については、「スケジューリングに関する FAQ」をご参照ください。
関連ドキュメント
-
kube-scheduler および ack-koordinator の概要とリリースノートについては、「Container Service for Kubernetes: kube-scheduler」および「ack-koordinator (旧 ack-slo-manager)」をご参照ください。
-
kube-scheduler の動作をカスタマイズするには、「スケジューラパラメータのカスタマイズ」をご参照ください。
-
コロケーションアーキテクチャなど、スケジューリングのベストプラクティスについては、「リソーススケジューリングのベストプラクティス」をご参照ください。
-
コスト分析を有効にして、ACK クラスターのリソース使用状況、コスト配分、節約に関する推奨事項を表示します。
-
GPU スケジューリングとメモリ分離については、「GPU 共有」をご参照ください。
-
仮想ノードスケジューリングについては、「仮想ノードへの Pod のスケジュール」をご参照ください。