Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,調(diào)度和節(jié)點(diǎn)集群間擴(kuò)展。此外,Kubernetes還支持Docker和Rocket。
Kubernetes的功能有:自動化容器的部署和復(fù)制;隨時(shí)擴(kuò)展或收縮容器規(guī)模;將容器組織成組,并且提供容器間的負(fù)載均衡;升級應(yīng)用程序容器的新版本;提供容器彈性,替換容器失效,等等。
實(shí)際上,使用Kubernetes只需一個(gè)部署文件,使用一條命令就可以部署多層容器(前端,后臺等)的完整集群:
$ kubectl create -f single-config-file.yaml
kubectl是和Kubernetes API交互的命令行程序。
集群
集群是一組節(jié)點(diǎn),這些節(jié)點(diǎn)可以是物理服務(wù)器或者虛擬機(jī)上安裝了Kubernetes平臺。下圖展示這樣的集群。注意該圖為了強(qiáng)調(diào)核心概念有所簡化。這里可以看到一個(gè)典型的Kubernetes架構(gòu)圖。

上圖可以看到如下組件:Pod、Container(容器)、Label(標(biāo)簽)、Replication Controller(復(fù)制控制器)、Service(服務(wù))、Node(節(jié)點(diǎn))和Kubernetes Master(Kubernetes主節(jié)點(diǎn))。現(xiàn)在我們來一個(gè)一個(gè)解釋這些組件。
Pod
Pod在節(jié)點(diǎn)上,包含一組容器和卷。同一個(gè)Pod里的容器共享同一個(gè)網(wǎng)絡(luò)命名空間,可以使用localhost互相通信。Pod是短暫的,不是持續(xù)性實(shí)體。
Lable
如圖所示,一個(gè)Label是attach到Pod的一對鍵/值對,用來傳遞用戶定義的屬性。Replication Controller
Replication Controller確保任意時(shí)間都有指定數(shù)量的Pod“副本”在運(yùn)行。如果為某個(gè)Pod創(chuàng)建了Replication Controller并且指定3個(gè)副本,它會創(chuàng)建3個(gè)Pod,并且持續(xù)監(jiān)控它們。如果某個(gè)Pod不響應(yīng),那么Replication Controller會替換它,保持總數(shù)為3。
如果之前不響應(yīng)的Pod恢復(fù)了,現(xiàn)在就有4個(gè)Pod了,那么Replication Controller會將其中一個(gè)終止保持總數(shù)為3。如果在運(yùn)行中將副本總數(shù)改為5,Replication Controller會立刻啟動2個(gè)新Pod,保證總數(shù)為5。
當(dāng)創(chuàng)建Replication Controller時(shí),需要指定兩個(gè)東西:一是Pod模板:用來創(chuàng)建Pod副本的模板;二是Label:Replication Controller需要監(jiān)控的Pod的標(biāo)簽。
Service
Service是定義一系列Pod以及訪問這些Pod的策略的一層抽象。Service通過Label找到Pod組。因?yàn)镾ervice是抽象的,所以在圖表里通常不會顯示,這也就讓這一概念更難以理解。
現(xiàn)在,假定有2個(gè)后臺Pod,并且定義后臺Service的名稱為‘backend-service’,lable選擇器為(tier=backend, App=myapp)。backend-service 的Service會完成如下兩件重要的事情:
為Service創(chuàng)建一個(gè)本地集群的DNS入口,因此前端Pod只需要DNS查找主機(jī)名為 ‘backend-service’,就能夠解析出前端應(yīng)用程序可用的IP地址。
現(xiàn)在前端已經(jīng)得到了后臺服務(wù)的IP地址,Service在這2個(gè)后臺Pod之間提供透明的負(fù)載均衡,會將請求分發(fā)給其中的任意一個(gè)(如下面的動畫所示)。通過每個(gè)Node上運(yùn)行的代理(kube-proxy)完成。這里有更多技術(shù)細(xì)節(jié)。
有一個(gè)特別類型的Kubernetes Service,稱為'LoadBalancer',作為外部負(fù)載均衡器使用,在一定數(shù)量的Pod之間均衡流量。比如,對于負(fù)載均衡Web流量很有用。
Node
節(jié)點(diǎn)是物理或者虛擬機(jī)器,作為Kubernetes worker,通常稱為Minion。每個(gè)節(jié)點(diǎn)都運(yùn)行如下Kubernetes關(guān)鍵組件:Kubelet:是主節(jié)點(diǎn)代理;Kube-proxy:Service使用其將鏈接路由到Pod;Docker或Rocket:Kubernetes使用的容器技術(shù)來創(chuàng)建容器。
Kubernetes Master
Kubernetes Master提供集群的獨(dú)特視角,并且擁有一系列組件,比如Kubernetes API Server。API Server提供可以用來和集群交互的REST端點(diǎn)。master節(jié)點(diǎn)包括用來創(chuàng)建和復(fù)制Pod的Replication Controller。