排解 Kubernetes 控制器管理員問題

本頁說明如何解決 Google Distributed Cloud 的 Kubernetes 控制器管理員 (kube-controller-manager) 問題。

失去領導者選舉

如果 kube-controller-manager (KCM) 意外重新啟動,您可能會在區域叢集或複製的控制層中看到這個錯誤。重新啟動時,kubelet 可能會自行結束或重新啟動。KCM 記錄可能包含 leaderelection lost 訊息。

如果領導者在 KCM 健康狀態檢查期間,檢查自己是否仍處於領導狀態,就可能發生這種情況。

如果領導者不再領導或租約檢查失敗,健康狀態檢查會回報不健康,領導者就會重新啟動。

您可以擷取 coordination.k8s.io 群組的 Lease 資源,取得領導者選舉狀態:

  1. 如要查看所有租約,請執行下列 kubectl 指令:

    kubectl -n kube-system get lease
    
  2. 如要檢查特定租約 (例如 lease/kube-controller-manager) 的狀態,請使用下列 kubectl describe 指令:

    kubectl -n kube-system describe lease/kube-controller-manager
    

    Events 部分下方,檢查是否有 LeaderElection 事件。查看誰會接任領導職位,以及接任時間。以下輸出範例顯示,當第一個節點手動關閉時,第二個節點會立即接管領導權:

    Events:
      Type    Reason          Age    From                     Message
      ----    ------          ----   ----                     -------
      Normal  LeaderElection  26m    kube-controller-manager  control-plane_056a86ec-84c5-48b8-b58d-86f3fde2ecdd became leader
      Normal  LeaderElection  5m20s  kube-controller-manager  control-plane2_b0475d49-7010-4f03-8a9d-34f82ed60cd4 became leader
    

    您也可以使用依 name 分組的 kubernetes.io/anthos/leader_election_master_status 指標,觀察領導權的失去和取得過程。

只有在現任領導者失敗時,才會進行領導者選舉程序。您可以查看依 container_name kube-controller-manager 篩選的 kubernetes.io/anthos/container/uptimekubernetes.io/anthos/container/restart_count 指標,確認失敗原因。

如果領導者選舉程序持續執行或失敗,請參考下列補救措施考量事項:

  • 如果 KCM 每隔幾分鐘或更短的時間就會重新啟動,請檢查 KCM 記錄檔,確認是否有對 API 伺服器提出的要求失敗。要求失敗表示元件之間有連線問題,或是服務的某個部分超載。
  • 如果控制器管理員無法與 API 伺服器通訊太久,即使連線稍後恢復,續約也會失敗,KCM 執行個體會失去領導權。
  • 如果控制層已複製,新的領導者應會順利接管,不會發生停機情形。您無須採取任何行動,多雲端或地區叢集的控制層一律會複製。請勿嘗試停用複製控制層的領導者選舉。您無法在不停機的情況下重新啟用領導者選舉。

後續步驟

如需其他協助,請與 Cloud Customer Care 團隊聯絡。

如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」: