[經驗交流] Active-Active 方式設置 kubernetes master 多節點高可用


關於 kubernetes master 多節點以及高可用,網上的方法多采取 Active-Standby 方式,即:

通過 pacemaker 等軟件使得某種 master 服務(apiserver,scheduler,controller-manager)同一時間只運行一個實例。具體來說,如果有多台master node,上面都安裝了scheduler,controller-manager, apiserver:

  • 對於schduler服務,同一時間只在一台master 節點上運行,
  • 對於controller-manager,同一時間只在一台master 節點上運行,
  • 對於apiserver,同一時間只在一台master 節點上運行,

這種方法的可靠性有待探討,至少我出現過這樣的問題:一旦因pacemaker出現問題或者管理員誤操作,在多個節點上同時啟動了scheduler或者controller-manager,就會造成系統故障。

 

實際上,參考kubernetes最新文檔,官方有相關的提示:

Master elected components

So far we have set up state storage, and we have set up the API server, but we haven’t run anything that actually modifies cluster state, such as the controller manager and scheduler. To achieve this reliably, we only want to have one actor modifying state at a time, but we want replicated instances of these actors, in case a machine dies. To achieve this, we are going to use a lease-lock in the API to perform master election. We will use the --leader-elect flag for each scheduler and controller-manager, using a lease in the API will ensure that only 1 instance of the scheduler and controller-manager are running at once. 

也就是說,controller-manager和scheduler 只要加上 --leader-elect=true 參數就可以同時啟動,系統會自動選舉leader。而apiserver本來就可以多節點同時運行,只要它們連接同一個etcd cluster 就可以了。

按照上面的思路,master ha 架構可以如下設計:

注:

1. 首先設置etcd cluster

  關於etcd的cluster設置方法,網上有成熟的文檔可以參考;

2. 各個master 節點的apiserver同時啟動,指向相同的 etcd cluster 

3. apiserver 服務設置 VIP

  建議通過keepalived+lvs 或者 haproxy設置,支持負載均衡;

4. 各個master 節點的controller-manager 和 scheduler 加 --leader-elect=true 參數同時啟動

 

經過上面的設置,所有master節點上的相關服務都是 Active 狀態,如果有一個節點或者一個服務掛掉都不影響整個集群的運行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM