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

Container Service for Kubernetes:Koordinator DeschedulerとKubernetes Deschedulerの比較

最終更新日:Dec 13, 2024

ack-koordinatorコンポーネントは、Koordinator deschedulerという名前のデスケジューラーモジュールを提供します。 Deschedulerは、Kubernetes DeschedulerのDescheduling Frameworkに基づいて開発されました。 Kubernetes Deschedulerのすべてのスケジューリング解除ポリシーと互換性があります。 Koordinator Deschedulerは、ポッドのスケジューリング解除も最適化します。

あなたが始める前に

このトピックでは、Kubernetes Deschedulerユーザーを対象としており、Koordinator DeschedulerとKubernetes Deschedulerの間の相関関係について説明します。 このトピックを読む前に、システム構成、テンプレート構成、ポリシープラグイン構成、evictorプラグイン構成など、Kubernetes Deschedulerの機能、インターフェイス属性、ポリシーを確認することをお勧めします。

Koordinator DeschedulerKubernetes Deschedulerの相関関係

Descheduling Frameworkは、Kubernetes Descheduler 0.25.0がリリースされる前に設計されました。 プラグインを使用して、スケジュール解除のライフサイクルを管理できます。 スケジュール解除フレームワークは、次の目標を達成するために開発されます。

  • 既存のスケジュール解除ポリシーとポッドの削除ロジックに基づいてプラグインを提供し、スケジュール解除の柔軟性を向上させます。

  • プラグインをロードして実行し、スケジュール解除のライフサイクルを管理できるランタイム環境を構築します。

Kubernetes Descheduler 0.26.0がリリースされた後、Kubernetes DeschedulerとDefaultEvictorが提供するスケジューリング解除ポリシーがKoordinator Descheduler v1.2で導入されました。

さらに、Koordinator Deschedulerは、MirgrationControllerという名前のevictorプラグインを提供します。

特徴の違い

image

Koordinator Deschedulerは、Kubernetes Deschedulerのほとんどの使用シナリオに適用されます。 ただし、2つのデスケジューラには、設定方法、デスケジューリングポリシー、エビクター、およびエビクション制御機能が異なります。

  1. KoordinatorDeschedulerによるDeschedulerFrameworkの開発は、KubenetesDeschedulerの前です。 したがって、Koordinator Deschedulerは、v1alpha 2/DeschedulerConfigurationという異なる設定インターフェイスを使用します。

  2. lowNodeLoadプラグインは、Koordinator Deschedulerで導入されました。 このデスケジューラープラグインは、各ノードの負荷を検知する役割を果たす。 KubernetesネイティブのデスケジューラープラグインLowNodeUtilizationは、ポッドを過剰利用ノードから過少利用ノードにデスケジュールします。 LowNodeLoadプラグインは、ノードの実際のリソース使用率に基づいてポッドのスケジュールを解除します。これはより正確です。 LowNodeLoadプラグインの詳細については、「負荷対応ホットスポットのスケジューリング解除」をご参照ください。

  3. ポッドevictor MigrationControllerは、Koordinator Deschedulerで導入されました。 MigrationControllerは、セキュリティを向上させたより多くの削除制御機能を提供します。 詳細については、「evictorプラグインの設定」をご参照ください。

設定の比較

次の例では、RemovePodsViolatingNodeTaintsポリシーを有効にして、Kubernetes DeschedulerとKoordinator Deschedulerの設定を比較します。 apiVersionkindパラメーターはバージョンを定義します。 次の表に、さまざまなバージョンでサポートされているコンポーネントを示します。

バージョン設定

Kubernetes Descheduler

Kubernetes Descheduler

コーディネーターDescheduler

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

すべてのバージョン

v0.27.0以降

すべてのバージョン

apiVersion

デスケジューラ /v1alpha 1

デスケジューラ /v1alpha2

デスケジューラ /v1alpha2

種類

DeschedulerPolicy

DeschedulerPolicy

DeschedulerConfiguration

  • 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) のシステム設定には、nodeSelectormaxNoOfPodsToEvictPerNode、および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 Deschedulerv1alpha2/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スケジューリング解除ポリシーのパラメーターの変更を示しています。

ポリシープラグインのパラメーター変更

RemovePodsViolatingNodeAffinity: preferredDuringSchedulingIgnoredDuringExecutionは、nodeAffinityTypeパラメーターで使用できます。

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"

RemovePodsHavingTooManyRestarts: statesパラメーターが追加されました。

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"

RemoveFailedPods: exitCodesパラメーターが追加されました。

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のポッドevictor DefaultEvictorに適合します。 Koordinator Deschedulerは、Kubernetes Descheduler 0.26.0以降のバージョンで新しいDefaultEvictorパラメーターをサポートしていません。

デフォルトEvictor

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プラグインをサポートしています。これにより、複数の削除メソッドを使用できます。 詳細については、「MigrationController」をご参照ください。

Kubernetes DeschedulerからKoordinator Deschedulerへの移行

Kubernetes DeschedulerからKoordinator Deschedulerへの移行方法は、使用するバージョンによって異なります。 移行を完了するには、次の手順を実行します。

  1. Kubernetes Deschedulerをアンインストールします。 クラスタに複数のデスケジューラが存在する場合、予測不可能な競合状態が存在する可能性があります。

  2. スケジュール解除機能の有効化」を参照し、「Koordinator Descheduler」をインストールおよび設定します。

    1. システム構成の違い」を参照し、「Koordinator Descheduler」のシステム構成を設定します。

    2. 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のパラメーターを変更します。

    3. [ポリシープラグインの構成の違い] および [Evictorプラグインの構成の違い] を参照し、[Koordinator Descheduler] でプラグインパラメーターを設定します。

関連ドキュメント

  • ack-koordinatorコンポーネントをインストールしてスケジューリング解除を有効にする方法の詳細については、「スケジューリング解除機能の有効化」をご参照ください。

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

  • ack-koordinatorの概要とリリースノートの詳細については、「ack-koordinator (ack-slo-manager) 」をご参照ください。