ack-koordinatorコンポーネントは、Koordinator deschedulerという名前のデスケジューラーモジュールを提供します。 Deschedulerは、Kubernetes DeschedulerのDescheduling Frameworkに基づいて開発されました。 Kubernetes Deschedulerのすべてのスケジューリング解除ポリシーと互換性があります。 Koordinator Deschedulerは、ポッドのスケジューリング解除も最適化します。
あなたが始める前に
このトピックでは、Kubernetes Deschedulerユーザーを対象としており、Koordinator DeschedulerとKubernetes Deschedulerの間の相関関係について説明します。 このトピックを読む前に、システム構成、テンプレート構成、ポリシープラグイン構成、evictorプラグイン構成など、Kubernetes Deschedulerの機能、インターフェイス属性、ポリシーを確認することをお勧めします。
Koordinator DeschedulerとKubernetes Deschedulerの相関関係
Descheduling Frameworkは、Kubernetes Descheduler 0.25.0がリリースされる前に設計されました。 プラグインを使用して、スケジュール解除のライフサイクルを管理できます。 スケジュール解除フレームワークは、次の目標を達成するために開発されます。
既存のスケジュール解除ポリシーとポッドの削除ロジックに基づいてプラグインを提供し、スケジュール解除の柔軟性を向上させます。
プラグインをロードして実行し、スケジュール解除のライフサイクルを管理できるランタイム環境を構築します。
Kubernetes Descheduler 0.26.0がリリースされた後、Kubernetes DeschedulerとDefaultEvictor
が提供するスケジューリング解除ポリシーがKoordinator Descheduler v1.2で導入されました。
さらに、Koordinator Deschedulerは、MirgrationController
という名前のevictorプラグインを提供します。
特徴の違い
Koordinator Deschedulerは、Kubernetes Deschedulerのほとんどの使用シナリオに適用されます。 ただし、2つのデスケジューラには、設定方法、デスケジューリングポリシー、エビクター、およびエビクション制御機能が異なります。
KoordinatorDeschedulerによるDeschedulerFrameworkの開発は、KubenetesDeschedulerの前です。 したがって、Koordinator Deschedulerは、
v1alpha 2/DeschedulerConfiguration
という異なる設定インターフェイスを使用します。lowNodeLoadプラグインは、Koordinator Deschedulerで導入されました。 このデスケジューラープラグインは、各ノードの負荷を検知する役割を果たす。 KubernetesネイティブのデスケジューラープラグインLowNodeUtilizationは、ポッドを過剰利用ノードから過少利用ノードにデスケジュールします。 LowNodeLoadプラグインは、ノードの実際のリソース使用率に基づいてポッドのスケジュールを解除します。これはより正確です。 LowNodeLoadプラグインの詳細については、「負荷対応ホットスポットのスケジューリング解除」をご参照ください。
ポッドevictor
MigrationController
は、Koordinator Deschedulerで導入されました。MigrationController
は、セキュリティを向上させたより多くの削除制御機能を提供します。 詳細については、「evictorプラグインの設定」をご参照ください。
設定の比較
次の例では、RemovePodsViolatingNodeTaintsポリシーを有効にして、Kubernetes DeschedulerとKoordinator Deschedulerの設定を比較します。 apiVersion
とkind
パラメーターはバージョンを定義します。 次の表に、さまざまなバージョンでサポートされているコンポーネントを示します。
バージョン設定 | Kubernetes Descheduler | Kubernetes Descheduler | コーディネーターDescheduler |
コンポーネントバージョン | すべてのバージョン | v0.27.0以降 | すべてのバージョン |
|
|
|
|
|
|
|
|
Kubernetes Deschedulerサンプル設定
v0.27.0より前のバージョンでは、
descheduler/v1alpha /DeschedulerPolicy
バージョンが使用されます。objectLimiters: workload: duration: 5m maxMigrating: 1
v0.27.0以降のバージョンでは、
descheduler/v1alpha 2/DeschedulerPolicy
バージョンが使用されます。# Interface attributes. apiVersion: "descheduler/v1alpha2" kind: "DeschedulerPolicy" # System configurations. nodeSelector: "node=node1" maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # The preceding configurations are system configurations. # The template list. profiles: - name: kubernetes-descheduler # The name of the descheduling template. # Template configurations. plugins: deschedule: enabled: - "RemovePodsViolatingNodeTaints" # The enabled parameter is an array. balance: disabled: - "*" # The preceding configurations are template configurations. # The plug-in list. pluginConfig: # The configurations of the RemovePodsViolatingNodeTaints policy plug-in. - name: RemovePodsViolatingNodeTaints # The configurations of the node taint verification plug-in. args: excludedTaints: - deschedule=not-allow # Ignore nodes whose taint key is "deschedule" and taint value is "not-allow". #The configurations of the DefaultEvictor evictor plug-in. - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # nodeFit is an evictor plug-in parameter.
Koordinator Deschedulerのサンプル設定
descheduler/v1alpha 2/DeschedulerConfiguration
バージョンが使用されています。# Interface attributes. apiVersion: descheduler/v1alpha2 kind: DeschedulerConfiguration # System configurations. dryRun: false deschedulingInterval: 120s nodeSelector: node: node1 # The data type of the nodeSelector parameter differs from the other interfaces. maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # The preceding configurations are system configurations. # The template list. profiles: - name: koord-descheduler # Template configurations. plugins: deschedule: enabled: - name: RemovePodsViolatingNodeTaints # The enabled parameter is a structured list. balance: disabled: - name: "*" evict: # You can specify the evict parameter to use an evictor. enabled: - name: MigrationController # Enable MigrationController by default. # - name: DefaultEvictor # Specify DefaultEvictor. filter: # You can specify the filter parameter to use an eviction filtering policy. enabled: - name: MigrationController # Enable MigrationController by default. # - name: DefaultEvictor # Specify DefaultEvictor. # The preceding configurations are template configurations. # The plug-in list. pluginConfig: # The configurations of the RemovePodsViolatingNodeTaints policy plug-in. - name: RemovePodsViolatingNodeTaints # The configurations of the node taint verification plug-in. args: excludedTaints: - deschedule=not-allow # Ignore nodes whose taint key is "deschedule" and taint value is "not-allow". #The configurations of the DefaultEvictor evictor plug-in. - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # nodeFit is an evictor plug-in parameter.
次のサンプル設定では、異なるバージョン間の違いのみを示します。 パラメーターの詳細については、「システム設定」、「テンプレート設定」、「ポリシープラグインの設定」、および「evictorプラグインの設定」をご参照ください。
システム構成の違い
Kubernetes Descheduler (Top Level configuration) のシステム設定には、
nodeSelector
、maxNoOfPodsToEvictPerNode
、およびmaxNoOfPodsToEvictPerNamespace
パラメーターのみが含まれます。 Koordinator Deschedulerのシステム設定には、dryRun
パラメーターとdeschedulingInterval
パラメーターも含まれています。Kubernetes Deschedulerの
v1alpha 1/DeschedulerPolicy
インターフェイスのシステム設定のpod evictorパラメーターは、他のインターフェイスのargs
設定のevictorプラグインパラメーターに置き換えられます。Koordinator Deschedulerのv1alpha 2/DeschedulerConfigurationインターフェイスの
nodeSelector
パラメーターのデータ型が他のインターフェイスと異なります。 詳細については、「システム設定」をご参照ください。
テンプレート設定の違い
Kubernetes Deschedulerの
v1alpha 1/DeschedulerPolicy
バージョンは、スケジュール解除テンプレートをサポートしていません。 したがって、設定はKoordinator Deschedulerとは異なります。Kubernetes Deschedulerの
v1alpha2/DeschedulerPolicy
バージョンは、Koordinator Deschedulerのv1alpha2/DeschedulerConfiguration
バージョンに似ています。 どちらもスケジュール解除テンプレートをサポートしています。 ただし、2つのバージョンのテンプレート設定では、異なるデータ型とメソッドを使用して、evictorプラグインを有効にします。v1alpha2/DeschedulerPolicy
は、複数のプラグインを有効または無効にする配列を定義します。v1alpha2/DeschedulerConfiguration
は、プラグインを構成するためのプラグイン
構造化リストを定義します。v1alpha 2/DeschedulerPolicy
は、自動的に有効になるDefaultEvictor evictorプラグインのみをサポートします。v1alpha 2/DeschedulerConfiguration
は、MigrationControllerおよびDefaultEvictor evictorプラグインをサポートしています。 DefaultEvictor evictorプラグインは、オープンソースバージョンと同じように機能します。evict
パラメーターとfilter
パラメーターをテンプレート設定に追加して、有効にするevictorプラグインを指定できます。
ポリシープラグイン構成の違い
Koordinator Deschedulerは、Kubernetes Descheduler 0.26.0のすべてのスケジューリング解除ポリシーに適応します。 Kubernetes Descheduler 0.26.0以降のバージョンでは、スケジューリング解除ポリシーの一部の新しいパラメーターをKoordinator Deschedulerで使用できません。 次の表は、Kubernetes Descheduler 0.26.0以降のバージョンと比較した、Koordinator Deschedulerスケジューリング解除ポリシーのパラメーターの変更を示しています。
ポリシープラグインのパラメーター変更 | 例 |
|
|
|
|
|
|
|
|
|
|
Evictorプラグイン構成の違い
Koordinator Deschedulerは、Kubernetes Descheduler 0.26.0のポッドevictor DefaultEvictorに適合します。 Koordinator Deschedulerは、Kubernetes Descheduler 0.26.0以降のバージョンで新しいDefaultEvictorパラメーターをサポートしていません。
デフォルトEvictor
Evictorプラグインのパラメーター変更 | 例 |
|
|
MigrationController
Koordinator Deschedulerは、MigrationControllerのevictorプラグインをサポートしています。これにより、複数の削除メソッドを使用できます。 詳細については、「MigrationController」をご参照ください。
Kubernetes DeschedulerからKoordinator Deschedulerへの移行
Kubernetes DeschedulerからKoordinator Deschedulerへの移行方法は、使用するバージョンによって異なります。 移行を完了するには、次の手順を実行します。
Kubernetes Deschedulerをアンインストールします。 クラスタに複数のデスケジューラが存在する場合、予測不可能な競合状態が存在する可能性があります。
「スケジュール解除機能の有効化」を参照し、「Koordinator Descheduler」をインストールおよび設定します。
「システム構成の違い」を参照し、「Koordinator Descheduler」のシステム構成を設定します。
Koordinator Deschedulerに適応するスケジューリング解除テンプレートを作成します。
Kubernetes Descheduler 0.26.0以前を使用する場合、
v1alpha 1/DeschedulerPolicy
インターフェイスのみがサポートされます。 テンプレート設定の違いを参照して、設定を完了します。Kubernetes Descheduler 0.26.0以降のバージョンを使用する場合は、使用するインターフェイスを確認する必要があります。
インターフェイスが
v1alpha 1/DeschedulerPolicy
の場合は、テンプレート設定の違いを参照し、Koordinator Deschedulerに適合するスケジュール解除テンプレートを作成します。インターフェイスが
v1alpha 2/DeschedulerPolicy
の場合は、テンプレート設定の違いを参照し、Koordinator Deschedulerのパラメーターを変更します。
[ポリシープラグインの構成の違い] および [Evictorプラグインの構成の違い] を参照し、[Koordinator Descheduler] でプラグインパラメーターを設定します。
関連ドキュメント
ack-koordinatorコンポーネントをインストールしてスケジューリング解除を有効にする方法の詳細については、「スケジューリング解除機能の有効化」をご参照ください。
ConfigMapで、Koordinator Descheduler、スケジュール解除テンプレート、スケジュール解除ポリシープラグイン、およびevictorプラグインの高度なパラメーターを設定することもできます。 詳細については、「詳細パラメーターの設定」をご参照ください。
ack-koordinatorの概要とリリースノートの詳細については、「ack-koordinator (ack-slo-manager) 」をご参照ください。