ack-koordinator コンポーネントには Koordinator Descheduler モジュールが含まれており、安全な負荷しきい値を超えて動作しているノードを検出し、Pod を自動的にエビクションしてクラスターの負荷を再バランス化します。ネイティブの Kubernetes LowNodeUtilization プラグインはリソース割り当て率に基づいて動作するのに対し、LowNodeLoad プラグインは実際のリソース使用量に基づいて動作するため、クラスターの健全性をより正確に把握できます。
本トピックでは、負荷感知型ホットスポットデスケジューリングの有効化方法およびその詳細設定パラメーターの構成方法について説明します。
制限事項
ACK 管理型 Pro クラスターのみがサポートされています。
以下のコンポーネントバージョンが必要です:
コンポーネント バージョン ACK Scheduler v1.22.15-ack-4.0 以降、または v1.24.6-ack-4.0 以降 ack-koordinator v1.1.1-ack.1 以降 Helm v3.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 つのステージがあります:

データ収集: ノードおよびワークロードの情報と、それらのリソース使用量データを取得します。
プラグイン実行(LowNodeLoad を例として示します):
highThresholdsおよびlowThresholdsを基準としてホットスポットノードを特定します。すべてのホットスポットノードを走査し、対象となる Pod をスコアリングしてエビクション順に並べ替えます。詳細については、「Pod スコアリングポリシー」をご参照ください。
候補となる各 Pod を移行制約(クラスター容量、リソース使用量、レプリカ比率制限)に対してチェックします。詳細については、「負荷感知型ホットスポットデスケジューリングポリシー」をご参照ください。
すべてのチェックを通過した Pod を移行候補としてマークし、通過しなかった Pod はスキップします。
ポッドのエビクションと移行: エビクション API を使用して移行候補をエビクションします。
ノード分類
LowNodeLoad プラグインは、2 つのしきい値 — lowThresholds(アイドルしきい値)および highThresholds(ホットスポットしきい値)— を基準として、ノードを 3 つのカテゴリに分類します。
例として lowThresholds = 45%、highThresholds = 70% を使用します:
アイドルノード: リソース使用量が
lowThresholds未満(< 45%)です。通常ノード: リソース使用量が
lowThresholdsとhighThresholdsの間(45%–70%)です。これは目標範囲です。ホットスポットノード: リソース使用量が
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> を実行して、移行の詳細を表示できます。 |
前提条件
開始する前に、以下の条件を満たしていることを確認してください:
ACK Scheduler v1.22.15-ack-4.0 以降、ack-koordinator v1.1.1-ack.1 以降、および Helm v3.0 以降
手順 1: ack-koordinator でのデスケジューリングの有効化
新規インストール: ack-koordinator をインストールし、コンポーネント構成ページで Ack-koordinator のデスケジューリングを有効化を選択します。詳細については、「ack-koordinator コンポーネントのインストール」をご参照ください。
既存のインストール: コンポーネント構成ページで Ack-koordinator のデスケジューリングを有効化を選択します。詳細については、「ack-koordinator コンポーネントの変更」をご参照ください。
手順 2: LowNodeLoad プラグインの有効化
以下の内容で
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"この ConfigMap をクラスターに適用します。
kubectl apply -f koord-descheduler-config.yaml新しい構成を読み込むために、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 ノードクラスターを使用します。
以下の内容で
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ストレステストワークロードをデプロイします。
kubectl create -f stress-demo.yaml予想される出力:
deployment.apps/stress-demo createdPod が実行中であることを確認し、どのノードにスケジュールされているかを確認します。
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>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% を下回っています。手順 2: LowNodeLoad プラグインの有効化で説明されている通り、LowNodeLoad プラグインを有効化します。
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>エビクションイベントを確認します。
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 のシステム構成
| パラメーター | 型 | 値 | 説明 | 例 |
|---|---|---|---|---|
dryRun | boolean | true / false(デフォルト) | 読み取り専用モードの切り替え。有効化すると、Pod 移行は一切実行されません。 | false |
deschedulingInterval | time.Duration | > 0s | 実行間隔。LowNodeLoad プラグインの detectorCacheTimeout を超えてはいけません。 | 120s |
エビクションおよび移行制御の構成
| パラメーター | 型 | 値 | 説明 | 例 |
|---|---|---|---|---|
maxMigratingPerNode | int64 | ≥ 0(デフォルト: 2) | ノードごとの移行中 Pod 数の上限。0 の場合、制限なし。 | 2 |
maxMigratingPerNamespace | int64 | ≥ 0(デフォルト: 制限なし) | 名前空間ごとの移行中 Pod 数の上限。0 の場合、制限なし。 | 1 |
maxMigratingPerWorkload | intOrString | ≥ 0(デフォルト: 10%) | ワークロード(例: Deployment)ごとの移行中 Pod 数または割合の上限。0 の場合、制限なし。単一レプリカのワークロードはデスケジューリングされません。 | 1 または 10% |
maxUnavailablePerWorkload | intOrString | ≥ 0(デフォルト: 10%)、全レプリカ数より小さい値 | ワークロードごとの利用不可レプリカ数または割合の上限。0 の場合、制限なし。 | 1 または 10% |
evictLocalStoragePods | boolean | true / false(デフォルト) | HostPath または emptyDir ボリュームを構成した Pod をエビクションするかどうか。データ安全性のため、デフォルトでは無効化されています。 | false |
objectLimiters.workload | struct | Duration > 0s(デフォルト: 5m); MaxMigrating ≥ 0(デフォルト: 10%) | ワークロードレベルでの移行の速度制限。Duration はタイムウィンドウを設定し、MaxMigrating はそのウィンドウ内で移行される最大レプリカ数を設定します。デフォルト値は maxMigratingPerWorkload です。 | duration: 5m / maxMigrating: 1 — 5 分間でワークロードあたり最大 1 レプリカを移行します。 |
LowNodeLoad プラグインの構成
| パラメーター | 型 | 値 | 説明 | 例 |
|---|---|---|---|---|
highThresholds | map[string]float64 | [0, 100](CPU およびメモリのパーセント値) | ホットスポットしきい値。このしきい値を超えるノード上の Pod はエビクション対象になります。すべてのノードが lowThresholds を超えている場合、一部のノードがこのしきい値を超えていても、Koordinator Descheduler はデスケジューリングを一時停止します。 | cpu: 55 / memory: 75 |
lowThresholds | map[string]float64 | [0, 100](CPU およびメモリのパーセント値) | アイドルしきい値。すべてのノードがこのしきい値を超える場合、全体的なクラスター負荷は高いと見なされ、デスケジューリングは一時停止します。 | cpu: 25 / memory: 25 |
anomalyCondition.consecutiveAbnormalities | int64 | > 0(デフォルト: 5) | ノードがホットスポットとして分類される前に、highThresholds を連続して超える必要がある実行サイクル数。エビクション後にカウンターはリセットされます。 | 5 |
detectorCacheTimeout | \*metav1.Duration | Duration 形式(デフォルト: 5m) | ホットスポットチェックのキャッシュ期間。deschedulingInterval 以上である必要があります。 | 1h、300s、2m30s |
evictableNamespaces | include: string / exclude: string | クラスター内の名前空間 | デスケジューリングの対象を特定の名前空間に限定します。すべての Pod を処理する場合は空白のままにしてください。include と exclude は相互排他です。 | exclude: ["kube-system", "koordinator-system"] |
nodeSelector | metav1.LabelSelector | ラベルおよびセレクター | ラベルセレクターを使用して、デスケジューリングの対象を特定のノードに限定します。単一ノードプール(matchLabels)および複数ノードプール(matchExpressions)をサポートします。 | matchLabels: {alibabacloud.com/nodepool-id: np****} |
podSelectors | list of PodSelector | ラベルおよびセレクター | ラベルセレクターを使用して、デスケジューリングの対象を特定の Pod に限定します。複数のセレクターグループをサポートします。 | matchLabels: {koordinator.sh/qosClass: "LS"} |
よくある質問
ノードの使用率がしきい値を超えているにもかかわらず、Pod がエビクションされない
最も一般的な原因は、デスケジューラの構成が有効になっていないことです。以下の項目を順に確認してください:
対象範囲が構成されていない: デスケジューラは、明示的に含める(または除外しない)名前空間およびノードのみを処理します。
evictableNamespacesおよびnodeSelectorを確認し、対象の名前空間およびノードが範囲内にあることを確認してください。構成変更後にデスケジューラが再起動されていない: 構成変更は再起動後にのみ有効になります。「手順 2: LowNodeLoad プラグインの有効化」の再起動手順をご参照ください。
間隔がキャッシュタイムアウトよりも長い:
deschedulingInterval(デフォルト: 2 分)は、detectorCacheTimeout(デフォルト: 5 分)を超えてはいけません。これを超えると、ホットスポット検出が無効になります。値を調整してデスケジューラを再起動してください。ノードがしきい値を一貫して超えていない: デスケジューラは複数のサイクルにわたる平滑化された平均値を計算します。ノードがホットスポットとして分類されるのは、
highThresholdsをconsecutiveAbnormalities回連続して超えた場合のみです(デフォルト: 5 回、約 10 分)。kubectl top nodeで返される値は直近 1 分間の値のみを反映します。継続的な高使用率を確認するには、より長い期間にわたってノードを監視してください。クラスターの容量が不足している: Pod をエビクションする前に、デスケジューラは他のノードのうち少なくとも 1 つがその Pod を受け入れるのに十分な空き容量を持っているかをチェックします。該当するノードがない場合、エビクションはスキップされます。クラスターの全体的な容量を増やすためにノードを追加してください。
単一レプリカのワークロード: 単一レプリカの 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 ではサポートされていません。最新バージョンへのアップグレードにより、この機能を利用できます。Pod が HostPath または emptyDir を使用している: これらの Pod はデフォルトでデスケジューリングの対象から除外されます。MigrationController 構成で
evictLocalStoragePods: trueを設定することで、エビクションを許可できます。「エビクションおよび移行制御の構成」をご参照ください。利用不可または移行中のレプリカ数が多すぎる: ワークロード内の利用不可または移行中のレプリカ数がすでに
maxUnavailablePerWorkloadまたはmaxMigratingPerWorkloadに達している場合、そのワークロードに対するさらなるエビクションは開始されません。進行中のエビクションが完了するまで待つか、これらの制限を引き上げてください。レプリカ数 ≤ 移行制限: レプリカ数の合計が
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 で確認できます。