排解 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 控制器無法建立必要的子項資源。請確認叢集狀態正常、Kef 正在執行,且沒有任何政策會導致 Kf 無法建立郵件中參照的物件。

    物件未刪除

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