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

Container Service for Kubernetes:Koordinator Descheduler および Kubernetes Descheduler

最終更新日:Apr 01, 2026

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 のユースケースの大部分と互換性がありますが、構成方法、デスケジューリングポリシー、エビクター、およびエビクション制御機能においていくつかの相違点があります。主な違いは以下のとおりです。

  1. Koordinator Descheduler は Kubernetes Descheduler よりも早くデスケジューリングフレームワークの開発を開始したため、異なる構成 API(v1alpha2/DeschedulerConfiguration)を使用しています。

  2. Koordinator Descheduler は、LowNodeLoad ポリシープラグインを導入しており、ノードの実際の利用率に基づくホットスポット対応デスケジューリングを可能にします。ネイティブの Kubernetes Descheduler プラグインである LowNodeUtilization はリソース割り当て率に基づいてデスケジューリングを決定しますが、LowNodeLoad はノードの実際の利用率を使用するため、より正確な結果を提供します。LowNodeLoad プラグインの詳細については、「ホットスポット対応デスケジューリングの使用」をご参照ください。

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

構成例

以下の例では、RemovePodsViolatingNodeTaints ポリシー(RemovePodsViolatingNodeTaints)を有効にして、Kubernetes Descheduler と Koordinator Descheduler の構成フォーマットを比較します。構成バージョンは apiVersion および kind フィールドによって定義されます。次の表は、各バージョンをどのコンポーネントがサポートしているかを示しています。

構成バージョン

Kubernetes Descheduler

Kubernetes Descheduler

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 では、これらのパラメーターはエビクタープラグイン構成の一部です。
      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 のシステム構成(トップレベル構成)は、nodeSelectormaxNoOfPodsToEvictPerNode、および maxNoOfPodsToEvictPerNamespace パラメーターのみをサポートします。これに加えて、Koordinator Descheduler はシステム構成に dryRun および deschedulingInterval パラメーターを追加しています。

  • Kubernetes Descheduler の v1alpha1/DeschedulerPolicy API では、Pod エビクターパラメーターはシステム構成内で設定されます。他の 2 つの API では、これらのパラメーターは args フィールド内のエビクタープラグイン構成で設定されます。

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

テンプレート構成の違い

  • Kubernetes Descheduler の v1alpha1/DeschedulerPolicy 構成バージョンはデスケジューリングテンプレートをサポートしないため、その構成フォーマットは Koordinator Descheduler のフォーマットと大きく異なります。

  • Kubernetes Descheduler の v1alpha2/DeschedulerPolicy 構成バージョンと Koordinator Deschedulerv1alpha2/DeschedulerConfiguration は、どちらもデスケジューリングテンプレート形式を使用しているため類似しています。違いは、テンプレート構成内のデータの型と、エビクタープラグインの有効化方法にあります。

    • v1alpha2/DeschedulerPolicy は複数のプラグインを有効または無効にするために文字列のリストを使用しますが、v1alpha2/DeschedulerConfigurationplugins キーの下で構造体のリストを使用します。

    • 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 より後のバージョンとの間で、構成パラメーターにどのような違いがあるかを示しています。

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

サンプルコード

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"

エビクタープラグイン構成の違い

Koordinator Descheduler は Kubernetes Descheduler バージョン 0.26.0 の DefaultEvictor Pod エビクターと互換性があります。ただし、Kubernetes Descheduler の 0.26.0 より後のバージョンで DefaultEvictor に追加された新しいパラメーターは、Koordinator Descheduler ではサポートされていません。

DefaultEvictor

エビクターパラメーターの変更

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 エビクタープラグインもサポートしており、複数のエビクション方法を有効にします。詳細については、「MigrationController」をご参照ください。

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. ポリシープラグイン構成の違い」および「エビクタープラグイン構成の違い」を参照して、Koordinator Descheduler で特定のプラグイン構成を設定します。

関連ドキュメント

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

  • ack-koordinator コンポーネントおよびそのチェンジログの詳細については、「ack-koordinator (ack-slo-manager)」をご参照ください。