スケジュール解除は、ノード上の削除ルールに一致するポッドを別のノードにスケジュールするプロセスです。 クラスターリソースの不平等によりホットスポットノードが存在したり、ノード属性の変更によりポッドが事前定義されたポリシーに基づいてスケジュールされなかったりするシナリオでは、スケジュール解除を使用してリソースの使用状況を最適化し、最適なノードにポッドをスケジュールできます。 これにより、クラスター内のワークロードの高可用性と効率が保証されます。
あなたが始める前に
スケジュール解除を使用する前に、次の項目に注意することを推奨します。
Kubernetesの公式ドキュメントを参照して、Kubernetes Schedulerの仕組みと、Kubernetesネイティブスケジューリングポリシーに関連する用語 (taints and tolerations、affinity and anti-affinityなど) をご覧ください。
ack-koordinatorのアーキテクチャと機能については、ack-koordinator (ack-slo-manager) を参照してください。
ノードのリソース使用量に基づいてポッドをスケジューリングする際に、Container Service for Kubernetes (ACK) が低負荷のノードに優先順位を付ける方法については、「負荷認識スケジューリングの使用」を参照してください。
このトピックを読むと、スケジュール解除に関する次の情報がわかります。
スケジューリング解除の使用シナリオ。
スケジュール解除のワークフロー。
スケジュール解除テンプレート、スケジュール解除とバランス解除ポリシー、DefaultEvictorおよびMigrationControllerのエビクターなど、スケジュール解除に関連する条件。
スケジュール解除が重要な理由
Kubernetes Schedulerは、現在のクラスターステータスに基づいてポッドを適切なノードにスケジュールします。 ただし、クラスターのステータスは常に変化します。 シナリオによっては、実行中のポッドを他のノードに移行する必要がある場合があります。 例:
クラスター内のワークロードは均等に分散されていません。 一部のノードは過負荷です。 その結果、これらのノードの性能が損なわれる。
クラスターの全体的なリソース使用率は低いです。 コストを節約するためにいくつかのノードを削除します。 これを行うには、まずこれらのノードのポッドを他のノードに移行する必要があります。
クラスターには多数のリソースフラグメントが含まれています。 その結果、ノードは、クラスタ内の総リソースが依然として十分である一方で、十分なアイドルリソースを有し得ない。 このシナリオでは、大量のリソースを要求するポッドはスケジュールされません。 これにより、クラスタリソースの費用がさらに増加します。
Taintまたはラベルは、ノードに追加またはノードから削除されます。 このシナリオでは、ノード上の一部のポッドがアフィニティルールと一致しなくなります。 これらのポッドは、類似性ルールがポッドと一致するノードに移行する必要があります。
例えば、アプリケーションは、異なる時間に変動する作業負荷を経験している。 ホットスポットノードは、ピーク時に存在する可能性があり、アプリケーションのサービス品質をさらに損なう。 この問題を解決するために、サービス品質を確保するために、スケジューリング解除機能で異常なポッドを削除してホットスポットノードの負荷を減らすことができます。
この目標を達成するために、ack-koordinatorはKoordinator Deschedulerという名前のスケジューリング解除モジュールを提供します。 Koordinator Deschedulerは、Kubernetes DeschedulerのDescheduling Frameworkに基づいて開発されました。 Kubernetes Deschedulerのすべてのスケジューリング解除ポリシーと互換性があります。 Koordinator Deschedulerは、スケジューリング解除ポリシー、ポッド削除方法、削除トラフィック制御、および削除プロセスの観点から、ポッドのスケジューリング解除も最適化します。 Koordinator DeschedulerとKubernetes Deschedulerの違いの詳細については、「Koordinator Descheduler and Kubernetes Descheduler」をご参照ください。
スケジュール解除ワークフロー
コーディネーターDeschedulerは定期的に働いています。 複数のスケジュール解除ポリシーを設定して、削除条件を満たすポッドをフィルタリング、チェック、および削除できます。 次の図は、Koordinator Deschedulerの動作を示しています。
スケジュール解除テンプレートを検索し、各テンプレートで有効になっているスケジュール解除ポリシーを順番に実行します。
ノード、ワークロード、ポッドに関する情報を取得します。
ポッドをDescheduleルールと一致させます。
削除ルールを満たすポッドをフィルタリング、チェック、ソートします。
スケジュール解除テンプレートで有効になっているポッドevictorは、ポッド削除要求を送信します。
スケジュール解除テンプレートを再度トラバースし、各テンプレートで有効になっているバランスポリシーを順番に実行します。 ワークフローは手順1に似ています。
次のセクションでは、スケジュール解除ワークフローで使用される用語について説明します。
スケジュール解除テンプレート
1つ以上のスケジュール解除テンプレートを設定して、さまざまなスケジュール解除要件を満たすことができます。 各テンプレートで使用するスケジューリング解除ポリシーとpod evictorを指定し、適用可能な範囲を設定し、特定の種類のポッドに対して各テンプレートで高度なパラメーターを設定できます。
スケジュール解除ポリシーを使用すると、シナリオごとに異なるポッド削除ポリシーを適用できます。 たとえば、異なる名前空間で異なるTTLを持つ期限切れのポッドを削除するには、複数のスケジュール解除テンプレートを設定し、各名前空間のポッドのTTLにしきい値を設定します。
スケジュール解除プロセス中、Koordinator Deschedulerはすべてのスケジュール解除テンプレートをトラバースし、各テンプレートでスケジュール解除ポリシーを実行します。 すべてのDescheduleポリシーが実行された後、Koordinator Deschedulerはテンプレートを再度トラバースし、各テンプレートでBalanceポリシーを実行します。
スケジュール解除ポリシー: スケジュール解除とバランス解除
スケジュール解除ポリシーは、DescheduleとBalanceの2つです。 スケジュール解除ポリシーは、追い出されるポッドを一致させるために使用されます。 スケジュール解除ポリシーの設定方法と各ポリシーでサポートされている機能の詳細については、「ポリシープラグインの設定」をご参照ください。
Deschedule: コーディネーターDeschedulerは、各ポッドを現在のスケジューリング制約と照合し、一致するポッドを順番に削除します。 たとえば、Koordinator Deschedulerは、ノードアフィニティまたはアンチアフィニティ規則に一致しないポッドを1つずつ削除します。
Balance: Koordinator Deschedulerは、クラスター内の特定のポッドまたはすべてのポッドの分布を最適化し、削除するポッドを決定します。 たとえば、Koordinator Deschedulerは、ノードのリソース使用率に基づいて、ホットスポットノードからポッドを削除します。
スケジュール解除ポリシーは互いに独立しています。 Koordinator Deschedulerは、各スケジューリング解除ポリシーを実行して、ポリシーの削除ルールに基づいてポッドを削除し、一致するポッドをフィルタリング、チェック、ソートします。 クラスター容量、リソース使用率、レプリカ数などの制約条件は、ポッドが削除ルールと照合されるときに考慮されます。 Koordinator Deschedulerは、退去するポッドを決定した後、ポッドを退去させるためのリクエストをpod evictorに送信します。
立ち退きと立ち退きの制御
Koordinator DeschedulerのEvictorsは、ポッドを追い出すために使用されます。 DefaultEvictorとMigrationControllerを使用できます。
DefaultEvictor: 基本的なポッドevictorで、削除するポッドの最大数を制限できます。 Kubernetes DeschedulerでDefaultEvictorを使用および設定するのと同じ方法で、DefaultEvictorを使用および設定できます。 詳細については、「DefaultEvictor」をご参照ください。
MigrationController: 安全な方法でポッドを削除および移行し、ポッドの削除をトレースできます。 パラメーターの詳細については、「evictorプラグインの設定」をご参照ください。
2つのエビクターの違いの詳細については、「比較」をご参照ください。
スケジューリング解除の有効化
ack-koordinatorコンポーネントをインストールしてスケジューリング解除を有効にする方法の詳細については、「スケジューリング解除機能の有効化」をご参照ください。
ConfigMapで、Koordinator Descheduler、スケジュール解除テンプレート、スケジュール解除ポリシープラグイン、およびevictorプラグインの高度なパラメーターを設定することもできます。 詳細については、「詳細パラメーターの設定」をご参照ください。
関連ドキュメント
Kubernetes Deschedulerを使用する場合は、Koordinator Deschedulerに移行することを推奨します。 違いの詳細とKoordinator Deschedulerへの移行方法については、「Koordinator DeschedulerとKubernetes Deschedulerの比較」をご参照ください。
スケジューリング解除機能は、ack-Koordinatorコンポーネントのkoordinator Deschedulerに基づいて開発されています。 ack-koordinatorコンポーネントを無料でインストールして使用できます。 ただし、このコンポーネントには特定のシナリオで料金が発生する場合があります。 詳細については、「課金ルール」をご参照ください。