Kubernetes的來龍去脈與運行流程
譯文【51CTO.com快譯】Kubernetes是現(xiàn)代微服務(wù)中最突出的技術(shù)之一。它旨在使容器化應(yīng)用程序的微服務(wù)集群管理更簡單、更自動化。本文從概念上詳細(xì)介紹了這一核心技術(shù)的工作原理。
了解Kubernetes的一種有用方法是將其視為容器的分布式操作系統(tǒng)。Kubernetes提供了協(xié)調(diào)容器(最常見的Docker容器)和運行在其上的基礎(chǔ)結(jié)構(gòu)容器的交互和縮放所需的工具和命令。Kubernetes是一個設(shè)計用于各種場景的通用工具,它是一個非常靈活但又復(fù)雜的系統(tǒng)。
Kubernetes工作節(jié)點和控制平面
Kubernetes分有兩個方面:工作節(jié)點和控制平面。工作節(jié)點是實際的容器化應(yīng)用程序以及必要的Kubernetes工具所在的位置??刂破矫媸枪芾砑汗ぞ咚诘奈恢?。圖1對此架構(gòu)進(jìn)行了高層次的研究。
如圖一所示,該體系結(jié)構(gòu)分為工作節(jié)點和負(fù)責(zé)運行工作負(fù)載以及運行管理工具的頭節(jié)點。
兩種情況下的節(jié)點都是在虛擬機或?qū)嶋H的機器中執(zhí)行的。
擴展Kubernetes Worker節(jié)點與工作負(fù)載
需要注意的是,Kubernetes底層基礎(chǔ)設(shè)施是運行工作節(jié)點工作負(fù)載時可用的資源(計算、內(nèi)存、磁盤和網(wǎng)絡(luò)),但它并不直接控制它們。Kubernetes負(fù)責(zé)擴展工作負(fù)載,但更高級別的機制(如公共云自動擴展或手動干預(yù))負(fù)責(zé)調(diào)整節(jié)點的可用性。因此,可以使用控制器與外部系統(tǒng)進(jìn)行交互。
Kubernetes Worker節(jié)點組件
圖2展示了Kubernetes Worker節(jié)點的基本元素。
圖2. Kubernetes Worker節(jié)點詳細(xì)信息
Kubelet
kubelet是運行在工作節(jié)點上的一個“小”程序,負(fù)責(zé)在控制平面和節(jié)點之間進(jìn)行平衡。kubelet核心目的是執(zhí)行pods上來自頭節(jié)點集群的指令,并報告工作負(fù)載當(dāng)前的狀態(tài)。
Kube Proxy
Kube Proxy負(fù)責(zé)在節(jié)點上實施網(wǎng)絡(luò)規(guī)則,并允許進(jìn)出節(jié)點的流量。
Kube Proxy不同于入口,入口在集群級別操作,并定義進(jìn)入集群的網(wǎng)絡(luò)路由規(guī)則。
Pod
Pod是節(jié)點上的離散工作單元,具有復(fù)制性。它們是封裝一個或多個容器化應(yīng)用程序的抽象。Pod可以對一起運行的容器進(jìn)行分組和隔離,并且同一臺機器上的pod之間也可以通信。容器和Pod之間的關(guān)系由Kubernetes部署描述符控制。
Deployment和ReplicaSet
Pod通常作為ReplicaSet的一部分進(jìn)行配置和部署。ReplicaSet定義Pod所需的運行時特征,并使Kubernetes工作以保持該狀態(tài)。ReplicaSet通常由Deployment定義,Deployment定義了ReplicaSet參數(shù)和管理集群時要使用的方法(即pod是更新還是重新創(chuàng)建)。
Sidecar
在Pod級別,額外的功能是通過Sidecar插件實現(xiàn)的。Sidecar可以處理諸如Pod級別的日志記錄和信息收集之類的任務(wù)。
圖3更詳細(xì)地介紹了工作程序節(jié)點中的Pod。
圖3. Kubernetes Pod詳細(xì)說明
Kubernetes control plane
接下來到了控制器端,了解Kubernetes如何操作來控制集群的操作。
圖4詳細(xì)介紹了頭節(jié)點組件。
圖4. Kubernetes頭節(jié)點詳細(xì)信息
Etcd
最容易理解的組件是etcd(發(fā)音為“ et-cee-dee”)。Etcd是一個分布式對象存儲,充當(dāng)整個集群的配置和狀態(tài)記錄數(shù)據(jù)庫。
API Server
API服務(wù)器(API Server)是集群的中央通信機制。當(dāng)控制平面、工作節(jié)點和管理員通過Kubernetes命令行工具(如kubectl)或其他UI應(yīng)用配置更改時,API Server則可以代理它們之間的交互。
Scheduler
調(diào)度程序(Scheduler)負(fù)責(zé)標(biāo)識運行Pod的節(jié)點。根據(jù)Pod的特性和可用節(jié)點的現(xiàn)有狀態(tài)所使用的方法是不同,但是其目標(biāo)都是達(dá)到自定義編寫的程度。調(diào)度程序在執(zhí)行工作時與API服務(wù)器進(jìn)行交互。
Controller
控制器(Controller)組件負(fù)責(zé)將集群保持在配置時所需的狀態(tài),并在集群偏離控制時將其移向該狀態(tài)。控制器的作用就像一種恒溫器,它指定所需的狀態(tài),然后工作來維持它。
在Kubernetes中,可以創(chuàng)建一個對象,用于記錄在etcd中的持久實體。然后,控制器將執(zhí)行操作以確保對象具有所需的屬性。
例如,ReplicaSet(上面討論過)根據(jù)使用標(biāo)準(zhǔn)定義運行pod。相對于該ReplicaSet的群集的實際狀態(tài)是狀態(tài)。ReplicaSet是對象,指定的pod計數(shù)是spec。集群相對于該ReplicaSet的實際狀態(tài)是status。控制器從集群接收關(guān)于此狀態(tài)的一致報告,并通過創(chuàng)建或銷毀pod來采取措施使?fàn)顟B(tài)與規(guī)范一致。
容器圖像存儲庫
最后一個組件是映像存儲庫(也稱為圖像注冊表)。此組件存在于集群之外,管理員和控制平面可以訪問它以下載所需的容器定義。注冊中心由包括Docker Hub在內(nèi)的各種組織托管,可以是公共的,也可以是私有的。主要的云提供商都為企業(yè)提供托管存儲庫。
Kubernetes規(guī)則容器
現(xiàn)在已經(jīng)了解了Kubernetes架構(gòu)以及Kubernetes是如何實現(xiàn)的。由于其部署、管理和擴展基于容器的應(yīng)用程序,可見Kubernetes不是一個簡單的系統(tǒng)。Kubernetes具有高度的可配置性和靈活性,可以處理意想不到的情況。
Kubernetes是當(dāng)前軟件架構(gòu)方法中的最突出的技術(shù)之一。因此,對DevOps、容器、云本地應(yīng)用程序和微服務(wù)體系結(jié)構(gòu)感興趣的人來說,這些Kubernetes的知識都是必不可少的。
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】