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

流量突增時,咱們須要擴展應用程序以知足用戶需求。本文分享了擴展Kubernetes以及管理混合雲環境時可能遇到的挑戰,以及如何簡單高效地完成Kubernetes擴展。nginx


引 言面試

假設您的業務是在線的:您擁有本身的數據中心,擁有用於運行您網站的私有云。您須要部署許多服務器來運行應用程序並存儲其數據。服務器

也許大多數時候,您的網站的總體流量很是穩定。但也許也有時候,網站的流量會面臨忽然的增加,這時您該如何應對?架構

首先,您須要可以擴展應用程序,以應對流量增長。若您不想在每一年只使用幾回的新硬件上額外花錢,您能夠考慮轉向混合雲模式。負載均衡

從私有云轉向混合雲,能夠大大節省時間和成本。將應用程序(部分)擴展到公有云後,您就只需在使用它們時、僅爲您所使用的資源付費。微服務

可是,您該如何選擇公有云?您能夠選擇多個公有云嗎?工具

簡短來講,回答是確定的,您頗有可能須要選擇多個公有云提供商。您也許有不一樣的團隊,須要處理不一樣的應用程序,有不一樣的要求,所以一個雲提供商可能沒法知足您的全部需求。此外,許多組織須要遵照某些法律、法規和政策,這些法律、法規和政策要求他們的數據必須實際駐留在某些特定地點。使用多個公有云的策略能夠幫助組織知足這些嚴格的、多樣化的要求。他們還能夠從多個數據中心區域或可用區域中進行選擇,以儘量接近最終用戶,從而爲他們提供最佳性能和最小延遲。性能

跨雲擴展的挑戰網站

你已經決定使用雲了,因此讓咱們回過頭來思考一下最初的問題。您的應用程序具備針對您的應用程序的微服務部署架構,這一架構上運行着須要擴展的容器。而這,就是Kubernetes發揮做用的地方。Kubernetes這一解決方案,可幫助您管理和編排節點集羣中的容器化應用程序。雖然Kubernetes將幫助您管理和擴展部署、節點和集羣,但它沒法幫助您輕鬆地跨雲提供商管理和擴展它們。這一點咱們會在稍後詳細介紹。ui

Kubernetes集羣是一組機器(物理/虛擬),Kubernetes爲集羣提供資源以運行應用程序。首先,您須要瞭解的基本Kubernetes概念是:

Pod是控制一個或多個容器的單元,它會做爲一個應用程序來被調度。一般,您應該爲每一個應用程序建立一個Pod,以便您能夠單獨擴展和控制它們。

節點組件是Kubernetes中的worker machine。節點能夠是虛擬機(VM)或物理機,具體取決於集羣。每一個節點都包含運行pod所需的服務,並由主組件管理。

主組件管理着Pod的生命週期。若是Pod死亡,Controller會建立一個新的Pod;若是你對Pod進行擴容或縮容,那麼Controller會建立/銷燬你的Pod。有關Controller類型的更多信息,能夠參閱此處:

https://kubernetes.io/docs/co...

這三個組件的做用是擴展和調度容器。主組件指示調度和擴容的命令,而後節點相應地根據命令來編排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平臺可能很是適合您。

相關文章
相關標籤/搜索