隨着Kubernetes在企業中應用的愈來愈普遍和普及,愈來愈多的公司在生產環境中運維多個集羣。本文主要講述一些關於多集羣Kubernetes的思考,包括爲何選擇多集羣,多集羣的好處以及多集羣的落地方案。git
VMware2020年Kubernetes使用報告中指出,在採用kubernetes組織中20%的組織運行40+數目的集羣。
首先看看官方文檔中關於單集羣承載能力的描述:github
在v1.12,Kubernetes支持最多具備5000個節點的集羣。更具體地說,咱們支持知足如下全部條件的配置:
1:不超過5000個節點
2:Pod總數不超過150000
3:總共不超過300000個容器
4:每一個節點不超過100個Pod
雖然如今Kubernetes已經發展到v1.20,可是關於單集羣承載能力一直沒有變化。可見提升單集羣負載能力並非社區的發展方向。api
若是咱們的業務規模超過了5000臺,那麼企業不得不考慮多個集羣。網絡
2:混合雲或是多雲架構決定了須要多個集羣架構
到目前,其實多雲或是混合雲的架構很廣泛了。負載均衡
好比企業是一個全球化的公司,提供Global服務。運維
或像新浪微博同樣,自建數據中心 + 阿里雲,阿里雲用於服務彈性流量。分佈式
另外公有云並無想象中的海量資源。好比公有云的頭部客戶搞大促須要很大數量機器的時候,都是須要提早和公有云申請,而後公有云提早準備的。ide
爲了不被單家供應商鎖定,或是出於成本等考慮,企業選擇了多雲架構,也決定了咱們須要多個集羣。測試
3:不把雞蛋放到一個籃子裏
即便前面兩條都未知足,那麼咱們是否要把全部的工做負載部署到一個集羣哪?
若是集羣控制面出現故障,那麼全部的服務都會受到影響。
也許你們認爲Kubernetes的控制面自己就是高可用的(三個api-server),不會有整個控制層不可用的可能。
其實則否則,咱們在生產環境中,已經處理不少次相似故障了。若是一個應用(通常指須要調用api-server接口)在大量地調用api-server,會致使api-server接連掛掉,最終不可用。直到找到故障應用,並把故障應用刪除。
因此在生產環境中,一是須要嚴格控制訪問api-server的權限,二是須要作好測試,三是能夠考慮業務應用和基礎設施分開部署。
其實單集羣和多集羣的選擇和」選擇一臺超算 or 多臺普通機器「的問題相似。後來分佈式計算的發展說明你們選擇了多個普通機器。
多集羣在如下三個方面,有着更好地表現:
實際上,能夠經過兩種模型來構建多集羣應用程序架構
實際上,社區一直在探索多集羣Kubernetes的最佳實踐,目前來看主要有如下兩種。
1: 以Kubernetes爲中心
着力於支持和擴展用於多集羣用例的核心Kubernetes原語,從而爲多個集羣提供集中式管理平面。Kubernetes集羣聯邦項目採用了這種方法。
理解集羣聯邦的最好方法是可視化跨多個Kubernetes集羣的元集羣。想象一下一個邏輯控制平面,該邏輯控制平面編排多個Kubernetes主節點,相似於每一個主節點如何控制其自身集羣中的節點。
其實集羣聯邦本質上作了兩件事情:
截止到目前,聯邦項目尚處於 alpha狀態,當咱們選擇落地的時候,須要必定量的開發工做。
2:以網絡爲中心
「以網絡爲中心」的方法專一於在集羣之間建立網絡鏈接,以便集羣內的應用程序能夠相互通訊。
Istio的多集羣支持,Linkerd服務鏡像和Consul的Mesh網關是經過Service mesh 解決方案來實現網絡連通。
而另一種是Cilium關於多集羣網絡的方案。Cilium自己是一種CNI網絡,該方案少了服務治理的功能。
Cilium Cluster Mesh解決方案經過隧道或直接路由,解決跨多個Kubernetes集羣的Pod IP路由,而無需任何網關或代理。固然咱們須要規劃好每一個集羣的POD CIDR。
上面咱們講到了兩種落地多集羣Kubernetes的方案,其實並非非A即B。
好比,當咱們在落地大集羣的過程當中,不少公司只是用Kubernetes解決部署的問題。服務發現選擇consul,zk等註冊中心,配置文件管理使用配置中心,負載均衡也沒有使用kubernetes中Service。
此時結合兩種方案是最佳實踐。
集羣聯邦解決部署和發佈的問題。Service mesh解決多集羣流量訪問的問題。不過此時,工做負載集羣中的Pod,Service mesh的控制面以及網關都須要對接外部的註冊中心。具體架構以下: