混合雲環境中擴充套件Kubernetes的挑戰及方案
流量突增時,我們需要擴充套件應用程式以滿足使用者需求。本文分享了擴充套件Kubernetes以及管理混合雲環境時可能遇到的挑戰,以及如何簡單高效地完成Kubernetes擴充套件。

------------
引 言
假設您的業務是線上的:您擁有自己的資料中心,擁有用於執行您網站的私有云。您需要部署許多伺服器來執行應用程式並存儲其資料。
也許大多數時候,您的網站的整體流量非常穩定。但也許也有時候,網站的流量會面臨突然的增長,這時您該如何應對?
首先,您需要能夠擴充套件應用程式,以應對流量增加。若您不想在每年只使用幾次的新硬體上額外花錢,您可以考慮轉向混合雲模式。
從私有云轉向混合雲,可以大大節省時間和成本。將應用程式(部分)擴充套件到公有云後,您就只需在使用它們時、僅為您所使用的資源付費。
但是,您該如何選擇公有云?您可以選擇多個公有云嗎?
簡短來說,回答是肯定的,您很有可能需要選擇多個公有云提供商。您也許有不同的團隊,需要處理不同的應用程式,有不同的要求,因此一個雲提供商可能無法滿足您的所有需求。此外,許多組織需要遵守某些法律、法規和政策,這些法律、法規和政策要求他們的資料必須實際駐留在某些特定地點。使用多個公有云的策略可以幫助組織滿足這些嚴格的、多樣化的要求。他們還可以從多個數據中心區域或可用區域中進行選擇,以儘可能接近終端使用者,從而為他們提供最佳效能和最小延遲。
跨雲擴充套件的挑戰
你已經決定使用雲了,所以讓我們回過頭來思考一下最初的問題。您的應用程式具有針對您的應用程式的微服務部署架構,這一架構上執行著需要擴充套件的容器。而這,就是Kubernetes發揮作用的地方。Kubernetes這一解決方案,可幫助您管理和編排節點叢集中的容器化應用程式。雖然Kubernetes將幫助您管理和擴充套件部署、節點和叢集,但它無法幫助您輕鬆地跨雲提供商管理和擴充套件它們。這一點我們會在稍後詳細介紹。
Kubernetes叢集是一組機器(物理/虛擬),Kubernetes為叢集提供資源以執行應用程式。首先,您需要了解的基本Kubernetes概念是:
Pod是控制一個或多個容器的單元,它會作為一個應用程式來被排程。通常,您應該為每個應用程式建立一個Pod,以便您可以單獨擴充套件和控制它們。
節點元件是Kubernetes中的worker machine。節點可以是虛擬機器(VM)或物理機,具體取決於叢集。每個節點都包含執行pod所需的服務,並由主元件管理。
主元件管理著Pod的生命週期。如果Pod死亡,Controller會建立一個新的Pod;如果你對Pod進行擴容或縮容,那麼Controller會建立/銷燬你的Pod。有關Controller型別的更多資訊,可以參閱此處:
ofollow,noindex" target="_blank">https://kubernetes.io/docs/con ... aset/
這三個元件的作用是擴充套件和排程容器。主元件指示排程和擴容的命令,然後節點相應地根據命令來編排pod。

上述只是Kubernetes非常基礎的概念,這篇《零基礎入門│帶你理解Kubernetes》可以帶你更詳細地理解Kubernetes。
嘗試使用Kubernetes解決跨雲擴充套件的問題時,會遇到一些關鍵挑戰:
- 難以管理多個雲、多個叢集,設定使用者,設定策略
- 安裝和配置的複雜性
- 不同環境的使用者或團隊會有不同體驗
Rancher可以幫助您解決上述難題。Rancher是一個開源的容器管理平臺,用於在生產中執行Kubernetes。Rancher的下述功能可以幫助我們管理和擴充套件我們的應用程式,無論計算資源是在本地託管還是在多個雲上託管:
- 跨多個叢集和雲的通用基礎架構管理
- 簡單易用的Kubernetes配置和部署介面
- 一鍵輕鬆擴充套件Pod和叢集
- 訪問控制和使用者管理(ldap,AD)
- 工作負載、RBAC、政策和專案管理
在多雲、甚至有可能是多個任何可以執行Kubernetes的基礎架構上,Rancher都可以成為您的多個Kubernetes叢集的單一控制點。
下面讓我們看看我們如何管理兩個不同區域的多個Kubernetes叢集。
啟動Rancher 2.0例項
首先,啟動Rancher 2.0例項。具體方法可以參照這個快速上手指南: https://rancher.com/quick-start/
上手Rancher和Kubernetes
讓我們在兩個不同的地區的GCP中建立兩個託管的Kubernetes叢集。為此,您需要一個服務帳戶金鑰。
在Global選項卡中,我們可以看到所有可用的叢集及其狀態。從Provisioning狀態開始,叢集準備好後,狀態會變成Active。


現在我們已經從Kubernetes叢集中為每個節點部署了許多pod。這些pod將由Kubernetes和Rancher的內部系統使用。
下面繼續為兩個叢集部署工作負載。按順序選擇預設專案; 這將開啟Workloads選項卡。單擊Deploy,將第一個叢集的名稱及Docker映象設定為httpd,第二個叢集的設定為nginx,因為我們希望將我們的Web伺服器暴露給Port對映區域。選擇一個四層負載均衡中的Internet流量。




如果單擊nginx / httpd工作負載,您將看到Rancher實際上按照Kubernetes的建議建立了一個部署來管理ReplicaSet。您還將看到這個ReplicaSet建立的Pod。
擴充套件Pod和叢集
Rancher例項正在管理兩個叢集:
- us-east1b-cluster,執行5個httpd Pod
- europe-west4-a cluster,執行1個 nginx Pod
單擊Scale列下的“-”(減號圖示),可以減少httpd Pod。我們很快就看到Pod數量減少了。


若想要擴充套件pod,請單擊Scale列下的“+”(加號圖示)。完成後,您可以立即看到Pod正在被建立,以及ReplicaSet正在擴充套件事件。使用Pod的右側選單嘗試刪除其中一個pod,留意觀察ReplicaSet如何重新建立它,以匹配所需的狀態。


如此一來,第一個叢集的httpd Pod數從5個變到了2個,第二個叢集的nginx Pod從1個變到了7個。現在,第二個叢集看起來幾乎耗盡了資源。

通過Rancher,我們還可以通過新增額外的節點來擴充套件叢集。下面嘗試這樣做一下,讓我們將節點數編輯為5。

雖然是Rancher向我們展示了“協調叢集”,但其實是Kubernetes在幕後升級集了群主伺服器並調整節點池的大小。

稍等一下,最終你應該看到5個節點啟動並執行。

讓我們檢查一下Global選項卡,這樣我們就可以對Rancher正在管理的所有叢集有一個全域性的瞭解。

現在我們可以新增更多Pod(如果我們想的話),因為現在我們有新的可用資源了。下面試著把pod數變為13。

最重要的是,所有這些操作都是在沒有停機的情況下完成的。在向上或向下擴充套件Pod或調整叢集大小時,為httpd / nginx部署命中公有IP,HTTP響應狀態程式碼始終為200。


總 結
讓我們回顧一下我們的Kubernetes叢集縮放練習:
- 我們使用Rancher建立了兩個叢集
- 我們部署了含有1個 nginx Pod和5個httpd Pod的工作負載
- 對這兩個部署進行擴容和縮容
- 調整了叢集的大小
所有這些操作,都是通過在Rancher友好且直觀的UI上,通過一些簡單點選而完成的。當然,您也可以完全使用API完成這些操作。
在任何一種情況下,您都有一箇中心點,您可以從中管理所有Kubernetes叢集,觀察其狀態或根據需要擴充套件部署。如果您正在尋找一種工具來幫助您在混合/多雲、多區域叢集中進行基礎架構管理和容器編排,那麼開源的Rancher Kubernetes平臺可能非常適合您。