天天看點

混合雲環境中擴充Kubernetes的挑戰及方案

引    言

假設您的業務是線上的:您擁有自己的資料中心,擁有用于運作您網站的私有雲。您需要部署許多伺服器來運作應用程式并存儲其資料。

也許大多數時候,您的網站的整體流量非常穩定。但也許也有時候,網站的流量會面臨突然的增長,這時您該如何應對?

首先,您需要能夠擴充應用程式,以應對流量增加。若您不想在每年隻使用幾次的新硬體上額外花錢,您可以考慮轉向混合雲模式。

從私有雲轉向混合雲,可以大大節省時間和成本。将應用程式(部分)擴充到公有雲後,您就隻需在使用它們時、僅為您所使用的資源付費。

但是,您該如何選擇公有雲?您可以選擇多個公有雲嗎?

簡短來說,回答是肯定的,您很有可能需要選擇多個公有雲提供商。您也許有不同的團隊,需要處理不同的應用程式,有不同的要求,是以一個雲提供商可能無法滿足您的所有需求。此外,許多組織需要遵守某些法律、法規和政策,這些法律、法規和政策要求他們的資料必須實際駐留在某些特定地點。使用多個公有雲的政策可以幫助組織滿足這些嚴格的、多樣化的要求。他們還可以從多個資料中心區域或可用區域中進行選擇,以盡可能接近最終使用者,進而為他們提供最佳性能和最小延遲。

跨雲擴充的挑戰

你已經決定使用雲了,是以讓我們回過頭來思考一下最初的問題。您的應用程式具有針對您的應用程式的微服務部署架構,這一架構上運作着需要擴充的容器。而這,就是Kubernetes發揮作用的地方。Kubernetes這一解決方案,可幫助您管理和編排節點叢集中的容器化應用程式。雖然Kubernetes将幫助您管理和擴充部署、節點和叢集,但它無法幫助您輕松地跨雲提供商管理和擴充它們。這一點我們會在稍後詳細介紹。

Kubernetes叢集是一組機器(實體/虛拟),Kubernetes為叢集提供資源以運作應用程式。首先,您需要了解的基本Kubernetes概念是:

Pod是控制一個或多個容器的單元,它會作為一個應用程式來被排程。通常,您應該為每個應用程式建立一個Pod,以便您可以單獨擴充和控制它們。

節點元件是Kubernetes中的worker machine。節點可以是虛拟機(VM)或實體機,具體取決于叢集。每個節點都包含運作pod所需的服務,并由主元件管理。

主元件管理着Pod的生命周期。如果Pod死亡,Controller會建立一個新的Pod;如果你對Pod進行擴容或縮容,那麼Controller會建立/銷毀你的Pod。有關Controller類型的更多資訊,可以參閱此處:

https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/

這三個元件的作用是擴充和排程容器。主元件訓示排程和擴容的指令,然後節點相應地根據指令來編排pod。

混合雲環境中擴充Kubernetes的挑戰及方案

上述隻是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的挑戰及方案
混合雲環境中擴充Kubernetes的挑戰及方案

現在我們已經從Kubernetes叢集中為每個節點部署了許多pod。這些pod将由Kubernetes和Rancher的内部系統使用。

下面繼續為兩個叢集部署工作負載。按順序選擇預設項目; 這将打開Workloads頁籤。單擊Deploy,将第一個叢集的名稱及Docker鏡像設定為httpd,第二個叢集的設定為nginx,因為我們希望将我們的Web伺服器暴露給Port映射區域。選擇一個四層負載均衡中的Internet流量。 

混合雲環境中擴充Kubernetes的挑戰及方案
混合雲環境中擴充Kubernetes的挑戰及方案
混合雲環境中擴充Kubernetes的挑戰及方案
混合雲環境中擴充Kubernetes的挑戰及方案

如果單擊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數量減少了。 

混合雲環境中擴充Kubernetes的挑戰及方案
混合雲環境中擴充Kubernetes的挑戰及方案

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

混合雲環境中擴充Kubernetes的挑戰及方案
混合雲環境中擴充Kubernetes的挑戰及方案

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

混合雲環境中擴充Kubernetes的挑戰及方案

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

混合雲環境中擴充Kubernetes的挑戰及方案

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

混合雲環境中擴充Kubernetes的挑戰及方案

稍等一下,最終你應該看到5個節點啟動并運作。 

混合雲環境中擴充Kubernetes的挑戰及方案

讓我們檢查一下Global頁籤,這樣我們就可以對Rancher正在管理的所有叢集有一個全局的了解。 

混合雲環境中擴充Kubernetes的挑戰及方案

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

混合雲環境中擴充Kubernetes的挑戰及方案

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

混合雲環境中擴充Kubernetes的挑戰及方案
混合雲環境中擴充Kubernetes的挑戰及方案

總    結

讓我們回顧一下我們的Kubernetes叢集縮放練習:

我們使用Rancher建立了兩個叢集

我們部署了含有1個 nginx  Pod和5個httpd  Pod的工作負載

對這兩個部署進行擴容和縮容

調整了叢集的大小

所有這些操作,都是通過在Rancher友好且直覺的UI上,通過一些簡單點選而完成的。當然,您也可以完全使用API完成這些操作。

在任何一種情況下,您都有一個中心點,您可以從中管理所有Kubernetes叢集,觀察其狀态或根據需要擴充部署。如果您正在尋找一種工具來幫助您在混合/多雲、多區域叢集中進行基礎架構管理和容器編排,那麼開源的Rancher Kubernetes平台可能非常适合您。

繼續閱讀