[應用] keda - ScaledObject 狀態 === ###### tags: `K8s / app` ###### tags: `Kubernetes`, `k8s`, `app`, `keda`, `ScaledObject` <br> [TOC] <br> ## 討論 ### Active false 原因分析 - ### Question ``` $ kubectl -n slurm get scaledobject NAME SCALETARGETKIND SCALETARGETNAME MIN MAX READY ACTIVE FALLBACK PAUSED TRIGGERS AUTHENTICATIONS AGE slurm-worker-gpu1080-scaler slinky.slurm.net/v1beta1.NodeSet slurm-worker-gpu1080 1 3 True False False False prometheus 31m ``` ACTIVE 是 false,原因為何? - ### gpt-5.1 (2025/11/28) 先講結論: `READY=True / ACTIVE=False / PAUSED=False` **通常是「正常狀況」**,代表: > ScaledObject 設定沒問題,但目前觸發條件沒有「被觸發」,所以 KEDA 暫時不主動縮放。 --- ### 1. ACTIVE 欄位代表什麼? 在 KEDA 裡,ScaledObject 會有幾個 condition: * `Ready`: 設定是否正確、Scaler 是否能正常工作 * `Active`: 觸發條件現在是不是「有事件 / 有負載」需要縮放 * 如果沒有事件 / 負載達到門檻 → `Active = False`,常見訊息是: > Scaling is not performed because triggers are not active > Reason: `ScalerNotActive` ([GitHub][20251128-A-1]) 所以 `Active=False` **不代表壞掉**,多半只是「目前 metric 沒有超過啟動門檻」。 --- ### 2. 就你這一行輸出的解讀 ```bash slurm-worker-gpu1080-scaler slinky.slurm.net/v1beta1.NodeSet slurm-worker-gpu1080 1 3 True False False False prometheus 31m ``` 逐欄位看: * `READY = True`:ScaledObject 語法、Trigger、目標資源都 OK,KEDA operator 覺得這個物件是「可用」的。([KEDA][20251128-A-1]) * `ACTIVE = False`:Prometheus trigger 目前回報的是「未達啟動條件」,所以 KEDA 現在不會因為這個 trigger 去動 replica。([GitHub][20251128-A-1]) * `PAUSED = False`:不是被暫停(不是那種「上游錯誤 → KEDA 暫停縮放」的情況)。([KEDA][20251128-A-1]) * `MIN = 1`:即使 Active=False,你 `minReplicaCount=1`,所以 NodeSet 至少會維持 1 個 pod,不會縮成 0。([KEDA][20251128-A-1]) => 綜合起來:**現在沒有符合條件的負載,所以 scaler 處於「待命但不啟動」狀態**。 --- ### 3. 什麼情況會讓 ACTIVE 是 False? 常見幾種: 1. **Trigger metric 小於啟動門檻** * Prometheus scaler 裡的 `threshold` 或 `activationTarget` 還沒被超過 * 例如你設定 `threshold: "5"`,但現在 Prometheus 查到的值是 0 或 3 → `Active=False` 2. **有 metric,但 queue / jobs 數量太低** * 典型例子:訊息佇列長度、小於你設定的每個 pod 可處理量 * 對 Prometheus scaler 來說,只要查詢結果對 KEDA 來說「還沒需要 scale-out」,就會保持 `ScalerNotActive`([GitHub][20251128-A-1]) 3. **minReplicaCount > 0 的特殊情況** * 官方說明中:minReplicaCount >= 1 時,Scaler 還是會標示 Active/NotActive,但 HPA 仍然可以在 1 ↔ N 之間做調整。([GitHub][20251128-A-1]) * 也就是說:**`Active=False` 不代表 HPA 完全不會動,只是 KEDA 那邊認為「沒有需要從 idle/0 狀態喚醒」** 4. (相對少見,但要注意)**上游 metric source 有錯誤 & 沒有 fallback 設定** * 若 Prometheus 不通或 query 錯,KEDA 會視為「觸發條件拿不到資料」,並且依情況把 ScaledObject 標成 paused 或一直不 active * 這時 `kubectl describe scaledobject` 會看到 condition message 裡有錯誤訊息,而不只是 `ScalerNotActive`。([KEDA][20251128-A-1]) --- ### 4. 你現在可以怎麼檢查? 直接給你幾個指令(不問你設定內容): 1. **看更詳細的 condition 資訊:** ```bash kubectl -n slurm describe scaledobject slurm-worker-gpu1080-scaler ``` * 找 `Conditions:` 底下的: * `Type: Active` * `Message:` / `Reason:` 多半會看到類似:`Scaling is not performed because triggers are not active`(正常) 2. **確認 Prometheus query 真的有回到值** 從 ScaledObject 內的 `spec.triggers[20251128-A-1].metadata.query` 抽出來,在 Prometheus UI 或 curl 直接打看看,確認: * 現在的值是不是 0 * 或是 < 你設定的 `threshold` / `activationTarget` 3. **看 KEDA operator / metrics server log 是否有錯** ```bash kubectl -n keda logs deploy/keda-operator kubectl -n keda logs deploy/keda-metrics-apiserver ``` 如果上游有問題,log 裡會有 error,而不只是空白。 --- ### 5. 簡短總結 * 你的 `ScaledObject` 現在 **是 Ready 的**,沒有被 Pause。 * `ACTIVE = False` 幾乎可以翻譯成: > 「現在沒有符合條件的負載,所以暫時不做縮放」 * 所以除非你預期此刻應該 scale-out,否則這個輸出是「正常」的。 如果你覺得「明明 Prometheus 指標已經很高,理論上應該要 active」,你可以直接貼 `scaledobject yaml` 裡的 `triggers` 部分跟 Prometheus 實際查詢結果,我可以幫你對門檻算給你看。 [20251128-A-1]: https://github.com/kedacore/keda/discussions/1387?utm_source=chatgpt.com "Scaling is not performed because triggers are not active" [20251128-A-1]: https://keda.sh/docs/2.18/reference/scaledobject-spec/ "ScaledObject specification | KEDA" [20251128-A-1]: https://keda.sh/docs/2.18/troubleshooting/?utm_source=chatgpt.com "Troubleshooting" [20251128-A-1]: https://github.com/kedacore/keda/issues/6145?utm_source=chatgpt.com "ScaledObject shows condition status `ScalerNotActive` ..." <br> {%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up