---
# System prepended metadata

title: '[應用] keda - ScaledObject 狀態'
tags: [k8s, ScaledObject, K8s / app, keda, app, Kubernetes]

---

[應用] 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 %}