Kubernetes 簡介

Kubernetes 簡介

導讀:Kubernetes(K8s)是開源的,用于管理云平臺中多個主機上的容器化的應用,應用操作包括部署,調(diào)度和節(jié)點集群間擴展。如果你曾經(jīng)用過 Docker 容器技術(shù)部署容器,那么可以將 Docker 看成 Kubernetes 內(nèi)部使用的低級別組件。(Kubernetes 不僅僅支持 Docker,還支持 Rocket,這是另一種容器技術(shù))

小貼士:K8s 是 Kubernetes 的縮寫,其中 8 是指 K 后面的 8 個字母

Kubernetes 的作用

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

K8s 基本介紹

架構(gòu)圖

[站外圖片上傳中...(image-ed1ab9-1564482843628)]

組件

  • etcd 保存了整個集群的狀態(tài);
  • apiserver 用于暴露 Kubernetes API,提供了資源操作的唯一入口。任何的資源請求/調(diào)用操作都是通過kube-apiserver提供的接口進行;
  • controller manager 負責維護集群的狀態(tài),比如故障檢測、自動擴展、滾動更新等;
  • scheduler 負責資源的調(diào)度,按照預定的調(diào)度策略將 Pod 調(diào)度到相應的機器上;
  • kubelet 負責維護容器的生命周期,同時也負責 Volume(CVI)和網(wǎng)絡(管理 Kubernetes Master 和 Node 之間的通信)的管理;
  • Container runtime 負責鏡像管理以及 Pod 和容器的真正運行(CRI);
  • kube-proxy 負責為 Service 提供 cluster 內(nèi)部的服務發(fā)現(xiàn)和負載均衡;
  • kube-dns 負責為整個集群提供 DNS 服務

名詞解釋

[圖片上傳失敗...(image-5a1676-1564482843628)]

Node

節(jié)點是物理或者虛擬機器,作為 Kubernetes worker,通常稱為 Minion。每個節(jié)點都運行如下 Kubernetes 關(guān)鍵組件:
kubelet:是主節(jié)點代理。
kube-proxy:Service 使用其將鏈接路由到 Pod,如上文所述。
Docker 或 Rocket:Kubernetes 使用的容器技術(shù)來創(chuàng)建容器。

集群擁有一個 Kubernetes Master。Kubernetes Master 提供集群管理控制,并且擁有一系列組件,比如 Kubernetes API Server 與 Replication Controller。API Server 提供可以用來和集群交互的接口;Replication Controller 用于創(chuàng)建和復制 Pod。

Pod

Pod 應用于節(jié)點上,包含一組容器和卷,一個 Pod 是一個容器環(huán)境下的“邏輯主機”(類似模具下生產(chǎn)出的玩具),它可能包含一個或者多個緊密相連的應用。同一個 Pod 里的容器和應用共享同一個網(wǎng)絡命名空間(可以使用 localhost 互相通信)。Pod 中的應用也可以共享磁盤(Volumes)。
Pod 是短暫的(無狀態(tài)),不是持續(xù)性實體。
提出問題:

  1. 如果 Pod 是短暫的,那么我怎么才能持久化容器數(shù)據(jù)使其能夠跨重啟而存在呢?
    雖然 Kubernetes 支持卷的概念,但共享磁盤目錄(EmptyDir)的生命周期和所屬的 Pod 是完全一致的,因此 Pod 中的數(shù)據(jù)并不能跨重啟而存在。
  2. 是否手動創(chuàng)建 Pod,如果想要創(chuàng)建同一個容器的多份拷貝,需要一個個分別創(chuàng)建出來么?
    可以手動創(chuàng)建單個 Pod,但是也可以使用 Replication Controller 使用 Pod 模板創(chuàng)建出多份拷貝,下文會詳細介紹。
  3. 如果 Pod 是短暫的,那么重啟時 IP 地址可能會改變,那么怎么才能從前端容器正確可靠地指向后臺容器呢?
    這時可以使用 Service,下文會詳細介紹

Label

正如圖所示,一些 Pod 有 Label(pod description)。一個 Label 是附加(attach)到Pod的一對鍵/值對,用來傳遞用戶定義的屬性。比如,你可能創(chuàng)建了一個“tier”和“app”標簽,通過 Label(tier = backend, app = myapp)來標記后端 Pod 容器。然后可以使用 Selectors 選擇帶有特定 Label 的 Pod 進行相關(guān)操作,比如將 Service 或者 Replication Controller 應用到上面。

Service

Service 定義了訪問這些 Pod 的策略的一層抽象。Service 通過 Label 找到 Pod 組。
現(xiàn)在,假定有 2 個后臺 Pod,并且定義后臺 Service 的名稱為“backend-service”,Label 選擇器為(tier = backend, app = myapp)。backend-service 的 Service 會完成如下兩件重要的事情:

  1. 服務發(fā)現(xiàn)
    將新的 Pod 服務放入其負載均衡的體系中
  2. DNS 尋址
    會為 Service 創(chuàng)建一個本地集群的 DNS 入口,因此前端 Pod 只需要通過組件 DNS 查找主機名為“backend-service”(此過程由 kube-dns 組件實現(xiàn)),就能夠解析出前端應用程序可用的 IP 地址。
    得到了后臺服務的 IP 地址后,Service 在這 2 個后臺 Pod 之間提供透明的負載均衡,會將請求分發(fā)給其中的任意一個(如下面的動畫所示)。通過每個 Node 上運行的代理(kube-proxy)完成。
    [圖片上傳失敗...(image-f29038-1564482843628)]

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

Replication Controller

Replication Controller(簡單理解為上文提到的模具)確保任意時間都有指定數(shù)量的 Pod“副本”在運行。如果為某個 Pod 創(chuàng)建了 Replication Controller 并且指定 3 個副本,它會創(chuàng)建 3 個 Pod,并且持續(xù)監(jiān)控它們。如果某個 Pod 不響應,那么 Replication Controller 會替換它,保持總數(shù)永遠為 3。
如果之前不響應的 Pod 恢復了,Replication Controller 會將其中一個終止保持總數(shù)為 3。如果在運行中將副本總數(shù)改為 5,Replication Controller會立刻啟動 2 個新 Pod,保證總數(shù)為 5。還可以按照這樣的方式縮小 Pod。在節(jié)點掛掉重啟時,可以自動創(chuàng)建 Pod 及相關(guān)應用服務。
創(chuàng)建 Replication Controller 需要的條件:
Pod 模板(模具):用來創(chuàng)建 Pod 副本的模板
Label:Replication Controller 需要監(jiān)控的 Pod 的標簽。

ReplicaSet(RS)

Replication Controller(RC)的升級版本。ReplicaSet 和 Replication Controller 之間的唯一區(qū)別是對選擇器的支持。ReplicaSet 支持 labels user guide 中描述的 set-based 選擇器要求, 而 Replication Controller 僅支持 equality-based 的選擇器要求。

Deployment

Deployment 為 Pod 和 Replica Set 提供聲明式更新。
你只需要在 Deployment 中描述您想要的目標狀態(tài)是什么,Deployment controller 就會幫您將 Pod 和 ReplicaSet 的實際狀態(tài)改變到您的目標狀態(tài)。您可以定義一個全新的 Deployment 來創(chuàng)建 ReplicaSet 或者刪除已有的 Deployment 并創(chuàng)建一個新的來替換。

注意:一般情況下不該手動管理由 Deployment 創(chuàng)建的 Replica Set,否則就篡越了 Deployment controller 的職責!

kubectl

kubectl 用于運行 Kubernetes 集群命令的管理工具。
eg:

ConfigMap 與 Secret

ConfigMap 與 Secret 用于保存配置數(shù)據(jù)的鍵值對,可以用來保存單個屬性,也可以用來保存配置文件。ConfigMap 跟 Secret 很類似,但它可以更方便地處理不包含敏感信息的字符串。

參考文檔

中文文檔
體驗環(huán)境

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

相關(guān)閱讀更多精彩內(nèi)容

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