三分鐘快速瞭解Kubernetes

Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,調度和節點集群間擴展。此外,Kubernetes還支持Docker和Rocket。

Kubernetes的功能有:自動化容器的部署和複製;隨時擴展或收縮容器規模;將容器組織成組,並且提供容器間的負載均衡;升級應用程序容器的新版本;提供容器彈性,替換容器失效,等等。

實際上,使用Kubernetes只需一個部署文件,使用一條命令就可以部署多層容器(前端,後臺等)的完整集群:

$ kubectl create -f single-config-file.yaml

kubectl是和Kubernetes API交互的命令行程序。

集群

集群是一組節點,這些節點可以是物理服務器或者虛擬機上安裝了Kubernetes平臺。下圖展示這樣的集群。注意該圖為了強調核心概念有所簡化。這裡可以看到一個典型的Kubernetes架構圖。

上圖可以看到如下組件:Pod、Container(容器)、Label(標籤)、Replication Controller(複製控制器)、Service(服務)、Node(節點)和Kubernetes Master(Kubernetes主節點)。現在我們來一個一個解釋這些組件。

Pod

Pod在節點上,包含一組容器和卷。同一個Pod裡的容器共享同一個網絡命名空間,可以使用localhost互相通信。Pod是短暫的,不是持續性實體。

Lable

如圖所示,一個Label是attach到Pod的一對鍵/值對,用來傳遞用戶定義的屬性。Replication Controller

Replication Controller確保任意時間都有指定數量的Pod“副本”在運行。如果為某個Pod創建了Replication Controller並且指定3個副本,它會創建3個Pod,並且持續監控它們。如果某個Pod不響應,那麼Replication Controller會替換它,保持總數為3。

如果之前不響應的Pod恢復了,現在就有4個Pod了,那麼Replication Controller會將其中一個終止保持總數為3。如果在運行中將副本總數改為5,Replication Controller會立刻啟動2個新Pod,保證總數為5。

當創建Replication Controller時,需要指定兩個東西:一是Pod模板:用來創建Pod副本的模板;二是Label:Replication Controller需要監控的Pod的標籤。

Service

Service是定義一系列Pod以及訪問這些Pod的策略的一層抽象。Service通過Label找到Pod組。因為Service是抽象的,所以在圖表裡通常不會顯示,這也就讓這一概念更難以理解。

現在,假定有2個後臺Pod,並且定義後臺Service的名稱為‘backend-service’,lable選擇器為(tier=backend, app=myapp)。backend-service 的Service會完成如下兩件重要的事情:

為Service創建一個本地集群的DNS入口,因此前端Pod只需要DNS查找主機名為 ‘backend-service’,就能夠解析出前端應用程序可用的IP地址。

現在前端已經得到了後臺服務的IP地址,Service在這2個後臺Pod之間提供透明的負載均衡,會將請求分發給其中的任意一個(如下面的動畫所示)。通過每個Node上運行的代理(kube-proxy)完成。這裡有更多技術細節。

有一個特別類型的Kubernetes Service,稱為'LoadBalancer',作為外部負載均衡器使用,在一定數量的Pod之間均衡流量。比如,對於負載均衡Web流量很有用。

Node

節點是物理或者虛擬機器,作為Kubernetes worker,通常稱為Minion。每個節點都運行如下Kubernetes關鍵組件:Kubelet:是主節點代理;Kube-proxy:Service使用其將鏈接路由到Pod;Docker或Rocket:Kubernetes使用的容器技術來創建容器。

Kubernetes Master

Kubernetes Master提供集群的獨特視角,並且擁有一系列組件,比如Kubernetes API Server。API Server提供可以用來和集群交互的REST端點。master節點包括用來創建和複製Pod的Replication Controller。