K8s - Kubernetes重要概念介紹(Cluster、Master、Node、Pod、Controller、Service、Namespace)


K8s - Kubernetes重要概念介紹(Cluster、Master、Node、Pod、Controller、Service、Namespace)

    Kubernetes 是目前發展最快、市場占有率最高的容器編排引擎產品,並且還在快速地開發和迭代之中。我們在學習 Kubernetes 之前,需要理解它的幾個重要概念,它們是組成 Kubernetes 集群的基石。

一、Cluster、Master、Node 介紹

1,Cluster

  • Cluster(集群) 是計算、存儲和網絡資源的集合,Kubernetes 利用這些資源運行各種基於容器的應用。
  • 最簡單的 Cluster 可以只有一台主機(它既是 Mater 也是 Node

2,Master

  • MasterCluster 的大腦,它的主要職責是調度,即決定將應用放在哪里運行。
  • Master 運行 Linux 操作系統,可以是物理機或者虛擬機。
  • 為了實現高可用,可以運行多個 Master

3,Node

  • Node 的職責是運行容器應用。
  • NodeMaster 管理,Node 負責監控並匯報容器的狀態,並根據 Master 的要求管理容器的生命周期。
  • Node 運行在 Linux 操作系統,可以是物理機或者是虛擬機。

二、Pod 介紹

1,Pod

  • PodKubernetes 的最小工作單元。
  • 每個 Pod 包含一個或多個容器。Pod 中的容器會作為一個整體被 Master 調度到一個 Node 上運行。

2,Kubernetes 引入 Pod 的兩個目的

(1)可管理性
  • 有些容器天生就是需要緊密聯系,一起工作。Pod 提供了比容器更高層次的抽象,將它們封裝到一個部署單元中。
  • KubernetesPod 為最小單位進行調度、擴展、共享資源、管理生命周期。

(2)通信和資源共享
  • Pod 中的所有容器使用同一個網絡 namespace,即相同的 IP 地址和 Port 空間。它們可以直接用 localhost 通信。
  • 同樣的,這些容器可以共享存儲,當 Kubernetes 掛載 volumePod,本質上是將 volume 掛載到 Pod 中的每一個容器。

3,Pod 的兩種使用方式

(1)運行單一容器
  • one-container-per-Pod Kubernetes 最常見的模型,這種情況下,只是將單個容器簡單封裝成 Pod
  • 即便是只有一個容器,Kubernetes 管理的也是 Pod 而不是直接管理容器。

(2)運行多個容器
  • 對於那些聯系非常緊密,而且需要直接共享資源的容器,應該放在一個 Pod 中。
  • 比如下面這個 Pod 包含兩個容器:一個 File Puller,一個是 Web ServerFile Puller 會定期從外部的 Content Manager 中拉取最新的文件,將其存放在共享的 volume 中。Web Servervolume 讀取文件,響應 Consumer 的請求。這兩個容器是緊密協作的,它們一起為 Consumer 提供最新的數據;同時它們也通過 volume 共享數據。所以放到一個 Pod 是合適的。
 

三、Controller

1,基本介紹

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

2,各個 Controller 介紹

(1) Deployment
  • Deployment 是最常用的 Controller,比如我們可以通過創建 Deployment 來部署應用的。
  • Deployment 可以管理 Pod 的多個副本,並確保 Pod 按照期望的狀態運行。

(2) ReplicaSet
  • ReplicaSet 實現了 Pod 的多副本管理。
  • 使用 Deployment 時會自動創建 ReplicaSet,也就是說 Deployment 是通過 ReplicaSet 來管理 Pod 的多個副本,我們通常不需要直接使用 ReplicaSet

(3) DaemonSet
  • DaemonSet 用於每個 Node 最多只運行一個 Pod 副本的場景。正如其名稱所揭示的,DaemonSet 通常用於運行 daemon

(4) StatefuleSet
  • StatefuleSet 能夠保證 Pod 的每個副本在整個生命周期中名稱是不變的。而其他 Controller 不提供這個功能,
  • 當某個 Pod 發生故障需要刪除並重新啟動時,Pod 的名稱會發生變化。同時 StatefuleSet 會保證副本按照固定的順序啟動、更新或者刪除。

(5) Joba
  • Job 用於運行結束就刪除的應用。而其他 Controller 中的 Pod 通常是長期持續運行。

四、Service、Namespace

1,Service

  • Deployment 可以部署多個副本,每個 Pod 都有自己的 IP。而 Pod 很可能會被頻繁地銷毀和重啟,它們的 IP 會發生變化,用 IP 來訪問 Deployment 副本不太現實。
  • Service 定義了外界訪問一組特定 Pod 的方式。Service 有自己的 IP 和端口,ServicePod 提供了負載均衡。

2,Namespace

(1) Namespace 可以將一個物理的 Cluster 邏輯上划分成多個虛擬 Cluster,每個 Cluster 就是一個 Namespace。不同 Namespace 里的資源是完全隔離的。
(2) Kubernetes 默認創建了兩個 Namespace
  • default:創建資源時如果不指定,將被放到這個 Namespace 中。
  • kube-systemKubernetes 自己創建的系統資源將放到這個 Namespace 中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM