すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Koordinator Descheduler と Kubernetes Descheduler

最終更新日:Jun 19, 2026

ack-koordinator アドオンの Koordinator Descheduler は、不適切に実行されている Pod を別のノードに再スケジュールできるデスケジューリング機能を提供し、Kubernetes Descheduler コミュニティの Descheduling Framework を拡張してエビクション制御を強化します。Koordinator Descheduler は Kubernetes Descheduler ポリシーと互換性があります。

事前準備

Kubernetes Descheduler の機能、API 属性、ポリシー構成 (システム、テンプレート、ポリシープラグイン、evictor プラグイン) について理解してから、Koordinator Descheduler と比較してください。

Koordinator DeschedulerKubernetes Descheduler の関係

バージョン 0.25.0 より前、Kubernetes Descheduler コミュニティは Descheduling Framework を提案しました。これは、プラグインベースのアプローチでデスケジューリングのライフサイクルを管理するもので、2 つの目標がありました。

  • デスケジューリングポリシーと Pod エビクションロジックをプラグインに変換し、柔軟性を高める。

  • プラグインのロード、実行、デスケジューリングライフサイクル管理をサポートするランタイムを実装する。

Kubernetes Descheduler 0.26.0 において、Koordinator Descheduler v1.2.0 はすべてのポリシーと DefaultEvictor プラグインを統合し、MigrationController evictor を追加しました。

機能の違い

image

Koordinator Descheduler は、ほとんどの Kubernetes Descheduler のユースケースと互換性がありますが、構成方法、デスケジューリングポリシー、evictor、エビクション制御において違いがあります。

  1. Koordinator Descheduler は、Kubernetes Descheduler より前に Descheduling Framework の開発を開始し、異なる構成 API である v1alpha2/DeschedulerConfiguration を使用しています。

  2. Koordinator Descheduler は、実際のノード使用率に基づくホットスポットを意識したデスケジューリング用の LowNodeLoad ポリシープラグインを追加しており、リソース割り当て率を使用するネイティブの LowNodeUtilization プラグインよりも正確な結果を提供します。詳細については、「ホットスポットを意識したデスケジューリングの使用」をご参照ください。

  3. Koordinator DeschedulerMigrationController evictor を追加しています。MigrationController は、より安全で広範なエビクション制御を提供します。詳細については、「Evictor プラグイン構成」をご参照ください。

構成例

以下の例では、RemovePodsViolatingNodeTaints ポリシー (RemovePodsViolatingNodeTaints) を使用して、Kubernetes Descheduler と Koordinator Descheduler の構成形式を比較します。構成バージョンは apiVersion フィールドと kind フィールドで定義されます。

構成バージョン

Kubernetes Descheduler (v1alpha1)

Kubernetes Descheduler (v1alpha2)

[Koordinator Descheduler]

コンポーネントバージョン

すべてのバージョン

v0.27.0 以降

すべてのバージョン

apiVersion

descheduler/v1alpha1

descheduler/v1alpha2

descheduler/v1alpha2

kind

DeschedulerPolicy

DeschedulerPolicy

DeschedulerConfiguration

  • 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 のシステム構成 (トップレベル構成) は、nodeSelectormaxNoOfPodsToEvictPerNodemaxNoOfPodsToEvictPerNamespace のみをサポートします。Koordinator DeschedulerdryRundeschedulingInterval を追加しています。

  • Kubernetes Descheduler の v1alpha1/DeschedulerPolicy API では、Pod のエビクションパラメーターはシステム構成の一部です。他の 2 つの API では、evictor プラグインの args フィールドに含まれています。

  • Koordinator Deschedulerv1alpha2/DeschedulerConfiguration API では、nodeSelector のデータ型が他の 2 つの API とわずかに異なります。詳細については、「システム構成」をご参照ください。

テンプレート構成の違い

  • Kubernetes Descheduler の v1alpha1/DeschedulerPolicy はデスケジューリングテンプレートをサポートしていないため、構成形式が Koordinator Descheduler と大きく異なります。

  • Kubernetes Descheduler の v1alpha2/DeschedulerPolicyKoordinator Deschedulerv1alpha2/DeschedulerConfiguration は、どちらもデスケジューリングテンプレートを使用するため似ています。データ型と evictor プラグインの有効化方法が異なります。

    • v1alpha2/DeschedulerPolicy は文字列のリストを使用してプラグインを有効化または無効化しますが、v1alpha2/DeschedulerConfigurationplugins フィールドで構造体のリストを使用します。

    • v1alpha2/DeschedulerPolicy は DefaultEvictor のみをサポートします (自動有効化)。v1alpha2/DeschedulerConfiguration は MigrationController と DefaultEvictor の両方をサポートしており、DefaultEvictor の動作はコミュニティバージョンと一致します。evictor は evict および filter テンプレートフィールドで指定します。

ポリシープラグイン構成の違い

Koordinator Descheduler は Kubernetes Descheduler 0.26.0 のすべてのポリシーをサポートしていますが、Koordinator Descheduler は後続バージョンで追加されたパラメーターをサポートしていません。以下の表に、Koordinator Descheduler がサポートしていないパラメーターの変更点を示します。

ポリシーパラメーターの変更

サンプルコード

RemovePodsViolatingNodeAffinitynodeAffinityType フィールドで preferredDuringSchedulingIgnoredDuringExecution をサポート

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsViolatingNodeAffinity"
      args:
        nodeAffinityType:
        - "preferredDuringSchedulingIgnoredDuringExecution"
    plugins:
      deschedule:
        enabled:
          - "RemovePodsViolatingNodeAffinity"

RemovePodsViolatingTopologySpreadConstraint

  • constraints フィールドを追加

  • topologyBalanceNodeFit フィールドを追加

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsViolatingTopologySpreadConstraint"
      args:
        constraints:
          - DoNotSchedule
        topologyBalanceNodeFit: false  
    plugins:
      balance:
        enabled:
          - "RemovePodsViolatingTopologySpreadConstraint"

RemovePodsHavingTooManyRestartsstates フィールドを追加

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsHavingTooManyRestarts"
      args:
        states:
        - "CrashLoopBackOff"
    plugins:
      deschedule:
        enabled:
          - "RemovePodsHavingTooManyRestarts"

PodLifeTime

  • state フィールドで CrashLoopBackOff 値を使用できます

  • state フィールドで ImagePullBackOff 値を使用できます

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "PodLifeTime"
      args:
        states:
        - "CrashLoopBackOff"
        - "ImagePullBackOff"
    plugins:
      deschedule:
        enabled:
          - "PodLifeTime"

RemoveFailedPodsexitCodes フィールドを追加

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemoveFailedPods"
      args:
        exitCodes:
        - 1
    plugins:
      deschedule:
        enabled:
          - "RemoveFailedPods"

Evictor プラグイン構成の違い

Koordinator Descheduler は、Kubernetes Descheduler 0.26.0 の DefaultEvictor をサポートしています。Kubernetes Descheduler の後続バージョンで DefaultEvictor に追加されたパラメーターは、Koordinator Descheduler ではサポートされていません。

DefaultEvictor

Evictor パラメーターの変更

DefaultEvictor

  • evictDaemonSetPods フィールドを追加

  • minReplicas フィールドを追加

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "DefaultEvictor"
      args:
        evictDaemonSetPods: false
        minReplicas: 2
    - name: "PodLifeTime"
      args:
        maxPodLifeTimeSeconds: 86400
    plugins:
      deschedule:
        enabled:
          - "PodLifeTime"

MigrationController

Koordinator Descheduler は、複数のエビクション方法を可能にする MigrationController evictor プラグインもサポートしています。

Koordinator Descheduler への移行

Kubernetes Descheduler から Koordinator Descheduler に移行するには、以下のバージョン固有の手順に従ってください。

  1. 現在の Kubernetes Descheduler をアンインストールします。クラスター内で複数のデスケジューラを実行すると、予測不可能な競合状態が発生します。

  2. デスケジューリング機能を有効化する」に従って、Koordinator Descheduler をインストールおよび設定します。

    1. システム構成の違いに基づいて、Koordinator Descheduler でシステムレベルの設定を構成します。

    2. 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 の設定フィールドを テンプレート設定の差異 に基づいて変更します。

    3. ポリシープラグイン設定の違いおよびEvictor プラグイン設定の違いに基づいて、Koordinator Descheduler のプラグインを設定します。

関連ドキュメント

  • ack-koordinator コンポーネントのインストールとデスケジューリングの有効化:「デスケジューリング機能の有効化」をご参照ください。

    ConfigMapで、Koordinator Descheduler、スケジュール解除テンプレート、スケジュール解除ポリシープラグイン、およびevictorプラグインの高度なパラメーターを設定することもできます。 詳細については、「詳細パラメーターの設定」をご参照ください。

  • ack-koordinator コンポーネントの概要と変更ログ:「ack-koordinator (旧称 ack-slo-manager)」をご参照ください。