排解 Kf 問題

請按照下列步驟排解執行 Kf 時可能發生的各種問題。

安裝 Kf 時發生失敗

伺服器發生錯誤 (要求錯誤):無效字元

如果在設定預設設定時看到這項錯誤,可能是指令中使用的 ${DOMAIN} 環境變數值包含逸出字元的「$」。請使用單引號定義含有空格名稱或其他替代項的網域:

Error from server (BadRequest): invalid character '$' in string escape code

Kf Kubernetes 物件發生錯誤

請按照這些操作說明排解 Kf Kubernetes 物件問題。

  1. 列出所有 Kf 資源,找出要排解問題的 Kubernetes 資源類型名稱:

    kubectl api-resources --api-group=kf.dev

    輸出內容範例:

    NAME                      SHORTNAMES   APIGROUP   NAMESPACED   KIND
    apps                                   kf.dev     true         App
    builds                                 kf.dev     true         Build
    clusterservicebrokers                  kf.dev     false        ClusterServiceBroker
    routes                                 kf.dev     true         Route
    servicebrokers                         kf.dev     true         ServiceBroker
    serviceinstancebindings                kf.dev     true         ServiceInstanceBinding
    serviceinstances                       kf.dev     true         ServiceInstance
    spaces                                 kf.dev     false        Space
    
  2. 使用 kubectl 取得要排解問題的資源執行個體。 如果物件不在命名空間中,請省略 -n 標記:

    kubectl get api-resource-name.kf.dev object-name -n space-name -o yaml

    例如:

    kubectl get apps.kf.dev my-app -n my-space -o yaml
    
  3. 請從下方分頁標籤中選取你的問題:

    物件未完成對帳

    1. 檢查 metadata.generation 的值。每次更新物件時,這個數字就會遞增。如果數字極高,可能是兩個 Kubernetes 控制器正在爭奪物件。檢查叢集,確認是否有任何政策套用至物件,導致物件偏離所需狀態。
    2. 檢查物件所屬的命名空間是否正在刪除。如果是,物件可能無法完成對帳。
    3. 確認 status.observedGeneration 欄位是否存在。如果沒有,控制器可能尚未針對物件執行作業。使用 kf doctor 驗證叢集和控制器是否正常運作。
    4. 確認 metadata.generation 欄位與 status.observedGeneration 欄位相符。如果沒有,請使用 kf doctor 驗證叢集和控制器是否正常運作。
    5. 根據這份常見錯誤原因清單,檢查 status.conditions 清單中的失敗項目:

      • NotOwned:叢集或命名空間中已存在與這個物件嘗試建立的資源。請閱讀訊息找出重複的名稱,然後重新命名衝突的資源或 Kf 物件。
      • TemplateError:Kf 資源規格或 Kf 設定有誤,導致子項資源無法正確調解。驗證 Kf 物件和 Kf 空間的設定。
      • CacheOutdated:Kf 控制器無法及時接收 Kubernetes 的更新。檢查 Kubernetes 叢集的健康狀態。
      • ReconciliationError:Kf 控制器無法建立必要的子項資源。請檢查叢集是否正常運作、Kf 是否正在執行,以及是否有任何強制執行的政策,導致 Kf 無法建立訊息中參照的物件。

    無法刪除物件

    1. 確認物件的 metadata.deletionTimestamp 已設定。如果沒有設定,表示要求刪除失敗。
    2. 確認物件的 metadata.deletionTimestamp 屬性值為過去的日期。如果是在未來,物件可能不會刪除。
    3. 檢查物件上是否有 metadata.finalizers 清單。如果存在終結器,物件必須等待終結器移除後才能刪除。如要強制刪除物件,不必等待終結器,請編輯物件以移除終結器。
    4. 可能存在子項物件,導致無法刪除物件。請管理員檢查命名空間和叢集中的所有物件,確認是否需要先手動刪除其中一個物件。