本文已發布超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

kubeadm:使用 etcd Learner 安全地加入控制平面節點

kubeadm 工具現在支援 etcd learner 模式,讓您能夠透過利用 etcd 3.4 版本中引入的 learner 模式 功能,來增強 Kubernetes 叢集的彈性和穩定性。本指南將引導您使用 kubeadm 的 etcd learner 模式。預設情況下,kubeadm 在每個控制平面節點上運行本地 etcd 實例。

在 v1.27 中,kubeadm 引入了一個新的功能閘道 EtcdLearnerMode。啟用此功能閘道後,當加入新的控制平面節點時,將建立一個新的 etcd 成員作為 learner,並在 etcd 資料完全對齊後才升級為投票成員。

使用 etcd learner 模式有什麼優勢?

etcd learner 模式提供了幾個令人信服的理由,讓您考慮在 Kubernetes 叢集中採用它

  1. 增強的彈性:etcd learner 節點是非投票成員,它們在完全運作之前會趕上領導者的日誌。這可以防止新的叢集成員擾亂仲裁或導致領導者選舉,從而在成員變更期間使叢集更具彈性。
  2. 減少叢集不可用性:傳統的添加新成員方法通常會導致叢集不可用時段,尤其是在基礎架構緩慢或組態錯誤的情況下。etcd learner 模式最大限度地減少了此類中斷。
  3. 簡化的維護:Learner 節點提供了一種更安全且可逆的方式來新增或更換叢集成員。這降低了在成員新增期間因組態錯誤或失誤而導致意外叢集停機的風險。
  4. 改進的網路容錯能力:在涉及網路分割的場景中,learner 模式允許更優雅的處理。根據新成員落地的分割區,它可以與現有的叢集無縫整合,而不會造成中斷。

總之,etcd learner 模式提高了 Kubernetes 叢集在成員新增和變更期間的可靠性和可管理性,使其成為叢集運營商的寶貴功能。

節點如何加入使用新模式的叢集

建立由 learner 模式的 etcd 支援的 Kubernetes 叢集

有關使用 kubeadm 建立高可用性叢集的一般說明,您可以參考 使用 kubeadm 建立高可用性叢集

若要使用 kubeadm 建立由 learner 模式的 etcd 支援的 Kubernetes 叢集,請按照下列步驟操作

# kubeadm init --feature-gates=EtcdLearnerMode=true ...
kubeadm init --config=kubeadm-config.yaml

kubeadm 組態檔案如下所示

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
featureGates:
  EtcdLearnerMode: true

kubeadm 工具部署了一個單節點 Kubernetes 叢集,其中 etcd 設定為使用 learner 模式。

將節點加入 Kubernetes 叢集

在將控制平面節點加入新的 Kubernetes 叢集之前,請確保現有的控制平面節點和所有 etcd 成員都處於健康狀態。

使用 etcdctl 檢查叢集健康狀態。如果 etcdctl 不可用,您可以在容器映像中運行此工具。您可以使用容器運行時環境直接使用工具(例如 crictl run)執行此操作,而不是透過 Kubernetes 執行

以下是在用戶端命令中使用安全通訊來檢查 etcd 叢集健康狀態的範例

ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  member list
...
dc543c4d307fadb9, started, node1, https://10.6.177.40:2380, https://10.6.177.40:2379, false

若要檢查 Kubernetes 控制平面是否健康,請運行 kubectl get node -l node-role.kubernetes.io/control-plane= 並檢查節點是否準備就緒。

在將工作節點加入新的 Kubernetes 叢集之前,請確保控制平面節點處於健康狀態。

下一步

  • 功能閘道 EtcdLearnerMode 在 v1.27 中是 alpha 版,我們預計它將在 Kubernetes 的下一個次要版本 (v1.29) 中升級到 beta 版。
  • etcd 有一個開放問題可能會使該過程更加自動化:支援自動將 learner 成員升級為投票成員
  • 了解更多關於 kubeadm 組態格式 的資訊。

意見回饋

本指南是否有幫助?如果您有任何意見回饋或遇到任何問題,請告訴我們。我們隨時歡迎您的意見回饋!加入每兩週一次的 SIG Cluster Lifecycle 會議 或每週一次的 kubeadm 辦公時間。或透過 Slack (#kubeadm 頻道) 或 SIG 的郵件列表 與我們聯繫。