跳轉到

Cluster Autoscaler Node Protection

概念概覽

雙重保護機制設計

核心知識

雙重保護機制設計

方案 A(主動防禦): safe-to-evict=false annotation
  → CA 分析 node 時直接跳過帶有此 annotation 的 pod
  → CA 不會嘗試 drain 此 node

方案 B(被動防禦): PDB minAvailable=1
  → 若 CA 仍嘗試 drain,eviction 請求被 PDB 拒絕
  → drain 失敗,CA 退縮

只有 PDB 時:CA 仍週期性嘗試 drain,有短暫 disruption 風險,影響 QA 測試穩定性。

PDB + safe-to-evict=false:CA 連嘗試的動作都不會發生,node 完全透明於 CA 的縮減邏輯。

safe-to-evict annotation 設定方式

# 設定在 pod 上(透過 deployment annotation)
kubectl patch deployment -n ps <name> \
  -p '{"spec":{"template":{"metadata":{"annotations":{"cluster-autoscaler.kubernetes.io/safe-to-evict":"false"}}}}}'

何時必須用雙重保護

當 node 資源利用率遠低於 CA 縮減門檻時(如 cpu 15-19%、memory 7%),CA 「必然」嘗試縮減該 node。實際案例驗證:qa-test node 的低利用率,在沒有 safe-to-evict 保護的情況下,數分鐘到數小時內必被 CA 縮減。

經驗教訓

  • 只有 PDB 時 CA 仍會週期性嘗試 drain,必須搭配 safe-to-evict=false 才能完全阻止 CA 動作

  • 低資源利用率的 node(cpu < 50%)必然是 CA 縮減目標,不能期待 CA 自然放過

  • safe-to-evict 是 annotation 設定在 pod 上,不是設在 node 上

常見陷阱

  • 誤以為只有 PDB 就足夠:CA 仍會嘗試 drain,PDB 只是讓 drain 失敗,不是讓 CA 不嘗試

  • safe-to-evict=false 的副作用:即使 qa-test 站點完全閒置,CA 也無法回收此 node

最佳實踐

  • 監控 CA 日誌確認 CA 確實因 safe-to-evict 跳過 qa-test node,而非其他原因

  • PDB 與 safe-to-evict 搭配使用:前者被動防禦,後者主動防禦

相關概念

相關視角

以下頁面與本概念共享主題,但從不同角度切入。保留獨立視角同時提供交叉參考:

來源 Sessions

日期 Session 貢獻摘要

| 2026-03-24 | 6faf05ec-5823-4354-9fcd-f9c48bb322ca | 記錄了 CA 雙重保護機制(PDB + safe-to-evict=false)的實際效果差異,以及為何只靠 PDB 不夠。 |


本概念頁面由 Semi-Brain Wiki 系統自動維護

最後更新: 2026-03-24