Cluster、Master、Node
Cluster
Cluster(集群) 是計算、存儲和網絡資源的集合,Kubernetes 利用這些資源運行各種基于容器的應用。最簡單的 Cluster 可以只有一臺主機(它既是 Mater 也是 Node)
Master
1. Master 是 Cluster 的大腦,它的主要職責是調度,即決定將應用放在哪里運行。
2. Master 運行 Linux 操作系統,可以是物理機或者虛擬機。
3. 為了實現高可用,可以運行多個 Master。
Node
1. Node 的職責是運行容器應用。
2. Node 由 Master 管理,Node 負責監控并匯報容器的狀態,并根據 Master 的要求管理容器的生命周期。
3. Node 運行在 Linux 操作系統,可以是物理機或者是虛擬機。
Pod
1. 基本概念
① Pod 是 Kubernetes 的最小工作單元。
② 每個 Pod 包含一個或多個容器。Pod 中的容器會作為一個整體被 Master 調度到一個 Node 上運行。
2. 引入 Pod 的目的
① 可管理性: 有些容器天生就是需要緊密聯系,一起工作。Pod 提供了比容器更高層次的抽象,將它們封裝到一個部署單元中。Kubernetes 以 Pod 為最小單位進行調度、擴展、共享資源、管理生命周期。
② 通信和資源共享: Pod 中的所有容器使用同一個網絡 namespace,即相同的 IP 地址和 Port 空間。它們可以直接用 localhost 通信。同樣的,這些容器可以共享存儲,當 Kubernetes 掛載 volume 到 Pod,本質上是將 volume 掛載到 Pod 中的每一個容器。
3. Pod 的使用方式
① 運行單一容器: one-container-per-Pod 是 Kubernetes 最常見的模型,這種情況下,只是將單個容器簡單封裝成 Pod。即便是只有一個容器,Kubernetes 管理的也是 Pod 而不是直接管理容器。
② 運行多個容器: 對于那些聯系非常緊密,而且需要直接共享資源的容器,應該放在一個 Pod 中。比如下面這個 Pod 包含兩個容器:一個 File Puller,一個是 Web Server。File Puller 會定期從外部的 Content Manager 中拉取最新的文件,將其存放在共享的 volume 中。Web Server 從 volume 讀取文件,響應 Consumer 的請求。這兩個容器是緊密協作的,它們一起為 Consumer 提供最新的數據;同時它們也通過 volume 共享數據。所以放到一個 Pod 是合適的。
Controller
1. 基本概念
Kubernetes 通常不會直接創建 Pod,而是通過 Controller 來管理 Pod 的。Controller 中定義了 Pod 的部署特性,比如有幾個副本,在什么樣的 Node 上運行等。為了滿足不同的業務場景,Kubernetes 提供了多種 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等。
2. 各個 Controller
Deployment: Deployment 是最常用的 Controller,比如我們可以通過創建 Deployment 來部署應用的。Deployment 可以管理 Pod 的多個副本,并確保 Pod 按照期望的狀態運行。
ReplicaSet: ReplicaSet 實現了 Pod 的多副本管理。使用 Deployment 時會自動創建 ReplicaSet,也就是說 Deployment 是通過 ReplicaSet 來管理 Pod 的多個副本,我們通常不需要直接使用 ReplicaSet。
DaemonSet: DaemonSet 用于每個 Node 最多只運行一個 Pod 副本的場景。正如其名稱所揭示的,DaemonSet 通常用于運行 daemon。
StatefuleSet: StatefuleSet 能夠保證 Pod 的每個副本在整個生命周期中名稱是不變的。而其他 Controller 不提供這個功能,當某個 Pod 發生故障需要刪除并重新啟動時,Pod 的名稱會發生變化。同時 StatefuleSet 會保證副本按照固定的順序啟動、更新或者刪除。
Job: Job 用于運行結束就刪除的應用。而其他 Controller 中的 Pod 通常是長期持續運行。
Service、Namespace
1. Service
① Deployment 可以部署多個副本,每個 Pod 都有自己的 IP。而 Pod 很可能會被頻繁地銷毀和重啟,它們的 IP 會發生變化,用 IP 來訪問 Deployment 副本不太現實。
② Service 定義了外界訪問一組特定 Pod 的方式。Service 有自己的 IP 和端口,Service 為 Pod 提供了負載均衡。
2. Namespace
① Namespace 可以將一個物理的 Cluster 邏輯上劃分成多個虛擬 Cluster,每個 Cluster 就是一個 Namespace。不同 Namespace 里的資源是完全隔離的。
②Kubernetes 默認創建了兩個 Namespace:
default:創建資源時如果不指定,將被放到這個 Namespace 中。 kube-system:Kubernetes 自己創建的系統資源將放到這個 Namespace 中。