「容器雲架構」設置高可用性Kubernetes Master

2020-01-09     首席架構師

您可以使用kube-up或kube-down腳本為Google Compute Engine複製Kubernetes母版。本文檔介紹了如何使用kube-up / down腳本來管理高可用性(HA)母版,以及如何實現HA母版以與GCE一起使用。

  • 在你開始之前
  • 啟動與HA兼容的集群
  • 添加新的主副本
  • 刪除主副本
  • 處理主副本故障
  • 複製HA群集的主伺服器的最佳做法
  • 實施說明
  • 補充閱讀

在你開始之前


您需要具有Kubernetes集群,並且必須將kubectl命令行工具配置為與集群通信。如果您還沒有集群,則可以使用Minikube創建一個集群,也可以使用以下Kubernetes遊樂場之一:

  • Katacoda
  • Play with Kubernetes


要檢查版本,請輸入kubectl版本。

啟動與HA兼容的集群


要創建新的HA兼容群集,必須在kube-up腳本中設置以下標誌:

  • MULTIZONE = true-防止從伺服器默認區域以外的區域中刪除主副本kubelet。如果要在不同區域中運行主副本,則為必需項(建議)。
  • ENABLE_ETCD_QUORUM_READ = true-確保從所有API伺服器進行的讀取將返回最新數據。如果為true,則讀取將定向到領導者etcd副本。將此值設置為true是可選的:讀取將更可靠,但也將更慢。

(可選)您可以指定要在其中創建第一個主副本的GCE區域。設置以下標誌:

  • KUBE_GCE_ZONE = zone -第一個主副本將在其中運行的區域。

以下示例命令在GCE區域europe-west1-b中設置了HA兼容的集群:

MULTIZONE=true KUBE_GCE_ZONE=europe-west1-b ENABLE_ETCD_QUORUM_READS=true ./cluster/kube-up.sh

請注意,以上命令創建了一個具有一個主節點的集群;但是,您可以使用後續命令將新的主副本添加到群集中

添加新的主副本


創建與HA兼容的群集後,可以向其添加主副本。您可以通過使用帶有以下標誌的kube-up腳本來添加主副本:

  • KUBE_REPLICATE_EXISTING_MASTER=true-創建現有母版的副本。
  • KUBE_GCE_ZONE = zone-主副本將在其中運行的區域。必須與其他副本的區域位於同一區域。

您不需要設置MULTIZONE或ENABLE_ETCD_QUORUM_READS標誌,因為這些標誌是從啟動HA兼容群集時繼承的。

以下示例命令在現有的HA兼容群集上複製主伺服器:

KUBE_GCE_ZONE=europe-west1-c KUBE_REPLICATE_EXISTING_MASTER=true ./cluster/kube-up.sh


刪除主副本


您可以使用帶有以下標誌的kube-down腳本從HA群集中刪除主副本:

  • KUBE_DELETE_NODES = false-禁止刪除kubelet。
  • KUBE_GCE_ZONE = zone-將要從其中刪除主副本的區域。
  • KUBE_REPLICA_NAME =replica_name-(可選)要刪除的主副本的名稱。如果為空:將刪除給定區域中的任何副本。

以下示例命令從現有的HA集群中刪除主副本:

KUBE_DELETE_NODES=false KUBE_GCE_ZONE=europe-west1-c ./cluster/kube-down.sh


處理主副本故障


如果高可用性群集中的一個主副本失敗,則最佳實踐是從群集中刪除該副本,並在同一區域中添加一個新副本。以下示例命令演示了此過程:

刪除損壞的副本:

KUBE_DELETE_NODES=false KUBE_GCE_ZONE=replica_zone KUBE_REPLICA_NAME=replica_name ./cluster/kube-down.sh


添加一個新副本來代替舊副本:

KUBE_GCE_ZONE=replica-zone KUBE_REPLICATE_EXISTING_MASTER=true ./cluster/kube-up.sh


複製HA群集的主伺服器的最佳做法

  • 嘗試將主副本放置在不同的區域中。在區域故障期間,放置在區域內的所有主設備都會發生故障。為了使區域失效,還要將節點放置在多個區域中(有關詳細信息,請參閱多個區域)。
  • 不要將群集與兩個主副本一起使用。更改永久狀態時,兩副本群集上的共識要求兩個副本同時運行。結果,兩個副本都是必需的,任何副本的故障都會使群集變為多數故障狀態。因此,就HA而言,兩個副本群集不如單個副本群集。
  • 添加主副本時,群集狀態(etcd)將複製到新實例。如果群集很大,則可能需要很長時間才能複製其狀態。可以通過遷移etcd數據目錄來加快此操作,如此處所述(我們正在考慮在將來增加對etcd數據目錄遷移的支持)。

實施說明

總覽


每個主副本將在以下模式下運行以下組件:

  • etcd實例:將使用共識將所有實例聚在一起;
  • API伺服器:每個伺服器都將與本地etcd通信-群集中的所有API伺服器將可用;
  • 控制器,調度程序和集群自動縮放器:將使用租藉機制-它們中的每個實例只有一個在集群中處於活動狀態;
  • 加載項管理員:每個管理員將獨立工作,以使加載項保持同步。

此外,API伺服器之前將有一個負載平衡器,它將外部和內部流量路由到它們。

負載均衡


啟動第二個主副本時,將創建一個包含兩個副本的負載均衡器,並將第一個副本的IP位址提升為負載均衡器的IP位址。同樣,在刪除倒數第二個主副本之後,將刪除負載均衡器,並將其IP位址分配給最後剩餘的副本。請注意,創建和刪除負載平衡器是複雜的操作,傳播它們可能需要一些時間(約20分鐘)。

主服務和kubelets


系統沒有嘗試在Kubernetes服務中保留Kubernetes apiserver的最新列表,而是將所有流量定向到外部IP:

  • 在一個主群集中,IP指向單個主群集,
  • 在多主機集群中,IP指向主機前面的負載均衡器。

同樣,外部IP將由kubelet用於與主機通信。

Master證書


Kubernetes為每個副本的外部公共IP和本地IP生成主TLS證書。沒有用於副本的臨時公共IP的證書;要通過其短暫的公共IP訪問副本,必須跳過TLS驗證。

集群etcd


為了允許etcd集群,將打開在etcd實例之間進行通信所需的埠(用於內部集群通信)。為了確保這種部署的安全性,etcd實例之間的通信使用SSL授權。

原文:https://kubernetes.io/docs/tasks/administer-cluster/highly-available-master/

本文:http://jiagoushi.pro/set-high-availability-kubernetes-masters

討論:請加入知識星球或者微信圈子【首席架構師圈】

文章來源: https://twgreatdaily.com/zh-hk/xfQPnm8BUQOea5OwxTPp.html