集群高可用

Kubernetes 從 1.5 開始,通過 kops 或者 kube-up.sh 部署的集群會自動部署一個高可用的系統,包括

  • Etcd 集群模式

  • kube-apiserver 負載均衡

  • kube-controller-manager、kube-scheduler 和 cluster-autoscaler 自動選主(有且僅有一個運行實例)

如下圖所示

ha

注意:以下步驟假設每臺機器上 Kubelet 和 Docker 已配置並處於正常運行狀態。

Etcd 集群

安裝 cfssl

生成 CA certs:

生成 etcd server/peer certs

最後運行 etcd,將如下的 yaml 配置寫入每臺 etcd 節點的 /etc/kubernetes/manifests/etcd.yaml 文件中,注意替換

  • <podname> 爲 etcd 節點名稱 (比如 etcd0, etcd1etcd2

  • <etcd0-ip-address>, <etcd1-ip-address> and <etcd2-ip-address> 爲 etcd 節點的內網 IP 地址

注意:以上方法需要每個 etcd 節點都運行 kubelet。如果不想使用 kubelet,還可以通過 systemd 的方式來啓動 etcd:

kube-apiserver

kube-apiserver.yaml 放到每臺 Master 節點的 /etc/kubernetes/manifests/,並把相關的配置放到 /srv/kubernetes/,即可由 kubelet 自動創建並啓動 apiserver:

  • basic_auth.csv - basic auth user and password

  • ca.crt - Certificate Authority cert

  • known_tokens.csv - tokens that entities (e.g. the kubelet) can use to talk to the apiserver

  • kubecfg.crt - Client certificate, public key

  • kubecfg.key - Client certificate, private key

  • server.cert - Server certificate, public key

  • server.key - Server certificate, private key

注意:確保 kube-apiserver 配置 --etcd-quorum-read=true(v1.9 之後默認爲 true)。

kubeadm

如果使用 kubeadm 來部署集群的話,可以按照如下步驟配置:

kube-apiserver 啓動後,還需要爲它們做負載均衡,可以使用雲平臺的彈性負載均衡服務或者使用 haproxy/lvs 等爲 master 節點配置負載均衡。

kube-controller-manager 和 kube-scheduler

kube-controller manager 和 kube-scheduler 需要保證任何時刻都只有一個實例運行,需要一個選主的過程,所以在啓動時要設置 --leader-elect=true,比如

kube-scheduler.yamlkube-controller-manager.yaml 放到每臺 master 節點的 /etc/kubernetes/manifests/ 即可。

kube-dns

kube-dns 可以通過 Deployment 的方式來部署,默認 kubeadm 會自動創建。但在大規模集群的時候,需要放寬資源限制,比如

另外,也需要給 dnsmasq 增加資源,比如增加緩存大小到 10000,增加併發處理數量 --dns-forward-max=1000 等。

kube-proxy

默認 kube-proxy 使用 iptables 來爲 Service 作負載均衡,這在大規模時會產生很大的 Latency,可以考慮使用 IPVS 的替代方式(注意 IPVS 在 v1.9 中還是 beta 狀態)。

另外,需要注意配置 kube-proxy 使用 kube-apiserver 負載均衡的 IP 地址:

kubelet

kubelet 需要配置 kube-apiserver 負載均衡的 IP 地址

數據持久化

除了上面提到的這些配置,持久化存儲也是高可用 Kubernetes 集群所必須的。

  • 對於公有云上部署的集群,可以考慮使用雲平臺提供的持久化存儲,比如 aws ebs 或者 gce persistent disk

  • 對於物理機部署的集群,可以考慮使用 iSCSI、NFS、Gluster 或者 Ceph 等網絡存儲,也可以使用 RAID

參考文檔

Last updated