系統架構 Kubernetes (1)

教學目標

初步了解 Kubernetes 的基本概念,以利後續進行系統架構的規劃。

重點概念

首先 Kubernetes 主要是由 Google 在 2015 年所釋出的開放源始碼專案,簡稱 K8S。K8S 是一套分散式的容器解決方案,並且我們能夠使用 Kubernetes API 取得叢集所需要的狀態、需要運行的應用程式、其它工作負載、使用容器映像檔、… 等資訊,以及我們更能夠直接使用 Kubernetes API 與叢集進行互動,並且設定或修改我們所需狀態。

接著當我們設定所需的狀態之後,Kubernetes 就會使得叢集目前狀態匹配至所需的狀態,因此 Kubernetes 能夠自動執行各種任務,像是啟動或重啟容器、擴展給定應用程式的副本數量。其中 Kubernetes 主要是由叢集上執行的一系列程序所組成,分別為:

  1. 主要節點 (Kubernetes Master):主伺服器主要負責維護叢集所需的狀態,並且當我們主要是和 Kubernetes Master 進行互動以利與叢集進行溝通,並且其包括三個重要的程序 kube-apiserver、kube-controller-manager 和 kube-scheduler。
  2. 叢集節點 (Kubernetes Node):叢集節點主要是運行應用程式和雲端工作流程的機器,其主要是由主要節點所控管,我們很少直接與叢集節點進行互動,並且包括其二個重要的程序 kubelet 和 kube-proxy。

其中所謂 kube-apiserver 主要是 Kubernetes API 伺服器,它是驗證和設定 API 物件的資料,並且提供 REST API 以利提供給前端所有叢集元件進行互動的狀態。所謂 kube-controller-manager 主要是 Kubernetes Controller 管理器,它是一個控制循環,透過 Kubernetes API 伺服器監控叢集的共享狀態,並且進行更改,以及將目前實際狀態程至所需要的動態。所謂 kube-scheduler 主要是 Kubernetes Scheduler 排程器,它是在考慮個人和整體資源需求的情況下進行相關的參數調整。所謂 kubelet 主要是每個叢集節點上執行主要節點的代理,請注意 kubelet 不管理非由 Kubernetes 所建立的容器。所謂 kube-proxy 主要是 Kubernetes 網路代理執行在每個叢集節點上,Kubernetes API 定義的服務將會透過 TCP 和 UDP 與其進行通訊互動。

再來 Kubernetes 中包括許多代表系統狀態的抽象概念,這些抽象概念皆會由 Kubernetes API 中的物件進行表示,主要包括 Pod、Service、Volume 和 Namespace。所謂 Pod 主要是 Kubernetes 的基本建構模塊,其主要是我們建立或部署的 Kubernetes 物件模型中最小和最簡單的單元,同時其代表叢集上正在執行的程序。所謂 Service 主要是 Kubernetes 抽象概念,其主要定義了 Pod 的邏輯集合,以及存取策略或稱微服務。所謂 Volume 主要是一個目錄,其可能包括一些資料,能夠透過容器中的 Pod 進行存取。所謂 Namespce 主要是讓多個團隊或多個專案共享一個叢集資源的命名空間。

此外 Kubernetes 上還包更高層次的抽象概念稱為控制器,控制器主要建立在基本物件上,並且提供 ReplicaSet、Deployment、StaefulSet 和 Job 等進階功能。

最後 Kubernetes Control Plane 主要是維護 Kubernetes 中所有物件的記錄,並且執行連續的控制循環來管理這些物件的狀態。同時在任何特定時間,以利管理叢集的狀態,將容器系統中所有的物件實際狀態調整為我們所需的狀態,像是當我們透過 Kubernetes API 建立一個 Deployment 物件時,我們將會為系統提供新的所需狀態,此時 Kubernetes Control Plane 將會記錄物件的建立,並且透過啟動所需的應用程式將它們安排至叢集節點中執行特定指令,以利使得叢集實際狀態與所需要的狀態相互配對。

總結若在了解 Kubernetes 基本概念,想更進一步了解 Kubernetes 實際操作,則能夠透過 Kubernetes 官方網站所提供的免費互動教學進行線上學習,非常方便。

相關資源