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

Container Service for Kubernetes:ホットスポットを認識したデスケジューリングによるノード負荷のバランス調整

最終更新日:Mar 26, 2026

ack-koordinator コンポーネントには Koordinator Descheduler モジュールが含まれており、安全な負荷しきい値を超えて動作しているノードを検出し、Pod を自動的にエビクションしてクラスターの負荷を再バランス化します。ネイティブの Kubernetes LowNodeUtilization プラグインはリソース割り当て率に基づいて動作するのに対し、LowNodeLoad プラグインは実際のリソース使用量に基づいて動作するため、クラスターの健全性をより正確に把握できます。

本トピックでは、負荷感知型ホットスポットデスケジューリングの有効化方法およびその詳細設定パラメーターの構成方法について説明します。

制限事項

  • ACK 管理型 Pro クラスターのみがサポートされています。

  • 以下のコンポーネントバージョンが必要です:

    コンポーネントバージョン
    ACK Schedulerv1.22.15-ack-4.0 以降、または v1.24.6-ack-4.0 以降
    ack-koordinatorv1.1.1-ack.1 以降
    Helmv3.0 以降
重要

Koordinator Descheduler は Pod のエビクションのみを実行し、再スケジューリングは ACK Scheduler が担当します。エビクションされた Pod が再びホットスポットノードに配置されないようにするため、負荷感知スケジューリングと併用してください。

重要

デスケジューリング中は、新しい Pod の作成前に既存の Pod がエビクションされます。アプリケーションの可用性が維持されるよう、十分な冗長なレプリカ数を確保してください。

重要

デスケジューリングでは、標準の Kubernetes エビクション API を使用します。アプリケーションの Pod が再入可能であることを確認し、エビクション後の再起動によってサービスが中断されないようにしてください。

課金

ack-koordinator はインストールおよび利用が無料です。ただし、以下のシナリオでは追加の課金が発生する場合があります:

  • ワーカーノードのリソース: ack-koordinator は自己管理型コンポーネントであり、インストール後にワーカーノードのリソースを消費します。コンポーネントをインストールする際に、各モジュールのリソース要求を構成してください。

  • Prometheus カスタムメトリック: [ACK-Koordinator 向け Prometheus モニタリングを有効にする] を有効にし、Alibaba Cloud Prometheus サービスを使用すると、公開されるメトリックはカスタムメトリックとしてカウントされ、料金が発生します。料金はクラスターサイズとアプリケーション数によって異なります。この機能を有効にする前に、Prometheus インスタンスの課金に関するドキュメントを確認してください。リソース消費量を監視および管理するには、使用状況データを照会してください。

仕組み

実行サイクル

Koordinator Descheduler は定期的に実行されます。各実行サイクルには 3 つのステージがあります:

Koordinator Descheduler execution procedure
  1. データ収集: ノードおよびワークロードの情報と、それらのリソース使用量データを取得します。

  2. プラグイン実行(LowNodeLoad を例として示します):

    1. highThresholds および lowThresholds を基準としてホットスポットノードを特定します。

    2. すべてのホットスポットノードを走査し、対象となる Pod をスコアリングしてエビクション順に並べ替えます。詳細については、「Pod スコアリングポリシー」をご参照ください。

    3. 候補となる各 Pod を移行制約(クラスター容量、リソース使用量、レプリカ比率制限)に対してチェックします。詳細については、「負荷感知型ホットスポットデスケジューリングポリシー」をご参照ください。

    4. すべてのチェックを通過した Pod を移行候補としてマークし、通過しなかった Pod はスキップします。

  3. ポッドのエビクションと移行: エビクション API を使用して移行候補をエビクションします。

ノード分類

LowNodeLoad プラグインは、2 つのしきい値 — lowThresholds(アイドルしきい値)および highThresholds(ホットスポットしきい値)— を基準として、ノードを 3 つのカテゴリに分類します。

例として lowThresholds = 45%、highThresholds = 70% を使用します:

Node classification diagram
  1. アイドルノード: リソース使用量が lowThresholds 未満(< 45%)です。

  2. 通常ノード: リソース使用量が lowThresholdshighThresholds の間(45%–70%)です。これは目標範囲です。

  3. ホットスポットノード: リソース使用量が highThresholds を超えています(> 70%)。ノード負荷が 70% 以下になるまで Pod がエビクションされます。

リソース使用量データは 1 分ごとに更新され、過去 5 分間の平均値を反映します。

クラスター内のすべてのノードが lowThresholds を超えている場合、全体的なクラスター負荷は高いと見なされます。この状態では、一部のノードが highThresholds を超えていても、Koordinator Descheduler はデスケジューリングを一時停止します。

負荷感知型ホットスポットデスケジューリングポリシー

ポリシー説明
ホットスポットチェックのリトライノードがホットスポットとして識別されるのは、設定された実行サイクル数(デフォルト: 5)連続して highThresholds を超えた場合のみです。これにより、一時的なモニタリングのピークによる誤検知を防止します。
ノードのソート特定されたホットスポットノードの中で、デスケジューリングは最もリソース使用率が高いノードから開始されます。CPU 使用率とメモリ使用率が順に比較されます。
Pod のスコアリング各ホットスポットノードに対して、エビクション前に Pod をスコアリングおよびソートします。(1)優先度クラスが低いものから(デフォルトは 0、最低優先度)。(2)QoS クラスが低いものから。(3)優先度および QoS が等しい場合は、リソース使用量および起動時間でランク付けされます。特定のエビクション順序が必要な場合は、Pod に対して異なる優先度または QoS クラスを構成してください。
フィルターラベルセレクターを使用して、デスケジューリングの対象を特定の名前空間、Pod、またはノードに限定します。LowNodeLoad プラグイン構成evictableNamespacespodSelectorsnodeSelector
事前チェックPod をエビクションする前に、デスケジューラは以下の点をチェックします。(1)ノードアフィニティ、ノードセレクター、許容範囲(Tolerations)、および利用可能なリソースを考慮した後、クラスター内に一致するノードが存在すること。(2)アイドルノードの容量が十分であり、highThresholds を超えないこと。利用可能な容量は次式で計算されます:(highThresholds − 現在の負荷) × 合計容量。たとえば、アイドルノードの負荷が 20%、highThresholds が 70%、ノードの vCore 数が 96 の場合、利用可能な容量は (70% − 20%) × 96 = 48 vCore となります。
移行の速度制限ノード、名前空間、およびワークロードごとの同時 Pod 移行数を制限します。タイムウィンドウにより、同一ワークロードの Pod が頻繁に移行されるのを防ぎます。Koordinator Descheduler は、細かい可用性制御のための Kubernetes Pod Disruption Budget (PDB) メカニズムと互換性があります。
観測可能性各 Pod について移行イベントが発行され、理由およびステータスが表示されます。kubectl get event | grep <pod-name> を実行して、移行の詳細を表示できます。

前提条件

開始する前に、以下の条件を満たしていることを確認してください:

手順 1: ack-koordinator でのデスケジューリングの有効化

  • 新規インストール: ack-koordinator をインストールし、コンポーネント構成ページで Ack-koordinator のデスケジューリングを有効化を選択します。詳細については、「ack-koordinator コンポーネントのインストール」をご参照ください。

  • 既存のインストール: コンポーネント構成ページで Ack-koordinator のデスケジューリングを有効化を選択します。詳細については、「ack-koordinator コンポーネントの変更」をご参照ください。

手順 2: LowNodeLoad プラグインの有効化

  1. 以下の内容で koord-descheduler-config.yaml ファイルを作成します。この ConfigMap により、LowNodeLoad デスケジューリングプラグインが有効化されます。

    # koord-descheduler-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: koord-descheduler-config
      namespace: kube-system
    data:
      koord-descheduler-config: |
        # koord-descheduler のシステム構成。このセクションは変更しないでください。
        apiVersion: descheduler/v1alpha2
        kind: DeschedulerConfiguration
        leaderElection:
          resourceLock: leases
          resourceName: koord-descheduler
          resourceNamespace: kube-system
        deschedulingInterval: 120s  # 実行間隔。デスケジューラは 120 秒ごとに実行されます。
                                    # detectorCacheTimeout(デフォルト: 5 分)を超えてはいけません。
        dryRun: false               # 読み取り専用モード(エビクションなし)で実行する場合は true に設定します。
        # システム構成の終了。
    
        profiles:
        - name: koord-descheduler
          plugins:
            balance:
              enabled:
                - name: LowNodeLoad      # ホットスポットデスケジューリングのために LowNodeLoad プラグインを有効化します。
            evict:
              enabled:
                - name: MigrationController  # エビクションおよび移行コントローラーを有効化します。
    
          pluginConfig:
          - name: MigrationController
            args:
              apiVersion: descheduler/v1alpha2
              kind: MigrationControllerArgs
              defaultJobMode: EvictDirectly
    
          - name: LowNodeLoad
            args:
              apiVersion: descheduler/v1alpha2
              kind: LowNodeLoadArgs
    
              # 全リソースの使用量が lowThresholds を下回っている場合、ノードはアイドルと見なされます。
              lowThresholds:
                cpu: 20    # CPU 使用率 20%
                memory: 30 # メモリ使用率 30%
    
              # いずれかのリソースの使用量が highThresholds を超えている場合、ノードはホットスポットと見なされます。
              highThresholds:
                cpu: 50    # CPU 使用率 50%
                memory: 60 # メモリ使用率 60%
    
              # デスケジューリングの対象を特定の名前空間に限定します。
              # include と exclude は相互排他です。どちらか一方のみ構成してください。
              evictableNamespaces:
                include:
                  - default
                # exclude:
                #   - "kube-system"
                #   - "koordinator-system"
  2. この ConfigMap をクラスターに適用します。

    kubectl apply -f koord-descheduler-config.yaml
  3. 新しい構成を読み込むために、Koordinator Descheduler を再起動します。

    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 0
    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 1

手順 3(任意): 負荷感知スケジューリングの有効化

最適な負荷分散を実現するため、エビクション後に ACK Scheduler が Pod をホットスポットノードに配置しないよう、負荷感知スケジューリングを有効化します。詳細については、「手順 1: 負荷感知スケジューリングの有効化」をご参照ください。

負荷感知スケジューリングポリシーの loadAwareThreshold を、highThresholds と同じ値に設定します。値が異なる場合、エビクションされた Pod がホットスポットノードに再スケジュールされる可能性があります。特に、利用可能なノード数が少なく、類似した使用率レベルのノードが複数ある場合に顕著です。

手順 4: デスケジューリングの検証

この例では、各ノードが 104 コアおよび 396 GiB のメモリを持つ 3 ノードクラスターを使用します。

  1. 以下の内容で stress-demo.yaml ファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: stress-demo
      namespace: default
      labels:
        app: stress-demo
    spec:
      replicas: 6
      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: polinux/stress
              imagePullPolicy: Always
              name: stress
              resources:
                limits:
                  cpu: '2'
                  memory: 4Gi
                requests:
                  cpu: '2'
                  memory: 4Gi
          restartPolicy: Always
  2. ストレステストワークロードをデプロイします。

    kubectl create -f stress-demo.yaml

    予想される出力:

    deployment.apps/stress-demo created
  3. Pod が実行中であることを確認し、どのノードにスケジュールされているかを確認します。

    kubectl get pod -o wide

    予想される出力:

    NAME                           READY   STATUS    RESTARTS   AGE   IP            NODE                     NOMINATED NODE   READINESS GATES
    stress-demo-588f9646cf-s****   1/1     Running   0          82s   10.XX.XX.53   cn-beijing.10.XX.XX.53   <none>           <none>
  4. cn-beijing.10.XX.XX.53 の負荷を増加させ、ノードの使用率を確認します。

    kubectl top node

    予想される出力:

    NAME                      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
    cn-beijing.10.XX.XX.215   17611m       17%    24358Mi         6%
    cn-beijing.10.XX.XX.53    63472m       63%    11969Mi         3%

    ノード cn-beijing.10.XX.XX.53 の CPU 使用率は 63% であり、設定済みのホットスポットしきい値 50% を超えています。ノード cn-beijing.10.XX.XX.215 の CPU 使用率は 17% であり、アイドルしきい値 20% を下回っています。

  5. 手順 2: LowNodeLoad プラグインの有効化で説明されている通り、LowNodeLoad プラグインを有効化します。

  6. Pod の変更を監視します。

    デフォルトでは、ノードがホットスポットとして分類されるには、highThresholds を連続して 5 回超える必要があります。デフォルトの 120 秒間隔では、約 10 分かかります。
    kubectl get pod -w

    予想される出力:

    NAME                           READY   STATUS             RESTARTS   AGE   IP             NODE                     NOMINATED NODE   READINESS GATES
    stress-demo-588f9646cf-s****   1/1     Terminating        0          59s   10.XX.XX.53    cn-beijing.10.XX.XX.53   <none>           <none>
    stress-demo-588f9646cf-7****   1/1     ContainerCreating  0          10s   10.XX.XX.215   cn-beijing.10.XX.XX.215  <none>           <none>
  7. エビクションイベントを確認します。

    kubectl get event | grep stress-demo-588f9646cf-s****

    予想される出力:

    2m14s   Normal   Evicting        podmigrationjob/00fe88bd-****   Pod "default/stress-demo-588f9646cf-s****" evicted from node "cn-beijing.10.XX.XX.53" by the reason "node is overutilized, cpu usage(68.53%)>threshold(50.00%)"
    101s    Normal   EvictComplete   podmigrationjob/00fe88bd-****   Pod "default/stress-demo-588f9646cf-s****" has been evicted
    2m14s   Normal   Descheduled     pod/stress-demo-588f9646cf-s****   Pod evicted from node "cn-beijing.10.XX.XX.53" by the reason "node is overutilized, cpu usage(68.53%)>threshold(50.00%)"
    2m14s   Normal   Killing         pod/stress-demo-588f9646cf-s****   Stopping container stress

    ホットスポットノード上の Pod がエビクションされ、cn-beijing.10.XX.XX.215 へ移行されました。

詳細設定

すべての Koordinator Descheduler パラメーターは、手順 2 で作成した ConfigMap で設定されます。以下に、負荷感知型ホットスポットデスケジューリングの完全な詳細設定を示します。

# koord-descheduler-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: koord-descheduler-config
  namespace: kube-system
data:
  koord-descheduler-config: |
    # システム構成。このセクションは変更しないでください。
    apiVersion: descheduler/v1alpha2
    kind: DeschedulerConfiguration
    leaderElection:
      resourceLock: leases
      resourceName: koord-descheduler
      resourceNamespace: kube-system
    deschedulingInterval: 120s  # 実行間隔。detectorCacheTimeout を超えてはいけません。
    dryRun: false               # 読み取り専用モード(エビクションなし)で実行する場合は true に設定します。
    # システム構成の終了。

    profiles:
    - name: koord-descheduler
      plugins:
        deschedule:
          disabled:
            - name: "*"  # すべてのプラグインはデフォルトで無効化されます(参考用に表示)。
        balance:
          enabled:
            - name: LowNodeLoad
        evict:
          disabled:
            - name: "*"  # すべてのプラグインはデフォルトで無効化されます(参考用に表示)。
          enabled:
            - name: MigrationController

      pluginConfig:
      - name: MigrationController
        args:
          apiVersion: descheduler/v1alpha2
          kind: MigrationControllerArgs
          defaultJobMode: EvictDirectly
          maxMigratingPerNode: 1       # ノードごとの同時移行 Pod 数の上限。0 の場合、制限なし。
          maxMigratingPerNamespace: 1  # 名前空間ごとの同時移行 Pod 数の上限。
          maxMigratingPerWorkload: 1   # ワークロード(例: Deployment)ごとの同時移行 Pod 数の上限。
          maxUnavailablePerWorkload: 2 # 移行中のワークロードごとの最大利用不可レプリカ数。
          evictLocalStoragePods: false # HostPath または emptyDir ボリュームを使用する Pod をエビクションするかどうか。
          objectLimiters:
            workload:               # 5 分間でワークロードあたり最大 1 レプリカを移行。
              duration: 5m
              maxMigrating: 1

      - name: LowNodeLoad
        args:
          apiVersion: descheduler/v1alpha2
          kind: LowNodeLoadArgs

          lowThresholds:
            cpu: 20
            memory: 30
          highThresholds:
            cpu: 50
            memory: 60

          anomalyCondition:
            consecutiveAbnormalities: 5  # ノードがホットスポットとして分類される前に、
                                          # highThresholds を連続して超える必要があるチェック回数。
                                          # エビクション後にカウンターはリセットされます。

          detectorCacheTimeout: "5m"  # ホットスポットチェックのキャッシュ期間。
                                      # deschedulingInterval 以上である必要があります。

          evictableNamespaces:
            include:
              - default
            # exclude:
            #   - "kube-system"
            #   - "koordinator-system"

          nodeSelector:  # 指定されたノードのみを処理します。
            matchLabels:
              alibabacloud.com/nodepool-id: np77f520e1108f47559e63809713ce****

          podSelectors:  # 指定された Pod のみを処理します。
          - name: lsPods
            selector:
              matchLabels:
                koordinator.sh/qosClass: "LS"

Koordinator Descheduler のシステム構成

パラメーター説明
dryRunbooleantrue / false(デフォルト)読み取り専用モードの切り替え。有効化すると、Pod 移行は一切実行されません。false
deschedulingIntervaltime.Duration> 0s実行間隔。LowNodeLoad プラグインの detectorCacheTimeout を超えてはいけません。120s

エビクションおよび移行制御の構成

パラメーター説明
maxMigratingPerNodeint64≥ 0(デフォルト: 2)ノードごとの移行中 Pod 数の上限。0 の場合、制限なし。2
maxMigratingPerNamespaceint64≥ 0(デフォルト: 制限なし)名前空間ごとの移行中 Pod 数の上限。0 の場合、制限なし。1
maxMigratingPerWorkloadintOrString≥ 0(デフォルト: 10%)ワークロード(例: Deployment)ごとの移行中 Pod 数または割合の上限。0 の場合、制限なし。単一レプリカのワークロードはデスケジューリングされません。1 または 10%
maxUnavailablePerWorkloadintOrString≥ 0(デフォルト: 10%)、全レプリカ数より小さい値ワークロードごとの利用不可レプリカ数または割合の上限。0 の場合、制限なし。1 または 10%
evictLocalStoragePodsbooleantrue / false(デフォルト)HostPath または emptyDir ボリュームを構成した Pod をエビクションするかどうか。データ安全性のため、デフォルトでは無効化されています。false
objectLimiters.workloadstructDuration > 0s(デフォルト: 5m); MaxMigrating ≥ 0(デフォルト: 10%)ワークロードレベルでの移行の速度制限。Duration はタイムウィンドウを設定し、MaxMigrating はそのウィンドウ内で移行される最大レプリカ数を設定します。デフォルト値は maxMigratingPerWorkload です。duration: 5m / maxMigrating: 1 — 5 分間でワークロードあたり最大 1 レプリカを移行します。

LowNodeLoad プラグインの構成

パラメーター説明
highThresholdsmap[string]float64[0, 100](CPU およびメモリのパーセント値)ホットスポットしきい値。このしきい値を超えるノード上の Pod はエビクション対象になります。すべてのノードが lowThresholds を超えている場合、一部のノードがこのしきい値を超えていても、Koordinator Descheduler はデスケジューリングを一時停止します。cpu: 55 / memory: 75
lowThresholdsmap[string]float64[0, 100](CPU およびメモリのパーセント値)アイドルしきい値。すべてのノードがこのしきい値を超える場合、全体的なクラスター負荷は高いと見なされ、デスケジューリングは一時停止します。cpu: 25 / memory: 25
anomalyCondition.consecutiveAbnormalitiesint64> 0(デフォルト: 5)ノードがホットスポットとして分類される前に、highThresholds を連続して超える必要がある実行サイクル数。エビクション後にカウンターはリセットされます。5
detectorCacheTimeout\*metav1.DurationDuration 形式(デフォルト: 5mホットスポットチェックのキャッシュ期間。deschedulingInterval 以上である必要があります。1h300s2m30s
evictableNamespacesinclude: string / exclude: stringクラスター内の名前空間デスケジューリングの対象を特定の名前空間に限定します。すべての Pod を処理する場合は空白のままにしてください。includeexclude は相互排他です。exclude: ["kube-system", "koordinator-system"]
nodeSelectormetav1.LabelSelectorラベルおよびセレクターラベルセレクターを使用して、デスケジューリングの対象を特定のノードに限定します。単一ノードプール(matchLabels)および複数ノードプール(matchExpressions)をサポートします。matchLabels: {alibabacloud.com/nodepool-id: np****}
podSelectorslist of PodSelectorラベルおよびセレクターラベルセレクターを使用して、デスケジューリングの対象を特定の Pod に限定します。複数のセレクターグループをサポートします。matchLabels: {koordinator.sh/qosClass: "LS"}

よくある質問

ノードの使用率がしきい値を超えているにもかかわらず、Pod がエビクションされない

最も一般的な原因は、デスケジューラの構成が有効になっていないことです。以下の項目を順に確認してください:

  1. 対象範囲が構成されていない: デスケジューラは、明示的に含める(または除外しない)名前空間およびノードのみを処理します。evictableNamespaces および nodeSelector を確認し、対象の名前空間およびノードが範囲内にあることを確認してください。

  2. 構成変更後にデスケジューラが再起動されていない: 構成変更は再起動後にのみ有効になります。「手順 2: LowNodeLoad プラグインの有効化」の再起動手順をご参照ください。

  3. 間隔がキャッシュタイムアウトよりも長い: deschedulingInterval(デフォルト: 2 分)は、detectorCacheTimeout(デフォルト: 5 分)を超えてはいけません。これを超えると、ホットスポット検出が無効になります。値を調整してデスケジューラを再起動してください。

  4. ノードがしきい値を一貫して超えていない: デスケジューラは複数のサイクルにわたる平滑化された平均値を計算します。ノードがホットスポットとして分類されるのは、highThresholdsconsecutiveAbnormalities 回連続して超えた場合のみです(デフォルト: 5 回、約 10 分)。kubectl top node で返される値は直近 1 分間の値のみを反映します。継続的な高使用率を確認するには、より長い期間にわたってノードを監視してください。

  5. クラスターの容量が不足している: Pod をエビクションする前に、デスケジューラは他のノードのうち少なくとも 1 つがその Pod を受け入れるのに十分な空き容量を持っているかをチェックします。該当するノードがない場合、エビクションはスキップされます。クラスターの全体的な容量を増やすためにノードを追加してください。

  6. 単一レプリカのワークロード: 単一レプリカの Pod は、可用性保護のためデフォルトでエビクションされません。この動作を上書きするには、Pod またはワークロードの descheduler.alpha.kubernetes.io/evict: "true" アノテーションを spec.template.metadata に追加してください。このアノテーションは ack-koordinator v1.3.0-ack1.6、v1.3.0-ack1.7、および v1.3.0-ack1.8 ではサポートされていません。最新バージョンへのアップグレードにより、この機能を利用できます。

  7. Pod が HostPath または emptyDir を使用している: これらの Pod はデフォルトでデスケジューリングの対象から除外されます。MigrationController 構成で evictLocalStoragePods: true を設定することで、エビクションを許可できます。「エビクションおよび移行制御の構成」をご参照ください。

  8. 利用不可または移行中のレプリカ数が多すぎる: ワークロード内の利用不可または移行中のレプリカ数がすでに maxUnavailablePerWorkload または maxMigratingPerWorkload に達している場合、そのワークロードに対するさらなるエビクションは開始されません。進行中のエビクションが完了するまで待つか、これらの制限を引き上げてください。

  9. レプリカ数 ≤ 移行制限: レプリカ数の合計が maxMigratingPerWorkload または maxUnavailablePerWorkload 以下の場合、デスケジューラはそのワークロードをスキップします。これらの値を減らすか、パーセント表記に変更してください。

デスケジューラが頻繁に再起動する

無効または欠落している ConfigMap が原因で、デスケジューラがループで再起動することがあります。ConfigMap の内容および形式を確認してください。「詳細設定」で正しい構造をご確認ください。ConfigMap を修正した後は、「手順 2: LowNodeLoad プラグインの有効化」で説明されている通り、デスケジューラを再起動してください。

負荷感知スケジューリングとホットスポットデスケジューリングの連携動作

最適な負荷分散を実現するには、両方の機能を有効化してください。ホットスポットデスケジューリングは過負荷ノードから Pod をエビクションし、負荷感知スケジューリングは、再スケジュールされた Pod をホットスポットノードではなく、使用率の低いノードに配置するよう ACK Scheduler に指示します。

負荷感知スケジューリングポリシーの loadAwareThreshold パラメーターを、highThresholds と同じ値に設定してください。詳細については、「負荷感知スケジューリングの使用」および「スケジューリングポリシー」をご参照ください。

デスケジューラが使用する使用率データとは?

デスケジューラは複数のサイクルにわたってリソース使用量を監視し、平滑化された平均値を計算します。ノードがエビクションをトリガーするのは、その平均使用率が設定された連続サイクル数(デフォルト: 約 10 分)の間、highThresholds を超え続けている場合のみです。

メモリに関して、descheduler は、OS がオンデマンドで再利用できるため、ページキャッシュを計算対象から除外します。kubectl top node で表示される値には、ページキャッシュが含まれています。descheduler が使用する実際のメモリ使用率メトリックは、Managed Service for Prometheus で確認できます。

次のステップ