ack-koordinator アドオンの Koordinator Descheduler は、不適切に実行されている Pod を別のノードに再スケジュールできるデスケジューリング機能を提供し、Kubernetes Descheduler コミュニティの Descheduling Framework を拡張してエビクション制御を強化します。Koordinator Descheduler は Kubernetes Descheduler ポリシーと互換性があります。
事前準備
Kubernetes Descheduler の機能、API 属性、ポリシー構成 (システム、テンプレート、ポリシープラグイン、evictor プラグイン) について理解してから、Koordinator Descheduler と比較してください。
Koordinator Descheduler と Kubernetes Descheduler の関係
バージョン 0.25.0 より前、Kubernetes Descheduler コミュニティは Descheduling Framework を提案しました。これは、プラグインベースのアプローチでデスケジューリングのライフサイクルを管理するもので、2 つの目標がありました。
-
デスケジューリングポリシーと Pod エビクションロジックをプラグインに変換し、柔軟性を高める。
-
プラグインのロード、実行、デスケジューリングライフサイクル管理をサポートするランタイムを実装する。
Kubernetes Descheduler 0.26.0 において、Koordinator Descheduler v1.2.0 はすべてのポリシーと DefaultEvictor プラグインを統合し、MigrationController evictor を追加しました。
機能の違い
Koordinator Descheduler は、ほとんどの Kubernetes Descheduler のユースケースと互換性がありますが、構成方法、デスケジューリングポリシー、evictor、エビクション制御において違いがあります。
-
Koordinator Descheduler は、Kubernetes Descheduler より前に Descheduling Framework の開発を開始し、異なる構成 API である
v1alpha2/DeschedulerConfigurationを使用しています。 -
Koordinator Descheduler は、実際のノード使用率に基づくホットスポットを意識したデスケジューリング用の LowNodeLoad ポリシープラグインを追加しており、リソース割り当て率を使用するネイティブの LowNodeUtilization プラグインよりも正確な結果を提供します。詳細については、「ホットスポットを意識したデスケジューリングの使用」をご参照ください。
-
Koordinator Descheduler は
MigrationControllerevictor を追加しています。MigrationControllerは、より安全で広範なエビクション制御を提供します。詳細については、「Evictor プラグイン構成」をご参照ください。
構成例
以下の例では、RemovePodsViolatingNodeTaints ポリシー (RemovePodsViolatingNodeTaints) を使用して、Kubernetes Descheduler と Koordinator Descheduler の構成形式を比較します。構成バージョンは apiVersion フィールドと kind フィールドで定義されます。
|
構成バージョン |
Kubernetes Descheduler (v1alpha1) |
Kubernetes Descheduler (v1alpha2) |
[Koordinator Descheduler] |
|
コンポーネントバージョン |
すべてのバージョン |
v0.27.0 以降 |
すべてのバージョン |
|
|
|
|
|
|
|
|
|
|
-
Kubernetes Descheduler の構成例
-
v0.27.0 より前のバージョンでは、構成バージョンは
descheduler/v1alpha1/DeschedulerPolicyです。# API 属性 apiVersion: "descheduler/v1alpha1" kind: "DeschedulerPolicy" # システム構成 nodeSelector: "node=node1" maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # エビクション構成。他の 2 つの構成 API では、これらのパラメーターは evictor プラグイン構成の一部です。 evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false # ポリシー構成。他の 2 つの API では、これらはデスケジューリングテンプレートとして提供され、プラグインの有効化とパラメーター設定に分割されます。 strategies: "RemovePodsViolatingNodeTaints": enabled: true params: nodeFit: true # nodeFit パラメーターは各ポリシーで有効にする必要があります。他の 2 つの API では、nodeFit は evictor プラグイン構成の一部です。 excludedTaints: - deschedule=not-allow # Taint のキーが "deschedule" で値が "not-allow" のノードを無視します。 -
v0.27.0 以降では、構成バージョンは
descheduler/v1alpha2/DeschedulerPolicyです。# API 属性 apiVersion: "descheduler/v1alpha2" kind: "DeschedulerPolicy" # システム構成 nodeSelector: "node=node1" maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # システム構成の終了 # デスケジューリングテンプレートのリスト profiles: - name: kubernetes-descheduler # デスケジューリングテンプレートの名前を指定します。 # テンプレート構成 plugins: deschedule: enabled: - "RemovePodsViolatingNodeTaints" # `enabled` フィールドのデータ型は文字列のリストです。 balance: disabled: - "*" # テンプレート構成の終了 # プラグイン構成のリスト pluginConfig: # RemovePodsViolatingNodeTaints ポリシープラグインの構成 - name: RemovePodsViolatingNodeTaints # ノード Taint 検証プラグインの構成 args: excludedTaints: - deschedule=not-allow # Taint のキーが "deschedule" で値が "not-allow" のノードを無視します。 # DefaultEvictor evictor プラグインの構成 - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # nodeFit パラメーターは evictor プラグイン構成の一部です。
-
-
Koordinator Descheduler の構成例
構成バージョンは
descheduler/v1alpha2/DeschedulerConfigurationです。# API 属性 apiVersion: descheduler/v1alpha2 kind: DeschedulerConfiguration # システム構成 dryRun: false deschedulingInterval: 120s nodeSelector: node: node1 # nodeSelector のデータ型は、他の 2 つの構成 API とは異なります。 maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # システム構成の終了 # デスケジューリングテンプレートのリスト profiles: - name: koord-descheduler # テンプレート構成 plugins: deschedule: enabled: - name: RemovePodsViolatingNodeTaints # `enabled` フィールドのデータ型は構造体のリストです。 balance: disabled: - name: "*" evict: # `evict` フィールドを使用して、使用する evictor を指定します。 enabled: - name: MigrationController # MigrationController はデフォルトで有効です。 # - name: DefaultEvictor # オプション: DefaultEvictor filter: # `filter` フィールドを使用して、使用するエビクションフィルターを指定します。 enabled: - name: MigrationController # MigrationController はデフォルトで有効です。 # - name: DefaultEvictor # オプション: DefaultEvictor # テンプレート構成の終了 # プラグイン構成のリスト pluginConfig: # RemovePodsViolatingNodeTaints ポリシープラグインの構成 - name: RemovePodsViolatingNodeTaints # ノード Taint 検証プラグインの構成 args: excludedTaints: - deschedule=not-allow # Taint のキーが "deschedule" で値が "not-allow" のノードを無視します。 # DefaultEvictor evictor プラグインの構成 - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # nodeFit パラメーターは evictor プラグイン構成の一部です。
これらの例は、構成バージョンの違いのみを対象としています。パラメーターの詳細については、「システム構成」、「テンプレート構成」、「ポリシープラグイン構成」、「Evictor プラグイン構成」をご参照ください。
システム構成の違い
-
Kubernetes Descheduler のシステム構成 (トップレベル構成) は、
nodeSelector、maxNoOfPodsToEvictPerNode、maxNoOfPodsToEvictPerNamespaceのみをサポートします。Koordinator Descheduler はdryRunとdeschedulingIntervalを追加しています。 -
Kubernetes Descheduler の
v1alpha1/DeschedulerPolicyAPI では、Pod のエビクションパラメーターはシステム構成の一部です。他の 2 つの API では、evictor プラグインのargsフィールドに含まれています。 -
Koordinator Descheduler の
v1alpha2/DeschedulerConfigurationAPI では、nodeSelectorのデータ型が他の 2 つの API とわずかに異なります。詳細については、「システム構成」をご参照ください。
テンプレート構成の違い
-
Kubernetes Descheduler の
v1alpha1/DeschedulerPolicyはデスケジューリングテンプレートをサポートしていないため、構成形式が Koordinator Descheduler と大きく異なります。 -
Kubernetes Descheduler の
v1alpha2/DeschedulerPolicyと Koordinator Descheduler のv1alpha2/DeschedulerConfigurationは、どちらもデスケジューリングテンプレートを使用するため似ています。データ型と evictor プラグインの有効化方法が異なります。-
v1alpha2/DeschedulerPolicyは文字列のリストを使用してプラグインを有効化または無効化しますが、v1alpha2/DeschedulerConfigurationはpluginsフィールドで構造体のリストを使用します。 -
v1alpha2/DeschedulerPolicyは DefaultEvictor のみをサポートします (自動有効化)。v1alpha2/DeschedulerConfigurationは MigrationController と DefaultEvictor の両方をサポートしており、DefaultEvictor の動作はコミュニティバージョンと一致します。evictor はevictおよびfilterテンプレートフィールドで指定します。
-
ポリシープラグイン構成の違い
Koordinator Descheduler は Kubernetes Descheduler 0.26.0 のすべてのポリシーをサポートしていますが、Koordinator Descheduler は後続バージョンで追加されたパラメーターをサポートしていません。以下の表に、Koordinator Descheduler がサポートしていないパラメーターの変更点を示します。
|
ポリシーパラメーターの変更 |
サンプルコード |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Evictor プラグイン構成の違い
Koordinator Descheduler は、Kubernetes Descheduler 0.26.0 の DefaultEvictor をサポートしています。Kubernetes Descheduler の後続バージョンで DefaultEvictor に追加されたパラメーターは、Koordinator Descheduler ではサポートされていません。
DefaultEvictor
|
Evictor パラメーターの変更 |
例 |
|
|
|
MigrationController
Koordinator Descheduler は、複数のエビクション方法を可能にする MigrationController evictor プラグインもサポートしています。
Koordinator Descheduler への移行
Kubernetes Descheduler から Koordinator Descheduler に移行するには、以下のバージョン固有の手順に従ってください。
-
現在の Kubernetes Descheduler をアンインストールします。クラスター内で複数のデスケジューラを実行すると、予測不可能な競合状態が発生します。
-
「デスケジューリング機能を有効化する」に従って、Koordinator Descheduler をインストールおよび設定します。
-
システム構成の違いに基づいて、Koordinator Descheduler でシステムレベルの設定を構成します。
-
Koordinator Descheduler と互換性のあるデスケジューリングテンプレートを作成します。
-
Kubernetes Descheduler 0.26.0 以前を使用している場合、
v1alpha1/DeschedulerPolicyAPI のみがサポートされています。「テンプレート構成の違い」に基づいて構成を完了してください。 -
Kubernetes Descheduler 0.26.0 より後のバージョンを使用している場合は、使用している構成 API を確認してください。
-
API が
v1alpha1/DeschedulerPolicyの場合、テンプレート設定の違い に基づいて、Koordinator Descheduler と互換性のあるデスケジューリングテンプレートを作成してください。 -
API が
v1alpha2/DeschedulerPolicyの場合、Koordinator Descheduler の設定フィールドを テンプレート設定の差異 に基づいて変更します。
-
-
-
ポリシープラグイン設定の違いおよびEvictor プラグイン設定の違いに基づいて、Koordinator Descheduler のプラグインを設定します。
-
関連ドキュメント
-
ack-koordinator コンポーネントのインストールとデスケジューリングの有効化:「デスケジューリング機能の有効化」をご参照ください。
ConfigMapで、Koordinator Descheduler、スケジュール解除テンプレート、スケジュール解除ポリシープラグイン、およびevictorプラグインの高度なパラメーターを設定することもできます。 詳細については、「詳細パラメーターの設定」をご参照ください。
-
ack-koordinator コンポーネントの概要と変更ログ:「ack-koordinator (旧称 ack-slo-manager)」をご参照ください。