混合云環(huán)境中擴(kuò)展Kubernetes遇到的挑戰(zhàn)及解決方案
流量突增時(shí),我們需要擴(kuò)展應(yīng)用程序以滿足用戶需求。本文分享了擴(kuò)展Kubernetes以及管理混合云環(huán)境時(shí)可能遇到的挑戰(zhàn),以及如何簡(jiǎn)單高效地完成Kubernetes擴(kuò)展。
引 言
假設(shè)您的業(yè)務(wù)是在線的:您擁有自己的數(shù)據(jù)中心,擁有用于運(yùn)行您網(wǎng)站的私有云。您需要部署許多服務(wù)器來(lái)運(yùn)行應(yīng)用程序并存儲(chǔ)其數(shù)據(jù)。
也許大多數(shù)時(shí)候,您的網(wǎng)站的整體流量非常穩(wěn)定。但也許也有時(shí)候,網(wǎng)站的流量會(huì)面臨突然的增長(zhǎng),這時(shí)您該如何應(yīng)對(duì)?
首先,您需要能夠擴(kuò)展應(yīng)用程序,以應(yīng)對(duì)流量增加。若您不想在每年只使用幾次的新硬件上額外花錢,您可以考慮轉(zhuǎn)向混合云模式。
從私有云轉(zhuǎn)向混合云,可以大大節(jié)省時(shí)間和成本。將應(yīng)用程序(部分)擴(kuò)展到公有云后,您就只需在使用它們時(shí)、僅為您所使用的資源付費(fèi)。
但是,您該如何選擇公有云?您可以選擇多個(gè)公有云嗎?
簡(jiǎn)短來(lái)說(shuō),回答是肯定的,您很有可能需要選擇多個(gè)公有云提供商。您也許有不同的團(tuán)隊(duì),需要處理不同的應(yīng)用程序,有不同的要求,因此一個(gè)云提供商可能無(wú)法滿足您的所有需求。此外,許多組織需要遵守某些法律、法規(guī)和政策,這些法律、法規(guī)和政策要求他們的數(shù)據(jù)必須實(shí)際駐留在某些特定地點(diǎn)。使用多個(gè)公有云的策略可以幫助組織滿足這些嚴(yán)格的、多樣化的要求。他們還可以從多個(gè)數(shù)據(jù)中心區(qū)域或可用區(qū)域中進(jìn)行選擇,以盡可能接近最終用戶,從而為他們提供***性能和最小延遲。
跨云擴(kuò)展的挑戰(zhàn)
你已經(jīng)決定使用云了,所以讓我們回過(guò)頭來(lái)思考一下最初的問(wèn)題。您的應(yīng)用程序具有針對(duì)您的應(yīng)用程序的微服務(wù)部署架構(gòu),這一架構(gòu)上運(yùn)行著需要擴(kuò)展的容器。而這,就是Kubernetes發(fā)揮作用的地方。Kubernetes這一解決方案,可幫助您管理和編排節(jié)點(diǎn)集群中的容器化應(yīng)用程序。雖然Kubernetes將幫助您管理和擴(kuò)展部署、節(jié)點(diǎn)和集群,但它無(wú)法幫助您輕松地跨云提供商管理和擴(kuò)展它們。這一點(diǎn)我們會(huì)在稍后詳細(xì)介紹。
Kubernetes集群是一組機(jī)器(物理/虛擬),Kubernetes為集群提供資源以運(yùn)行應(yīng)用程序。首先,您需要了解的基本Kubernetes概念是:
Pod是控制一個(gè)或多個(gè)容器的單元,它會(huì)作為一個(gè)應(yīng)用程序來(lái)被調(diào)度。通常,您應(yīng)該為每個(gè)應(yīng)用程序創(chuàng)建一個(gè)Pod,以便您可以單獨(dú)擴(kuò)展和控制它們。
節(jié)點(diǎn)組件是Kubernetes中的worker machine。節(jié)點(diǎn)可以是虛擬機(jī)(VM)或物理機(jī),具體取決于集群。每個(gè)節(jié)點(diǎn)都包含運(yùn)行pod所需的服務(wù),并由主組件管理。
主組件管理著Pod的生命周期。如果Pod死亡,Controller會(huì)創(chuàng)建一個(gè)新的Pod;如果你對(duì)Pod進(jìn)行擴(kuò)容或縮容,那么Controller會(huì)創(chuàng)建/銷毀你的Pod。有關(guān)Controller類型的更多信息,可以參閱此處:
https://kubernetes.io/docs/con ... aset/
這三個(gè)組件的作用是擴(kuò)展和調(diào)度容器。主組件指示調(diào)度和擴(kuò)容的命令,然后節(jié)點(diǎn)相應(yīng)地根據(jù)命令來(lái)編排pod。
上述只是Kubernetes非常基礎(chǔ)的概念,這篇《零基礎(chǔ)入門│帶你理解Kubernetes》可以帶你更詳細(xì)地理解Kubernetes。
嘗試使用Kubernetes解決跨云擴(kuò)展的問(wèn)題時(shí),會(huì)遇到一些關(guān)鍵挑戰(zhàn):
- 難以管理多個(gè)云、多個(gè)集群,設(shè)置用戶,設(shè)置策略
- 安裝和配置的復(fù)雜性
- 不同環(huán)境的用戶或團(tuán)隊(duì)會(huì)有不同體驗(yàn)
Rancher可以幫助您解決上述難題。Rancher是一個(gè)開(kāi)源的容器管理平臺(tái),用于在生產(chǎn)中運(yùn)行Kubernetes。Rancher的下述功能可以幫助我們管理和擴(kuò)展我們的應(yīng)用程序,無(wú)論計(jì)算資源是在本地托管還是在多個(gè)云上托管:
- 跨多個(gè)集群和云的通用基礎(chǔ)架構(gòu)管理
- 簡(jiǎn)單易用的Kubernetes配置和部署界面
- 一鍵輕松擴(kuò)展Pod和集群
- 訪問(wèn)控制和用戶管理(ldap,AD)
- 工作負(fù)載、RBAC、政策和項(xiàng)目管理
- 在多云、甚至有可能是多個(gè)任何可以運(yùn)行Kubernetes的基礎(chǔ)架構(gòu)上,Rancher都可以成為您的多個(gè)Kubernetes集群的單一控制點(diǎn)。
下面讓我們看看我們?nèi)绾喂芾韮蓚€(gè)不同區(qū)域的多個(gè)Kubernetes集群。
啟動(dòng)Rancher 2.0實(shí)例
首先,啟動(dòng)Rancher 2.0實(shí)例。具體方法可以參照這個(gè)快速上手指南:https://rancher.com/quick-start/
上手Rancher和Kubernetes
讓我們?cè)趦蓚€(gè)不同的地區(qū)的GCP中創(chuàng)建兩個(gè)托管的Kubernetes集群。為此,您需要一個(gè)服務(wù)帳戶密鑰。
在Global選項(xiàng)卡中,我們可以看到所有可用的集群及其狀態(tài)。從Provisioning狀態(tài)開(kāi)始,集群準(zhǔn)備好后,狀態(tài)會(huì)變成Active。
現(xiàn)在我們已經(jīng)從Kubernetes集群中為每個(gè)節(jié)點(diǎn)部署了許多pod。這些pod將由Kubernetes和Rancher的內(nèi)部系統(tǒng)使用。
下面繼續(xù)為兩個(gè)集群部署工作負(fù)載。按順序選擇默認(rèn)項(xiàng)目; 這將打開(kāi)Workloads選項(xiàng)卡。單擊Deploy,將***個(gè)集群的名稱及Docker鏡像設(shè)置為httpd,第二個(gè)集群的設(shè)置為nginx,因?yàn)槲覀兿M麑⑽覀兊腤eb服務(wù)器暴露給Port映射區(qū)域。選擇一個(gè)四層負(fù)載均衡中的Internet流量。
如果單擊nginx / httpd工作負(fù)載,您將看到Rancher實(shí)際上按照Kubernetes的建議創(chuàng)建了一個(gè)部署來(lái)管理ReplicaSet。您還將看到這個(gè)ReplicaSet創(chuàng)建的Pod。
擴(kuò)展Pod和集群
Rancher實(shí)例正在管理兩個(gè)集群:
- us-east1b-cluster,運(yùn)行5個(gè)httpd Pod
- europe-west4-a cluster,運(yùn)行1個(gè) nginx Pod
單擊Scale列下的“-”(減號(hào)圖標(biāo)),可以減少httpd Pod。我們很快就看到Pod數(shù)量減少了。
若想要擴(kuò)展pod,請(qǐng)單擊Scale列下的“+”(加號(hào)圖標(biāo))。完成后,您可以立即看到Pod正在被創(chuàng)建,以及ReplicaSet正在擴(kuò)展事件。使用Pod的右側(cè)菜單嘗試刪除其中一個(gè)pod,留意觀察ReplicaSet如何重新創(chuàng)建它,以匹配所需的狀態(tài)。
如此一來(lái),***個(gè)集群的httpd Pod數(shù)從5個(gè)變到了2個(gè),第二個(gè)集群的nginx Pod從1個(gè)變到了7個(gè)?,F(xiàn)在,第二個(gè)集群看起來(lái)幾乎耗盡了資源。
通過(guò)Rancher,我們還可以通過(guò)添加額外的節(jié)點(diǎn)來(lái)擴(kuò)展集群。下面嘗試這樣做一下,讓我們將節(jié)點(diǎn)數(shù)編輯為5。
雖然是Rancher向我們展示了“協(xié)調(diào)集群”,但其實(shí)是Kubernetes在幕后升級(jí)集了群主服務(wù)器并調(diào)整節(jié)點(diǎn)池的大小。
稍等一下,最終你應(yīng)該看到5個(gè)節(jié)點(diǎn)啟動(dòng)并運(yùn)行。
讓我們檢查一下Global選項(xiàng)卡,這樣我們就可以對(duì)Rancher正在管理的所有集群有一個(gè)全局的了解。
現(xiàn)在我們可以添加更多Pod(如果我們想的話),因?yàn)楝F(xiàn)在我們有新的可用資源了。下面試著把pod數(shù)變?yōu)?3。
最重要的是,所有這些操作都是在沒(méi)有停機(jī)的情況下完成的。在向上或向下擴(kuò)展Pod或調(diào)整集群大小時(shí),為httpd / nginx部署***公有IP,HTTP響應(yīng)狀態(tài)代碼始終為200。
總 結(jié)
讓我們回顧一下我們的Kubernetes集群縮放練習(xí):
- 我們使用Rancher創(chuàng)建了兩個(gè)集群
- 我們部署了含有1個(gè) nginx Pod和5個(gè)httpd Pod的工作負(fù)載
- 對(duì)這兩個(gè)部署進(jìn)行擴(kuò)容和縮容
- 調(diào)整了集群的大小
所有這些操作,都是通過(guò)在Rancher友好且直觀的UI上,通過(guò)一些簡(jiǎn)單點(diǎn)擊而完成的。當(dāng)然,您也可以完全使用API完成這些操作。
在任何一種情況下,您都有一個(gè)中心點(diǎn),您可以從中管理所有Kubernetes集群,觀察其狀態(tài)或根據(jù)需要擴(kuò)展部署。如果您正在尋找一種工具來(lái)幫助您在混合/多云、多區(qū)域集群中進(jìn)行基礎(chǔ)架構(gòu)管理和容器編排,那么開(kāi)源的Rancher Kubernetes平臺(tái)可能非常適合您。