在Wiki中提到,所謂HA(Highly Available)就是指系統無中斷的執行其功能的能力,通常是透過提高系統的容錯能力來實現。
HA的Kubernetes集群就是指當我們的Master Node故障時,系統依然正常運作。而我們提高容錯能力的方式就是增加更多的Master Node,這邊是基於kubeadm來建立,所以也是以on Premise環境為主。
這是一種共識演算法,Server會分為三種角色:
正常情況下只會有一個Leader,其他都是Follower,由Leader來決定集群中的各種大小事。
而Leader是透過選舉來決定,有效票的數量必須大於等於N/2 + 1,也就是3台Server中,至少要2台是正常運作的。
RAFT就是etcd集群決定Leader的做法,所以我們最多只能允許小於一半的Server是故障的,而Server的數量最好要是偶數。
建立HA的Kubernetes集群有兩種etcd的結構:
無論是哪種結構,因為RAFT演算法的關係,奇數個Node會有較佳的效果。
我們增加了更多的Master Node後,當一個Request進來,要如何知道要送去哪個Master Node上的API Server呢?這時候我們需要的是LoadBalancer來根據當前的狀態決定哪個Master Node比較適合,這個LoadBalancer沒有限制,推薦使用HAProxy或是Nginx。
我們接下來需要做的是:
建立一個叫做kube-apiserver的LoadBalancer來解析DNS。
將一個Control Plane Node加入Load Balancer並測試。
nc -v LOAD_BALANCER_IP PORT
將剩下的Control Plane Node加入Load Balancer。