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

Container Service for Kubernetes:スケジュール解除機能の有効化

最終更新日:Dec 13, 2024

スケジュール解除は、ノード上の削除ルールに一致するポッドを別のノードにスケジュールするプロセスです。 この機能は、不均一なクラスターリソース使用率、高負荷ノード、新しいスケジューリングポリシーの需要などのシナリオに適しています。 スケジュール解除機能は、クラスターの健全性の維持、リソース使用の最適化、ワークロードのサービス品質の向上に役立ちます。 このトピックでは、RemovePodsViolatingNodeTaintsという名前のノード汚染検証プラグインを例として使用し、ack-koordinatorコンポーネントに基づいてスケジューリング解除機能を有効にする方法について説明します。

あなたが始める前に

  • このトピックを読む前に、機能、使用シナリオ、ワークフロー、およびスケジュール解除の基本概念について学ぶことをお勧めします。 詳細については、「スケジュール解除の概要」をご参照ください。

  • このトピックでは、例としてRemovePodsViolatingNodeTaintsという名前のノード汚染検証プラグインを使用します。 NoScheduleなど、ポッドのスケジュールと削除にテイントと許容範囲を使用する方法の詳細については、「テイントと許容範囲」をご参照ください。

  • Kubernetes Deschedulerを使用する場合は、Koordinator DeschedulerとKubernetes Deschedulerの違いについて学習し、Koordinator Deschedulerに移行することを推奨します。 詳細については、「Koordinator DeschedulerとKubernetes Deschedulerの比較」をご参照ください。

  • スケジュール解除機能の基本的な操作に精通している場合は、システム構成、テンプレート構成、ポリシープラグイン構成、およびevictorプラグイン構成などの高度な構成を調べることができます。 詳細については、「詳細パラメーターの設定」をご参照ください。

前提条件

使用上の注意

  • Koordinator Deschedulerは実行中のポッドのみを削除し、削除されたポッドを再作成またはスケジュールしません。 ポッドが削除されると、ポッドはDeploymentやStatfulSetなどのワークロードコントローラーによって再作成されます。 再作成されたポッドは引き続きスケジューラによってスケジュールされます。

  • スケジュール解除プロセス中に、古いポッドが削除され、新しいポッドが作成されます。 削除中にアプリケーションの可用性が影響を受ける場合に備えて、アプリケーションに十分なレプリカがあることを確認してください。

このトピックでは、ack-koordinatorコンポーネントに基づいて、スケジューリング解除機能を有効にし、スケジューリング解除ポリシーを実装する方法について説明します。 ノード汚染検証プラグインRemovePodsViolatingNodeTaintsを例として使用します。

デフォルトでは、RemovePodsViolatingNodeTaintsポリシーは、taint効果NoScheduleであるノードのポッドと、taintを許容できないポッドを削除します。 たとえば、ノードは実行中のポッドをホストし、管理者はdeschedule=not-allow:NoScheduleテイントをノードに追加します。 ノード上のポッドがテイントを許容する許容範囲で構成されていない場合、ポッドはスケジューリング解除ポリシーによって削除されます。 詳細については、「RemovePodsViolatingNodeTaints」をご参照ください。

RemovePodsViolatingNodeTaintsポリシーでは、ノードの汚染を無視するようにexcludedTaintsフィールドを設定できます。 taint keyまたはkey-valueペア (key=value) がexcludedTaintsリストのtaintと一致する場合、そのtaintは無視されます。

この例では、プラグインは次の方法で汚染を検証するように設定されています。

  • ノードでeffectNoScheduleに設定されます。

  • NoScheduleテイント属性では、テイントキースケジュール解除ではなく、テイントnot-allowではありません。

上記の条件を満たすノードで、実行中のポッドに一致する許容範囲がない場合、ポッドはデスケジューラによって追い出されます。

手順1: ack-koordinatorコンポーネントをインストールまたは変更し、スケジューリング解除を有効にする

このセクションの手順に従って、ack-koordinator (FKA ack-slo-manager) コンポーネントをインストールし、Koordinator Deschedulerが提供するスケジューリング解除機能を使用できます。 Koordinator Deschedulerは、デプロイとしてノードにデプロイされます。

説明

ack-koordinatorコンポーネントをインストールしている場合は、コンポーネントのバージョンが1.2.0-ack.2以降であることを確認してください。

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  3. ack-koordinatorコンポーネントを見つけて、右下隅の [インストール] をクリックします。 [ack-koordinatorのインストール] ダイアログボックスで、[ACK-Koordinatorのデスケジューラの有効化] を選択して、スケジューリング解除モジュールを有効にします。 次に、プロンプトに従ってコンポーネントを設定してインストールします。

ステップ2: RemovePodsViolatingNodeTaintsという名前のスケジューリング解除プラグインを有効にする

  1. 次のYAMLコンテンツを使用して、koord-descheduler-config.yamlという名前のファイルを作成します。

    koord-descheduler-config.yamlファイルは、RemovePodsViolatingNodeTaintsという名前のスケジューリング解除プラグインを有効化および設定するために使用されるConfigMapです。

    # koord-descheduler-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: koord-descheduler-config
      namespace: kube-system
    data:
      koord-descheduler-config: |
        # Do not modify the following system configuration of koord-desheduler. 
        apiVersion: descheduler/v1alpha2
        kind: DeschedulerConfiguration
        leaderElection:
          resourceLock: leases
          resourceName: koord-descheduler
          resourceNamespace: kube-system
        deschedulingInterval: 120s # The interval at which LowNodeLoad runs. The interval is set to 120 seconds in this example. 
        dryRun: false # The global read-only mode. After you enable this mode, koord-descheduler does not perform any operations. 
        # The preceding configuration is the system configuration. 
    
        profiles:
        - name: koord-descheduler
          plugins:
            deschedule:
              enabled:
                -name: RemovePodsViolatingNodeTaints # Enable the node taint verification plug-in.         
    
          pluginConfig:             
          - 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.
  2. 次のコマンドを実行して、koord-descheduler-config.yamlファイルをクラスターにデプロイします。

    kubectl apply -f koord-descheduler-config.yaml
  3. 次のコマンドを実行して、デスケジューラーモジュールKoordinator deschedulerを再起動します。

    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 0
    # Expected output:
    # deployment.apps/ack-koord-descheduler scaled
    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 1
    # Expected output:
    # deployment.apps/ack-koord-descheduler scaled

    ack-koord-descheduler Deploymentのレプリカ数を0に設定し、1に設定します。 この操作により、Koordinator Deschedulerモジュールが再起動されます。 再起動後に最新の設定が使用されます。

ステップ3: スケジュール解除機能の確認

3つのノードを含むクラスターを例として使用します。

  1. 次のYAMLコンテンツを使用して、stress-demo.yamlという名前のファイルを作成します。

    サンプルアプリケーションはstress-demo.yamlファイルで定義されています。

    YAMLコンテンツの表示

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: stress-demo
      namespace: default
      labels:
        app: stress-demo
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: stress-demo
      template:
        metadata:
          name: stress-demo
          labels:
            app: stress-demo
        spec:
          containers:
            - args:
                - '--vm'
                - '2'
                - '--vm-bytes'
                - '1600M'
                - '-c'
                - '2'
                - '--vm-hang'
                - '2'
              command:
                - stress
              image: registry-cn-beijing.ack.aliyuncs.com/acs/stress:v1.0.4
              imagePullPolicy: Always
              name: stress
              resources:
                limits:
                  cpu: '2'
                  memory: 4Gi
                requests:
                  cpu: '2'
                  memory: 4Gi
          restartPolicy: Always
  2. 次のコマンドを実行してstress-demo.yamlファイルをデプロイし、テストポッドを作成します。

    kubectl create -f stress-demo.yaml
  3. 次のコマンドを実行して、実行状態になるまでポッドのステータスを表示します。

    kubectl get pod -o wide

    期待される出力:

    NAME                         READY   STATUS    RESTARTS   AGE    IP              NODE                        NOMINATED NODE   READINESS GATES
    stress-demo-5f6cddf9-9****   1/1     Running   0          10s    192.XX.XX.27   cn-beijing.192.XX.XX.247   <none>           <none>
    stress-demo-5f6cddf9-h****   1/1     Running   0          10s    192.XX.XX.20   cn-beijing.192.XX.XX.249   <none>           <none>
    stress-demo-5f6cddf9-v****   1/1     Running   0          10s    192.XX.XX.32   cn-beijing.192.XX.XX.248   <none>           <none>
  4. 次のコマンドを実行して、key=value:NoSchedule taintをノードに追加します。

    • deschedule=not-allow:NoScheduleテイントをcn-beijing.192.XX.XX.247という名前のノードに追加します。

      kubectl taint nodes cn-beijing.192.XX.XX.247 deschedule=not-allow:NoSchedule

      期待される出力:

      node/cn-beijing.192.XX.XX.247 tainted
    • deschedule=allow:NoScheduleテイントをcn-beijing.192.XX.XX.248という名前のノードに追加します。

      kubectl taint nodes cn-beijing.192.XX.XX.248 deschedule=allow:NoSchedule

      期待される出力:

      node/cn-beijing.192.XX.XX.248 tainted
  5. 次のコマンドを実行して、ポッドの変更を表示します。

    kubectl get pod -o wide -w

    デスケジューラーモジュールがノードの汚染を確認し、削除操作を実行するのを待ちます。

    期待される出力:

    NAME                         READY   STATUS              RESTARTS   AGE     IP             NODE                    NOMINATED NODE   READINESS GATES
    stress-demo-5f6cddf9-9****   1/1     Running             0          5m34s   192.XX.XX.27   cn-beijing.192.XX.XX.247   <none>           <none>
    stress-demo-5f6cddf9-h****   1/1     Running             0          5m34s   192.XX.XX.20   cn-beijing.192.XX.XX.249   <none>           <none>
    stress-demo-5f6cddf9-v****   1/1     Running             0          5m34s   192.XX.XX.32   cn-beijing.192.XX.XX.248   <none>           <none>
    stress-demo-5f6cddf9-v****   1/1     Terminating         0          7m58s   192.XX.XX.32   cn-beijing.192.XX.XX.248   <none>           <none>
    stress-demo-5f6cddf9-j****   0/1     ContainerCreating   0          0s      <none>         cn-beijing.192.XX.XX.249   <none>           <none>
    stress-demo-5f6cddf9-j****   1/1     Running             0          2s      192.XX.XX.32   cn-beijing.192.XX.XX.249   <none>           <none>

    出力は次の情報を示します。

    • ノードcn-beijing.192.XX.XX.248上のポッドのstress-demo-5f6cddf9-v **** は、taint deschedule=allow:NoScheduleで削除されます。

    • ノードcn-beijing.192.XX.XX.247上のポッドのstress-demo-5f6cddf9-9 **** は、taint deschedule=not-allow:NoScheduleで削除されません。

    • 削除されたポッドのstress-demo-5f6cddf9-v **** は、NoScheduleテントを持たないノードcn-beijing.192.XX.XX.249にスケジュール解除されます。

  6. 次のコマンドを実行して、追い出されたポッドのイベントを表示します。

    kubectl get event | grep stress-demo-5f6cddf9-v****

    期待される出力:

    3m24s       Normal    Evicting            podmigrationjob/b0fba65f-7fab-4a99-96a9-c71a3798****   Pod "default/stress-demo-5f6cddf9-v****" evicted from node "cn-beijing.192.XX.XX.248" by the reason "RemovePodsViolatingNodeTaints"
    2m51s       Normal    EvictComplete       podmigrationjob/b0fba65f-7fab-4a99-96a9-c71a3798****   Pod "default/stress-demo-5f6cddf9-v****" has been evicted
    3m24s       Normal    Descheduled         pod/stress-demo-5f6cddf9-v****                         Pod evicted from node "cn-beijing.192.XX.XX.248" by the reason "RemovePodsViolatingNodeTaints"
    3m24s       Normal    Killing             pod/stress-demo-5f6cddf9-v****                         Stopping container stress

    を止める

    期待される出力は、ポッドの移行レコードを示します。 ノードcn-beijing.192.XX.XX.248のtaint deschedule=not-allowを許容するように、一致する許容範囲でポッドが構成されていません。 その結果、ポッドは別のノードにスケジュール解除されます。 結果は期待に応えます。

詳細パラメーターの設定

上記の操作に加えて、ConfigMapを使用してKoordinator Deschedulerの詳細パラメーターを設定することもできます。

高度な設定の例

次のYAMLファイルは、Koordinator Deschedulerの高度な設定の例を示しています。 これらの設定は、DeschedulerConfiguration APIを呼び出してKoordinator Deschedulerの動作を変更し、RemovePodsViolatingNodeTaintノードのテイント検証ポリシーを有効にし、MigrationControllerをpod evictorとして使用します。

サンプル設定のパラメーターの詳細については、次のセクションを参照してください。

YAMLコンテンツの表示

# koord-descheduler-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: koord-descheduler-config
  namespace: kube-system
data:
  koord-descheduler-config: |
    # Do not modify the following system configuration of koord-desheduler. 
    apiVersion: descheduler/v1alpha2
    kind: DeschedulerConfiguration
    leaderElection:
      resourceLock: leases
      resourceName: koord-descheduler
      resourceNamespace: kube-system
    dryRun: false # The global read-only mode. After you enable this mode, koord-descheduler does not perform any operations.   
    deschedulingInterval: 120s # The interval at which LowNodeLoad runs. The interval is set to 120 seconds in this example. 
    nodeSelector: # The nodes that are involved in descheduling. By default, all nodes are descheduled. 
      desschedule: allow # Only nodes whose key is desschedule and value is allow are descheduled. 
    maxNoOfPodsToEvictPerNode: 10 # The maximum number of pods that can be evicted from a node. The limit takes effect on a global scale. By default, no limit is configured. 
    maxNoOfPodsToEvictPerNamespace: 10 # The maximum number of pods that can be evicted from a namespace. The limit takes effect on a global scale. By default, no limit is configured. 
    # The preceding configuration is the system configuration. 

    # The template list. 
    profiles: 
    -name: koord-descheduler # The name of the template. 
      # The following template configuration specifies the plug-ins to be enabled. 
      plugins: 
        desschedule: # Specify the Deschedule policy. All plug-ins are disabled by default. 
          enabled: # Specify the plug-ins to be enabled. All other plug-ins that are not explicitly specified in the enabled parameter are disabled. 
            -name: RemovePodsViolatingNodeTaints # Enable the node taint verification plug-in. 
        balance: # Specify the Balance policy. All plug-ins are disabled by default. 
          disabled: # Specify the plug-ins to be disabled. 
            -name: "*" # An asterisk (*) indicates that all plug-ins are disabled. 
        evict:          
          enabled:
            -name: MigrationController # Specify the evictor. By default, the migration controller is enabled. 
        filter: 
          enabled:
            -name: MigrationController # Specify the eviction filtering policy. The eviction filtering policy of the migration controller is used by default. 
      # The preceding configurations are template configurations. 

      # The plug-in list, which includes policy plug-ins and evictor plug-ins. 
      pluginConfig: 
      # The configurations of the RemovePodsViolatingNodeTaints policy plug-in. 
      - name: RemovePodsViolatingNodeTaints
        args:
          excludedTaints:
          - deschedule=not-allow # Ignore nodes whose taint key is deschedule and taint value is not-allow.
          -reserved # Ignore nodes whose taint key is reserved.
          includePreferNoSchedule: false # Specify whether to include taints with the effect PreferNoSchedule. By default, only taints with the effect NoSchedule are included. 
          namespaces: # Specify the namespaces that you want to include or exclude for descheduling. The include and exclude lists are mutually exclusive. 
            include: # Specify the namespaces that you want to include for descheduling. 
              - "namespace1"
              - "namespace2"
            # exclude: # Specify the namespaces that you want to exclude for descheduling. 
            #   - "namespace1"
            #   - "namespace2"
          labelSelector: # Specify the pods that can be descheduled. By default, all pods can be descheduled. 
            accelerator: nvidia-tesla-p100 # Only pods whose key is accelerator and value is nvidia-tesla-p100 can be descheduled.      
    
      # The configurations of the node taint verification plug-in.      
      - name: MigrationController # Configure the parameters of the migration controller. 
        args:
          apiVersion: descheduler/v1alpha2
          kind: MigrationControllerArgs  
          evictLocalStoragePods: false # Specify whether pods that are configured with the emptyDir or hostPath can be descheduled.        
          maxMigratingPerNode: 1 # The maximum number of pods that can be migrated at the same time on a node. 
          maxMigratingPerNamespace: 1  # The maximum number of pods that can be migrated at the same time in a namespace. 
          maxMigratingPerWorkload: 1 # The maximum number of pods that can be migrated at the same time in a workload, such as a Deployment. 
          maxUnavailablePerWorkload: 2 # The maximum number of unavailable replicated pods that are allowed in a workload, such as a Deployment. 
          objectLimiters:
            workload: # Control workload-specific pod migration control. By default, the system can migrate only one replicated pod within 5 minutes after the first eviction. 
              duration: 5m
              maxMigrating: 1
          evictionPolicy: Eviction # The pod eviction method. The Eviction API is called to evict pods by default.        

システム構成

DeschedulerConfigurationで、Koordinator Deschedulerのグローバルなシステムレベルの動作を設定できます。

パラメーター

タイプ

有効値

説明

dryRun

Boolean

  • true

  • false (デフォルト値)

グローバル読み取り専用モード。The global read-only mode. このモードを有効にすると、ポッドは移行できません。

false

deschedulingInterval

time. デュレーション

> 0s

スケジュール解除間隔。

120s

nodeSelector

Structure

非該当

スケジュール解除できるノードを制限します。 スケジューリング解除ポリシーは、ノードセレクタで指定されたノードに対してのみ有効です。 ノードセレクタの詳細については、「Kubernetes labelSelector」をご参照ください。

nodeSelector:
  スケジュール解除: 許可 

maxNoOfPodsToEvictPerNode

int

≥ 0 (デフォルト値: 0)

ノードで同時に削除できるポッドの最大数を制限します。 このパラメーターは、スケジューリング解除中に有効になります。

10

maxNoOfPodsToEvictPerNamespace

int

≥ 0 (デフォルト値: 0)

名前空間で同時に削除できるポッドの最大数を制限します。 このパラメーターは、スケジューリング解除中に有効になります。

10

テンプレート設定

Koordinator Deschedulerは、スケジュール解除テンプレートを使用してスケジュール解除ポリシーとポッドエビクターを管理します。 DeschedulerConfigurationprofilesフィールドで、1つ以上のスケジューリング解除テンプレートを定義できます。 各スケジュール解除テンプレートでは、スケジュール解除ポリシーとpod evictorがプラグインとして設定されます。 スケジュール解除テンプレートには、次の部分が含まれます。

  • name

    値は文字列です。 スケジュール解除テンプレートの名前をカスタマイズできます。

  • プラグイン

    有効または無効にするスケジュール解除ポリシー (スケジュール解除バランス) 、ポッド削除プラグイン (evict) 、およびポッド削除の前に使用するフィルターポリシー (filter) を設定します。 次の表に、構成可能なパラメーターを示します。

    パラメーター

    タイプ

    有効値

    説明

    スケジュール解除

    次の形式の構造体:

    type PluginList struct {
        Enabled  []Plugin
        Disabled []Plugin
    }
    
    type Plugin struct {
        Name string
    }

    EnabledDisabledプラグイン構造化リストです。

    すべてのプラグインはデフォルトで無効になっています。 スケジュール解除ポリシーを有効にするように指定できます。

    plugins:
      deschedule: 
        enabled:
          - name: PodLifeTime 
          - name: RemovePodsViolatingNodeTaints  

    RemovePodsViolatingInterPodAntiAffinity

    このポリシーは、ポッド間のアフィニティ防止ルールに違反するポッドを削除します。

    RemovePodsViolatingNodeAffinity

    このポリシーは、ノード類似ルールに一致しないポッドを削除します。

    RemovePodsViolatingNodeTaints

    このポリシーは、ノードの汚染を許容できないポッドを削除します。

    RemovePodsHavingTooManyRestarts

    このポリシーは、頻繁に再起動するポッドを削除します。

    PodLifeTime

    このポリシーは、TTLの有効期限が切れているポッドを削除します。

    RemoveFailedPod

    このポリシーは、Failed状態のポッドを削除します。

    バランス

    次の形式の構造体:

    type PluginList struct {
        Enabled  []Plugin
        Disabled []Plugin
    }
    
    type Plugin struct {
        Name string
    }

    EnabledDisabledプラグイン構造化リストです。

    すべてのプラグインはデフォルトで無効になっています。 有効にするBalanceスケジュール解除ポリシーを指定します。

    plugins:
      balance: 
        enabled:
          - name: RemoveDuplicates 
          - name: LowNodeLoad

    RemoveDuplicates

    複製されたポッドを広げる。

    LowNodeUtilization

    ノードリソース割り当てに基づいてホットスポット拡散を実行します。

    HighNodeUtilization

    ノードリソース割り当てに基づいて負荷集約を実行します。 ポリシーで許可されている場合、ポッドはリソース使用率の低いノードからリソース使用率の高いノードに移行されます。

    RemovePodsViolatingTopologySpreadConstraint

    トポロジ分布の制約に一致しないポッドを除外します。

    LowNodeLoad

    ノードリソース使用率に基づいてホットスポット拡散を実行します。

    evict

    次の形式の構造体:

    type PluginList struct {
        Enabled  []Plugin
        Disabled []Plugin
    }
    
    type Plugin struct {
        Name string
    }

    有効および無効は、プラグイン構造化リストです。 [有効] リストでプラグインを有効にし、[無効] リストでプラグインを無効にすることができます。

    • MigrationController

    • DefaultEvictor

    有効にすることを選択したポッドevictors。 MigrationControllerはデフォルトで有効になっています。

    複数の削除プラグインを同時に有効にしないでください。

    plugins:
      evict: 
        enabled: 
          - name: MigrationController

    フィルター

    次の形式の構造体:

    type PluginList struct {
        Enabled  []Plugin
        Disabled []Plugin
    }
    
    type Plugin struct {
        Name string
    }

    有効および無効は、プラグイン構造化リストです。 [有効] リストでプラグインを有効にし、[無効] リストでプラグインを無効にすることができます。

    • MigrationController

    • DefaultEvictor

    ポッド削除の前に使用する削除フィルタポリシーを選択します。 MigrationControllerはデフォルトで有効になっています。

    複数のフィルタープラグインを同時に有効にしないでください。

    plugins:
      filter: 
        enabled: 
          - name: MigrationController
  • pluginConfig

    各プラグインの詳細パラメーターを設定します。 nameフィールドを設定して、設定するプラグインの名前を指定します。 argsフィールドでプラグインを設定する方法の詳細については、「ポリシープラグインの設定」および「evictorプラグインの設定」をご参照ください。

ポリシープラグインの設定

Koordinator Deschedulerは、6つのDescheduleポリシープラグインと5つのBalanceポリシープラグインをサポートしています。 LowNodeLoadプラグインは、Koordinatorによって提供されます。 詳細については、「負荷認識型ホットスポットのスケジューリング解除」をご参照ください。 以下のスケジューリング解除プラグインは、Kubernetes Deschedulerによって提供されます。

ポリシータイプ

ポリシー機能

ポリシー設定

Deschedule

このポリシーは、ポッド間のアフィニティ対策ルールに一致しないポッドを削除します。

RemovePodsViolatingInterPodAntiAffinity

このポリシーは、ノード類似ルールに一致しないポッドを削除します。

RemovePodsViolatingNodeAffinity

このポリシーは、ノードの汚染を許容できないポッドを削除します。

RemovePodsViolatingNodeTaints

このポリシーは、頻繁に再起動するポッドを削除します。

RemovePodsHavingTooManyRestarts

このポリシーは、TTLの有効期限が切れているポッドを削除します。

PodLifeTime

このポリシーは、Failed状態のポッドを削除します。

RemoveFailedPod

バランス

複製されたポッドを広げる。

RemoveDuplicates

ノードリソース割り当てに基づいてホットスポット拡散を実行します。

LowNodeUtilization

ノードリソース割り当てに基づいて負荷集約を実行します。

HighNodeUtilization

トポロジ分布の制約に一致しないポッドを除外します。

RemovePodsViolatingTopologySpreadConstraint

evictorプラグインの設定

Koordinator Deschedulerは、DefaultEvictorMigrationControllerの両方のevictorプラグインをサポートしています。

MigrationController

次の表に、MigrationController evictorプラグインの詳細設定を示します。

パラメーター

タイプ

有効値

説明

evictLocalStoragePods

Boolean

  • true

  • false (デフォルト値)

emptyDirまたはhostPathで構成されているポッドをスケジュール解除できるかどうかを指定します。 セキュリティ上の理由から、このパラメーターはデフォルトで無効になっています。

false

maxMigratingPerNode

int64 型

≥ 0 (デフォルト値: 2)

ノードで同時に移行できるポッドの最大数。 0の値は、制限が設定されていないことを示します。

2

maxMigratingPerNamespace

int64 型

≥ 0 (デフォルト値: 0)

名前空間内で同時に移行できるポッドの最大数。 0の値は、制限が設定されていないことを示します。

1

maxMigratingPerWorkload

intOrString

≥ 0 (デフォルト値: 10%)

デプロイなどのワークロードで同時に移行できるポッドの最大数または割合。 0の値は、制限が設定されていないことを示します。

ワークロードにレプリケートされたポッドが1つしか含まれていない場合、そのワークロードはスケジュール解除対象から除外されます。

1または10%

maxUnavailablePerWorkload

intOrString

0 (デフォルト値: 10%) 以上で、ワークロードのレプリケートされたポッドの数より小さい

展開などのワークロードで許可されている、利用できないレプリケートポッドの最大数または割合。 0の値は、制限が設定されていないことを示します。

1または10%

objectLimiters.workload

次の形式の構造体:

type MigrationObjectLimiter struct {
    Duration time.Duration `json:"duration,omitempty"`
    MaxMigrating *intstr.IntOrString `json:"maxMigrating,omitempty"`
}
  • Durationの有効値: > 0 (デフォルト値: 5m)

  • MaxMigratingの有効値: ≥ 0 (デフォルト値: 10%)

ワークロード固有のポッド移行制御。

  • Duration: タイムウィンドウを指定します。 たとえば、5 mは5分を示します。

  • MaxMigrating: 同時に移行できるレプリケートされたポッドの最大数または割合。 値を整数またはパーセント値に設定します。 デフォルトでは、maxMigratingPerWorkloadの値が使用されます。

objectLimiters:
  workload:
    duration: 5m
    maxMigrating: 1

この例では、ワークロードで5分以内に移行できるレプリケートポッドは1つだけです。

evictionPolicy

String

次のモードがサポートされています。

  • 立ち退き (デフォルト)

  • 削除

  • ソフト

  • Eviction: Eviction APIを呼び出して、業務を中断することなくポッドを適切に移行します。

  • Delete: Delete APIを呼び出してポッドを削除します。

  • Soft: scheduling.koordinator.sh/soft-evictionアノテーションをポッドに追加します。 このアノテーションを使用して、ポッドに対して実行される後続の削除操作を制御できます。

Eviction

DefaultEvictor

DefaultEvictorプラグインは、Kubernetes Deschedulerによって提供されています。 詳細については、「DefaultEvictor」をご参照ください。

比較

次の表は、DefaultEvictorとMigrationControllerのポッド削除機能を比較しています。

項目

DefaultEvictor

MigrationController

立ち退き方法

ポッドを削除するには、Eviction APIを呼び出します。

複数の削除方法がサポートされています。 詳細については、「」をご参照ください。

立ち退きの制限

  • ノードで同時に移行できるポッドの最大数は制限されます。

  • 名前空間内で同時に移行できるポッドの最大数を制限できます。

  • ノードで同時に移行できるポッドの最大数は制限されます。

  • 名前空間内で同時に移行できるポッドの最大数を制限できます。

  • ワークロードに対して同時に移行できるポッドの最大数を制限できます。

  • ワークロードごとに利用できないレプリケートポッドの最大数または割合を制限できます。

立ち退き抑制

非対応

同じワークロードに属するポッドが頻繁に移行されないようにするために、時間ウィンドウベースのスロットリングメカニズムが採用されています。

立ち退き観察

コンポーネントログを使用して、ポッドの削除情報を表示できます。

  • コンポーネントログを使用して、ポッドの削除情報を表示できます。

  • イベントを使用して、スケジュール解除中に移行プロセスを監視し、イベントの詳細で移行の特定の理由と現在のステータスを表示できます。

関連ドキュメント