ack-koordinator コンポーネントには、誤配置された Pod を他のノードに移動させるデスケジューリング機能を提供する Koordinator Descheduler モジュールが含まれています。Koordinator Descheduler は、Kubernetes Descheduler コミュニティが提案したデスケジューリングフレームワーク上に構築されており、Kubernetes Descheduler のポリシーと互換性を持ちながら、拡張機能も提供します。
事前準備
このトピックは Kubernetes Descheduler のユーザー向けです。ここでは、Koordinator Descheduler と Kubernetes Descheduler の関係を説明し、コンポーネントの移行に関するガイダンスを提供します。先に進む前に、Kubernetes Descheduler の機能、API 属性、およびポリシー構成(システム構成、テンプレート構成、ポリシープラグイン構成、エビクタープラグイン構成を含む)について理解している必要があります。
Koordinator Descheduler と Kubernetes Descheduler の関係
バージョン 0.25.0 のリリース以前に、Kubernetes Descheduler コミュニティは、プラグインベースのアプローチでデスケジューリングライフサイクルを管理するデスケジューリングフレームワークを提案しました。このフレームワークには、主に次の 2 つの目標があります。
既存のデスケジューリングポリシーおよび Pod エビクションロジックをプラグインに変換し、ポリシーの柔軟性を高める。
プラグインのロードおよび実行をサポートし、デスケジューリングライフサイクル全体を管理する実行環境を実装する。
Kubernetes Descheduler がバージョン 0.26.0 をリリースした後、Koordinator Descheduler v1.2.0 は Kubernetes Descheduler v0.26.0 からすべてのポリシーおよび DefaultEvictor プラグインを統合し、さらに追加のエビクタープラグインである MigrationController を導入しました。
機能の違い
Koordinator Descheduler は Kubernetes Descheduler のユースケースの大部分と互換性がありますが、構成方法、デスケジューリングポリシー、エビクター、およびエビクション制御機能においていくつかの相違点があります。主な違いは以下のとおりです。
Koordinator Descheduler は Kubernetes Descheduler よりも早くデスケジューリングフレームワークの開発を開始したため、異なる構成 API(
v1alpha2/DeschedulerConfiguration)を使用しています。Koordinator Descheduler は、LowNodeLoad ポリシープラグインを導入しており、ノードの実際の利用率に基づくホットスポット対応デスケジューリングを可能にします。ネイティブの Kubernetes Descheduler プラグインである LowNodeUtilization はリソース割り当て率に基づいてデスケジューリングを決定しますが、LowNodeLoad はノードの実際の利用率を使用するため、より正確な結果を提供します。LowNodeLoad プラグインの詳細については、「ホットスポット対応デスケジューリングの使用」をご参照ください。
Koordinator Descheduler は、
MigrationControllerエビクターを追加しています。MigrationControllerは、より安全で広範なエビクション制御機能を提供します。詳細については、「エビクタープラグイン構成」をご参照ください。
構成例
以下の例では、RemovePodsViolatingNodeTaints ポリシー(RemovePodsViolatingNodeTaints)を有効にして、Kubernetes Descheduler と Koordinator Descheduler の構成フォーマットを比較します。構成バージョンは apiVersion および kind フィールドによって定義されます。次の表は、各バージョンをどのコンポーネントがサポートしているかを示しています。
構成バージョン | Kubernetes Descheduler | Kubernetes Descheduler | 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 では、これらのパラメーターはエビクタープラグイン構成の一部です。 evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false # ポリシー構成。他の 2 つの API では、これらはデスケジューリングテンプレートとして提供され、プラグインの有効化とパラメーター設定に分割されます。 strategies: "RemovePodsViolatingNodeTaints": enabled: true params: nodeFit: true # nodeFit パラメーターは各ポリシーで有効にする必要があります。他の 2 つの API では、nodeFit はエビクタープラグイン構成の一部です。 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 エビクタープラグインの構成。 - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # nodeFit パラメーターはエビクタープラグイン構成の一部です。
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` フィールドを使用します。 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 エビクタープラグインの構成。 - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # nodeFit パラメーターはエビクタープラグイン構成の一部です。
上記の例は構成バージョン間の違いのみをハイライトしており、各パラメーターの詳細については説明していません。詳細については、「システム構成」、「テンプレート構成」、「ポリシープラグイン構成」、および「エビクタープラグイン構成」をご参照ください。
システム構成の違い
Kubernetes Descheduler のシステム構成(トップレベル構成)は、
nodeSelector、maxNoOfPodsToEvictPerNode、およびmaxNoOfPodsToEvictPerNamespaceパラメーターのみをサポートします。これに加えて、Koordinator Descheduler はシステム構成にdryRunおよびdeschedulingIntervalパラメーターを追加しています。Kubernetes Descheduler の
v1alpha1/DeschedulerPolicyAPI では、Pod エビクターパラメーターはシステム構成内で設定されます。他の 2 つの API では、これらのパラメーターはargsフィールド内のエビクタープラグイン構成で設定されます。Koordinator Descheduler の
v1alpha2/DeschedulerConfigurationAPI では、nodeSelectorのデータの型が他の 2 つの API とわずかに異なります。詳細については、「システム構成」をご参照ください。
テンプレート構成の違い
Kubernetes Descheduler の
v1alpha1/DeschedulerPolicy構成バージョンはデスケジューリングテンプレートをサポートしないため、その構成フォーマットは Koordinator Descheduler のフォーマットと大きく異なります。Kubernetes Descheduler の
v1alpha2/DeschedulerPolicy構成バージョンと Koordinator Descheduler のv1alpha2/DeschedulerConfigurationは、どちらもデスケジューリングテンプレート形式を使用しているため類似しています。違いは、テンプレート構成内のデータの型と、エビクタープラグインの有効化方法にあります。v1alpha2/DeschedulerPolicyは複数のプラグインを有効または無効にするために文字列のリストを使用しますが、v1alpha2/DeschedulerConfigurationはpluginsキーの下で構造体のリストを使用します。v1alpha2/DeschedulerPolicyは DefaultEvictor エビクタープラグインのみをサポートし、手動で有効にする必要はありません。v1alpha2/DeschedulerConfigurationは MigrationController および DefaultEvictor の両方のエビクタープラグインをサポートし、DefaultEvictor の動作はコミュニティ版と一貫しています。テンプレート構成のevictおよびfilterフィールドで、どのエビクタープラグインを有効にするかを指定できます。
ポリシープラグイン構成の違い
Koordinator Descheduler は Kubernetes Descheduler 0.26.0 のすべてのデスケジューリングポリシーと互換性があります。ただし、Koordinator Descheduler は、Kubernetes Descheduler の 0.26.0 より後のバージョンでポリシープラグインに導入された新しい構成パラメーターをサポートしていません。次の表は、Koordinator Descheduler のデスケジューリングポリシーと、Kubernetes Descheduler の 0.26.0 より後のバージョンとの間で、構成パラメーターにどのような違いがあるかを示しています。
ポリシーパラメーターの変更 | サンプルコード |
| |
| |
| |
| |
| |
エビクタープラグイン構成の違い
Koordinator Descheduler は Kubernetes Descheduler バージョン 0.26.0 の DefaultEvictor Pod エビクターと互換性があります。ただし、Kubernetes Descheduler の 0.26.0 より後のバージョンで DefaultEvictor に追加された新しいパラメーターは、Koordinator Descheduler ではサポートされていません。
DefaultEvictor
エビクターパラメーターの変更 | 例 |
| |
MigrationController
Koordinator Descheduler は MigrationController エビクタープラグインもサポートしており、複数のエビクション方法を有効にします。詳細については、「MigrationController」をご参照ください。
Koordinator Descheduler への移行
Kubernetes Descheduler から Koordinator Descheduler へ移行するには、バージョンに応じた次の手順に従ってください。
まず、現在の Kubernetes Descheduler のインストールをアンインストールします。クラスター内で複数のデスケジューラーを同時に実行すると、予測不可能な競合状態が発生する可能性があります。
「デスケジューリング機能の有効化」の手順に従って、Koordinator Descheduler をインストールおよび構成します。
「システム構成の違い」を参照して、Koordinator Descheduler で必要なシステムレベルの構成を設定します。
Koordinator Descheduler と互換性のあるデスケジューリングテンプレートを作成します。
Kubernetes Descheduler 0.26.0 以前を使用している場合、
v1alpha1/DeschedulerPolicy構成 API のみがサポートされています。「テンプレート構成の違い」を参照して構成を完了してください。Kubernetes Descheduler の 0.26.0 より後のバージョンを使用している場合、使用している構成 API を確認します。
API が
v1alpha1/DeschedulerPolicyの場合、「テンプレート構成の違い」を参照して、Koordinator Descheduler と互換性のあるデスケジューリングテンプレートを作成します。API が
v1alpha2/DeschedulerPolicyの場合、「テンプレート構成の違い」を参照して、Koordinator Descheduler の関連構成フィールドを修正します。
「ポリシープラグイン構成の違い」および「エビクタープラグイン構成の違い」を参照して、Koordinator Descheduler で特定のプラグイン構成を設定します。
関連ドキュメント
Koordinator Descheduler、デスケジューリングテンプレート、デスケジューリングポリシープラグイン、およびエビクタープラグインの高度なパラメーターを ConfigMap で構成することもできます。詳細については、「高度なパラメーターの構成」をご参照ください。
ack-koordinator コンポーネントおよびそのチェンジログの詳細については、「ack-koordinator (ack-slo-manager)」をご参照ください。