1. 程式人生 > >容器編排,跨叢集部署(腳踩2只船)問題研究

容器編排,跨叢集部署(腳踩2只船)問題研究

---【前言】---

https://www.cnblogs.com/cmt/p/14306142.html

問題來自於部落格園,討論容器編排,跨叢集部署(腳踩2只船)問題。

 

 

---【(腳踩2只船)問題,K8s的解決方案】---

部落格園提出“假如整個 kubernetes 叢集宕機怎麼辦?”

在我的理解,問題可以看成“k8s的master崩潰咋辦?”

這個問題真實存在的。請看:

問:“如何刪除namespace下的所有的資源?就是namespace 和她下面的資源 pod development 這些。目前刪除後一直重新恢復?”

 

老司機都知道,是會有這類的問題。因為這裡環節太多:

go呼叫了http,又呼叫了其他pod,和埠,最終又呼叫了etcd資料庫。

 

問:“k8s的master崩潰咋辦?”

答:用多master,或重啟master的機子唄。多master理論上還有etcd同步失敗問題。還必須遵守分散式約束【3master壞1,5master壞2】壞多了,整個就癱瘓了。

 

問:“k8s的master崩潰咋辦?”

答:用多個叢集也行。就像文章開頭部落格園那樣。不過,我個人覺得,應該是建立2套,毫無關聯的叢集k8s叢集,然後從外部lb,給這兩個叢集轉發流量。這裡以部落格園為例:

原來:

阿里雲lb---》k8s master1-》master1內部的負載均衡,master1內部的dns---》pod

 

現在:

阿里雲lb---》k8s master1-》master1內部的負載均衡,master1內部的dns---》pod

阿里雲lb---》k8s master2-》master1內部的負載均衡,master2內部的dns---》pod

 

這樣就達到了,文章最初的目的:容器編排跨叢集部署(腳踩2只船)。下面我來談談,k4t對這個問題的解法。

 

---【(腳踩2只船)問題,k4t的解決方案】---

問:“k4t的master崩潰咋辦?”

答:k4t基本不會崩潰。理由如下:

1 K4t呼叫的環節少。Linux檔案目錄,壞的機率比較小。K4t的資料庫是一堆【目錄】和【xml文字檔案】組成的樹形目錄結構。請問你家linux的檔案或目錄,崩吧總壞嗎?退一萬步說,檔案目錄壞了,也好修理恢復啊。

2 通過定期同步資料庫目錄,到master2,即可實現【單個叢集k4t高可用】。比k8s叢集至少3臺機子節省硬體。還沒有【3壞1,5壞2】約束。

3 k4t不用虛擬網路veth,沒有相關元件,天生就比k8s穩定。

4 程式程式碼引擎是linux版powershell,powershell程序掛了,重啟一個powershell即可。就是這麼簡單粗暴。

5 根據下面【附錄:k4t元件介紹】中的說明,k4t的master機,實際上稱作【部署機子】更合適。K4t的部署機子,部署完應用後,即可關機。待下次需要變更部署,或者新增、刪除、部署時再開機即可。也就是說k4t-master機掛了無所謂。

而k4t真正的master機,其實是負載均衡機。需要對負載均衡機進行高可用,具體做法,在本篇文章中,就不多談了。

 

問:容器編排,跨叢集部署(腳踩2只船)。k4t和k8s有啥區別?

答:根據下面【附錄:k4t元件介紹】中的說明,k4t的負載均衡機(envoy api-getway)是在外部的。k4t的dns機也是在外部的。這就是k4t叢集,和k8s叢集,去解決(腳踩2只船)問題最大的不同。

 

下面,我以腳踩3只船,來講解k4t的跨叢集部署,和k8s的區別。

系統架構:

叢集1:master1,帶node1,node2

叢集2:master2,帶node3,node4

叢集3:master3,帶node5,node6

叢集123,共用同一個【負載均衡器1】。共用同一個【dns1】。

 

使用者流量:

阿里雲lb---》【k4t負載均衡器1】---》node1,node2,node3上的ip---》node1,node2,node3上的容器

阿里雲lb---》【k4t dns1】---》node1,node2,node3上的ip---》node1,node2,node3上的容器

需要說明的是:k4t的dns,是非必要元件。K4t叢集,可以只用負載均衡api-getway。

 

命令目的:把當叢集1內,應用1,的容器1,的ip,註冊到負載均衡叢集。

命令:

ssh root@你的k4y的負載均衡器的ip pwsh -f /etc/envoy_ps1/add-eds.ps1 -cname 'abc1' -ip 1.2.3.4 -port 80

 

說明:

1 這個命令,由【在node上的k4t-node引擎】發出,被k4t負載均衡器接收。與使用者無關,使用者也不需要寫任何程式碼。

2 命令不分叢集,2個叢集的命令沒差別。

3 -cname 'abc1' ,代表應用1的名字。2個叢集的命令沒差別。當然了,這裡算是好處。當然也有壞處,2個叢集的2個應用,若不是同一應用,則不應該重名。

4 -ip 1.2.3.4 代表容器1的ip。2個叢集的命令沒差別。當然了,2個叢集的2個容器,ip必須不同。這個值來自於node內的ip設定。2個叢集內,Node內的ip不能重複。

 

結論:

K4t的負載均衡器,和k4t的dns,具有同時對多個【k4t容器叢集】服務的能力。

對【多個k4t容器叢集】和對【單個k4t容器叢集】操作,完全相同!不需要任何額外的設定。

 

---【附錄:k4t簡介】---

k4t即:《kaiiit生產級別的容器編排系統》  

https://gitee.com/chuanjiao10/k4t

預計2021年6月釋出alphi1版

中文名:《海賊帝·優秀的怕被沽溝暗殺·黑毛腿》

中文別名:《ps1倚天劍》

 

這是一套基於《卡死你3000》打造的,全功能,容器叢集的自動化部署、擴容以及運維的平臺。(國產k8s)。它採用開放式架構,具有網路簡單穩定,使用簡單,指令碼操控靈活的特點。

powershell傳教士 業餘時間 作品

群名稱:k4t官方1群  群   號:722528388

 

---【附錄:k4t 元件介紹】---

 問:完美版的k4t專案,由哪幾部分元件構成?

 答:

 1 master端。 正在開發中,預計2021年6月前釋出alphi1版。

 2 node端。已經開發完成,並部分開源免費成為雛形版。

 3 動態負載均衡api閘道器。(外部)

提供反向代理,和負載均衡功能。用於給一組容器應用,形成統一的ip。

目前基於我編寫的envoy後端增刪指令碼。

https://gitee.com/chuanjiao10/envoy_powershell

你也可diy,改成自己喜歡的。

 

 4 動態dns。(外部)

是非必要元件。K4t叢集,可以只用負載均衡器api-getway。

用於給一組容器應用,形成統一的服務名字。

目前基於未啟用的無圖win2019。當然有圖版win2019也行。你也可diy,改成自己喜歡的。例如:dnsmasq

 

---【後記】---

我滴媽呀,這個世界變化太快,微服務,容器都要腳踩2只船了,謝謝觀