Kubernetes 學習(1)-了解k8s及其組件

什么是Kubernetes?

Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,調(diào)度和節(jié)點集群間擴展。如果你曾經(jīng)用過Docker容器技術部署容器,那么可以將Docker看成Kubernetes內(nèi)部使用的低級別組件。Kubernetes不僅僅支持Docker,還支持Rocket,這是另一種容器技術。

使用Kubernetes可以:

  • 自動化容器的部署和復制
  • 隨時擴展或收縮容器規(guī)模
  • 將容器組織成組,并且提供容器間的負載均衡
  • 很容易地升級應用程序容器的新版本
  • 提供容器彈性,如果容器失效就替換它,等等

集群

集群是一組節(jié)點,這些節(jié)點可以是物理服務器或者虛擬機,之上安裝了Kubernetes平臺。

image

上圖可以看到如下組件,使用特別的圖標表示Service和Label:

  • Pod
  • Container(容器)
  • Label(label)(標簽)
  • Replication Controller(復制控制器)
  • Service(enter image description here)(服務)
  • Node(節(jié)點)
  • Kubernetes Master(Kubernetes主節(jié)點)

Pod

Pod(上圖綠色方框)安排在節(jié)點上,包含一組容器和卷。同一個Pod里的容器共享同一個網(wǎng)絡命名空間,可以使用localhost互相通信。Pod是短暫的,不是持續(xù)性實體。你可能會有這些問題:

  • 如果Pod是短暫的,那么我怎么才能持久化容器數(shù)據(jù)使其能夠跨重啟而存在呢? 是的,Kubernetes支持卷的概念,因此可以使用持久化的卷類型。
  • 是否手動創(chuàng)建Pod,如果想要創(chuàng)建同一個容器的多份拷貝,需要一個個分別創(chuàng)建出來么?可以手動創(chuàng)建單個Pod,但是也可以使用Replication Controller使用Pod模板創(chuàng)建出多份拷貝,下文會詳細介紹。
  • 如果Pod是短暫的,那么重啟時IP地址可能會改變,那么怎么才能從前端容器正確可靠地指向后臺容器呢?這時可以使用Service,下文會詳細介紹。

Lable

正如圖所示,一些Pod有Label(enter image description here)。一個Label是attach到Pod的一對鍵/值對,用來傳遞用戶定義的屬性。比如,你可能創(chuàng)建了一個"tier"和“app”標簽,通過Label(tier=frontend, app=myapp)來標記前端Pod容器,使用Label(tier=backend, app=myapp)標記后臺Pod。然后可以使用Selectors選擇帶有特定Label的Pod,并且將Service或者Replication Controller應用到上面。

Replication Controller

是否手動創(chuàng)建Pod,如果想要創(chuàng)建同一個容器的多份拷貝,需要一個個分別創(chuàng)建出來么,能否將Pods劃到邏輯組里?

Replication Controller確保任意時間都有指定數(shù)量的Pod“副本”在運行。如果為某個Pod創(chuàng)建了Replication Controller并且指定3個副本,它會創(chuàng)建3個Pod,并且持續(xù)監(jiān)控它們。如果某個Pod不響應,那么Replication Controller會替換它,保持總數(shù)為3.如下面的動畫所示:


image

如果之前不響應的Pod恢復了,現(xiàn)在就有4個Pod了,那么Replication Controller會將其中一個終止保持總數(shù)為3。如果在運行中將副本總數(shù)改為5,Replication Controller會立刻啟動2個新Pod,保證總數(shù)為5。還可以按照這樣的方式縮小Pod,這個特性在執(zhí)行滾動升級時很有用。

當創(chuàng)建Replication Controller時,需要指定兩個東西:

  1. Pod模板:用來創(chuàng)建Pod副本的模板
  2. Label:Replication Controller需要監(jiān)控的Pod的標簽。

現(xiàn)在已經(jīng)創(chuàng)建了Pod的一些副本,那么在這些副本上如何均衡負載呢?我們需要的是Service。

Service

如果Pods是短暫的,那么重啟時IP地址可能會改變,怎么才能從前端容器正確可靠地指向后臺容器呢?

Service是定義一系列Pod以及訪問這些Pod的策略的一層抽象。Service通過Label找到Pod組。因為Service是抽象的,所以在圖表里通??床坏剿鼈兊拇嬖冢@也就讓這一概念更難以理解。

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

  • 會為Service創(chuàng)建一個本地集群的DNS入口,因此前端Pod只需要DNS查找主機名為 ‘backend-service’,就能夠解析出前端應用程序可用的IP地址。
  • 現(xiàn)在前端已經(jīng)得到了后臺服務的IP地址,但是它應該訪問2個后臺Pod的哪一個呢?Service在這2個后臺Pod之間提供透明的負載均衡,會將請求分發(fā)給其中的任意一個(如下面的動畫所示)。通過每個Node上運行的代理(kube-proxy)完成。這里有更多技術細節(jié)。

下述動畫展示了Service的功能。注意該圖作了很多簡化。如果不進入網(wǎng)絡配置,那么達到透明的負載均衡目標所涉及的底層網(wǎng)絡和路由相對先進


image

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

Node

節(jié)點(上圖橘色方框)是物理或者虛擬機器,作為Kubernetes worker,通常稱為Minion。每個節(jié)點都運行如下Kubernetes關鍵組件:

  • Kubelet:是主節(jié)點代理。
  • Kube-proxy:Service使用其將鏈接路由到Pod,如上文所述。
  • Docker或Rocket:Kubernetes使用的容器技術來創(chuàng)建容器。

Kubernetes Master

集群擁有一個Kubernetes Master(紫色方框)。Kubernetes Master提供集群的獨特視角,并且擁有一系列組件,比如Kubernetes API Server。API Server提供可以用來和集群交互的REST端點。master節(jié)點包括用來創(chuàng)建和復制Pod的Replication Controller。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容