1. 程式人生 > >Kubernetes 的幾個重要概念

Kubernetes 的幾個重要概念

Cluster

Cluster 是計算、儲存和網路資源的集合,Kubernetes 利用這些資源執行各種基於容器的應用。

Master

Master 是 Cluster 的大腦,它的主要職責是排程,即決定將應用放在哪裡執行。Master 執行 Linux 作業系統,可以是物理機或虛擬機器。為了實現高可用,可以執行多個 Master。Master 執行著如下 Daemon 服務:kube-apiserver、kube-scheduler、kube-controller-manager、etcd 和 Pod 網路(例如 flannel)。

  • API Server(kube-apiserver) API Server 提供 HTTP/HTTPS RESTful API,即 Kubernetes API。API Server 是 Kubernetes Cluster 的前端介面,各種客戶端工具(CLI 或 UI)以及 Kubernetes 其他元件可以通過它管理 Cluster 的各種資源。
  • Scheduler(kube-scheduler) Scheduler 負責決定將 Pod 放在哪個 Node 上執行。Scheduler 在排程時會充分考慮 Cluster 的拓撲結構,當前各個節點的負載,以及應用對高可用、效能、資料親和性的需求。
  • Controller Manager(kube-controller-manager) Controller Manager 負責管理 Controller ,保證 Controller 能正常執行;而 Controller 負責管理 Cluster 各種資源,保證資源處於預期的狀態。Controller 有不同的種類 ,包括 replication controller、endpoints controller、namespace controller、serviceaccounts controller 等。不同的 controller 管理不同的資源。例如 replication controller 管理 Deployment、StatefulSet、DaemonSet 的生命週期,namespace controller 管理 Namespace 資源。
  • etcd etcd 負責儲存 Kubernetes Cluster 的配置資訊和各種資源的狀態資訊。當資料發生變化時,etcd 會快速地通知 Kubernetes 相關元件。
  • Pod 網路 Pod 要能夠相互通訊,Kubernetes Cluster 必須部署 Pod 網路,flannel 是其中一個可選方案。

Node

Node 的職責是執行容器應用。Node 由 Master 管理,Node 負責監控並彙報容器的狀態,並根據 Master 的要求管理容器的生命週期。Node 執行在 Linux 作業系統,可以是物理機或者是虛擬機器。

Node 是 Pod 執行的地方,執行的 Kubernetes 元件有 kubelet、kube-proxy 和 Pod 網路(例如 flannel)

  • kubelet kubelet 是 Node 的 agent,當 Scheduler 確定在某個 Node 上執行 Pod 後,會將 Pod 的具體配置資訊(image、volume 等)傳送給該節點的 kubelet,kubelet 根據這些資訊建立和執行容器,並向 Master 報告執行狀態。
  • kube-proxy service 在邏輯上代表了後端的多個 Pod,外界通過 service 訪問 Pod。service 接收到的請求是如何轉發到 Pod 的呢?這就是 kube-proxy 要完成的工作。每個 Node 都會執行 kube-proxy 服務,它負責將訪問 service 的 TCP/UDP 資料流轉發到後端的容器。如果有多個副本,kube-proxy 會實現負載均衡。
  • Pod 網路 Pod 要能夠相互通訊,Kubernetes Cluster 必須部署 Pod 網路,flannel 是其中一個可選方案。 master and nodes

Pod

Pod 是 Kubernetes 的最小工作單元。每個 Pod 包含一個或多個容器。Pod 中的容器會作為一個整體被 Master 排程到一個 Node 上執行。

Controller

Kubernetes 通常不會直接建立 Pod,而是通過 Controller 來管理 Pod。Controller 中定義了 Pod 的部署特性,比如有幾個副本,在什麼樣的 Node 上執行等。為了滿足不同的業務場景,Kubernetes 提供了多種 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等。

  • Deployment :是最常用的 Controller,Deployment 可以管理 Pod 的多個副本,並確保 Pod 按照期望的狀態執行。
  • ReplicaSet :實現了 Pod 的多副本管理。使用 Deployment 時會自動建立 ReplicaSet,也就是說 Deployment 是通過 ReplicaSet 來管理 Pod 的多個副本,我們通常不需要直接使用 ReplicaSet。
  • DaemonSet :用於每個 Node 最多隻執行一個 Pod 副本的場景。正如其名稱所揭示的,DaemonSet 通常用於執行 daemon。
  • StatefuleSet: 能夠保證 Pod 的每個副本在整個生命週期中名稱是不變的。而其他 Controller 不提供這個功能,當某個 Pod 發生故障需要刪除並重新啟動時,Pod 的名稱會發生變化。同時 StatefuleSet 會保證副本按照固定的順序啟動、更新或刪除。
  • Job :用於執行一結束就刪除的應用。而其他 Controller 中的 Pod 通常是長期持續執行。

Service

Deployment 可以部署多個副本,每個 Pod 都有自己的 IP,Pod 很可能會被頻繁地銷燬和重啟,它們的 IP 會發生變化,用 IP 來訪問不太現實。

這時候就需要使用 Service。Kubernetes Service 定義了外界訪問一組特定 Pod 的方式。Service 有自己的 IP 和埠,Service 為 Pod 提供了負載均衡。

Kubernetes 執行容器(Pod)與訪問容器(Pod)這兩項任務分別由 Controller 和 Service 執行。

Namespace

Namespace 可以將一個物理的 Cluster 邏輯上劃分成多個虛擬 Cluster,每個 Cluster 就是一個 Namespace。不同 Namespace 裡的資源是完全隔離的。

Kubernetes 預設建立了兩個 Namespace。

default: 建立資源時如果不指定,將被放到這個 Namespace 中。

kube-system: Kubernetes 自己建立的系統資源將放到