定義 Kubernetes
若要判斷 Kubernetes 用於協調 Contoso 容器化工作負載的適用性,除了如何使用 Kubernetes 來管理記憶體和網路之外,請務必瞭解 Kubernetes 架構、術語和定義。
Kubernetes 概觀
Kubernetes 提供一種作和管理跨多部伺服器部署的容器化應用程式的方法。 它提供開放原始碼應用程式開發介面 (API),以控制容器的執行方式和位置,並根據每個容器的可用計算資源和資源需求,排程容器在叢集 VM 上執行。 Kubernetes 著重於應用程式工作負載,而不是基礎基礎結構元件。
Kubernetes 可以提供容器型應用程式的優點,例如:
- 可攜性。 Kubernetes 的部署宣告式方法是使用輕量型 YAML 指令清單檔案來實作。 針對應用程式更新,您不需要重新建構基礎結構。
- 延展性。 您可以排程及部署容器、視需要調整容器及管理其生命週期。
- 可擴充性。 Kubernetes 開放原始碼 API 可讓您使用慣用的程式設計語言、作系統(OS)、連結庫和傳訊總線來建置應用程式。 您也可以整合現有的持續整合和持續傳遞 (CI/CD) 工具。
Kubernetes 架構
Kubernetes 叢集分成兩個核心元件:
- 在叢集中執行應用程式工作的 節點或工作節點。 叢集通常包含由控制平面管理的多個節點。 節點的子元件包括 kubelet、 kube-proxy 和 容器運行時間。
- 控制平面或 主要節點 ,提供核心 Kubernetes 服務,這些服務可用來藉由排程和控制叢集內的工作來協調應用程式工作負載。 組成控制平面的元件包括 kube-api-server、 controller 和 kube-scheduler。
備註
目前僅支援Linux OS作為 Kubernetes 主要節點的主機OS。
一個圖示用來說明 Kubernetes 叢集的元件,其中包括主節點和工作節點的表示,其子元件包括 API 伺服器、kubelet、容器執行環境和容器實例。
每個 Kubernetes 叢集至少包含一個控制平面和一個或多個工作節點實例。 工作節點實例可以基於 Linux 作業系統或 Windows Server。 典型的 Kubernetes 工作負載是由數個容器所組成,這些容器會分散在叢集中的多個工作節點。
術語和定義
下表定義一些重要的 Kubernetes 詞彙。
| 詞彙 | 定義 |
|---|---|
| Pod | Kubernetes 的基本作業單位。 容器會分組為 Pod 群組,而 Pod 群組會擴展至您所需的狀態。 Pod 會提供在其中執行容器的規格。 它也提供這些容器所使用的記憶體和網路資源的規格。 |
| 服務 | 這是一組抽象化或邏輯的 Pod,以及用來存取這些 Pod 的原則。 此政策定義了如何存取 Pod 的集合,並明確指定該政策適用於哪些 Pod。 這種將邏輯一組的 Pod 和原則結合的模式有時稱為 微服務。 |
| 控制器 | 追蹤 Kubernetes 資源狀態的變更,並協助將資源帶入其所需的狀態。 工作負載控制器的類型包括 ReplicaSet、Deployments、Job、CronJob 等等。 |
| kubectl | 提供命令行介面 (CLI) 的管理工具,可用來連線到 Kubernetes 叢集的控制平面。 |
| kubeadm | 一組工具,可用來快速建立 Kubernetes 叢集,以及最少的功能和附加元件。 |
| kubelet | 在叢集中的每個節點上執行的代理程式,以處理來自控制平面的協調流程要求,以及排程所要求容器的執行。 |
| kube-proxy | 藉由路由網路流量和管理服務和 Pod 的 IP 尋址,來管理每個節點上的虛擬網路。 |
| 容器運行時間 | 節點元件,可讓容器化應用程式執行並與其他資源互動,例如虛擬網路和記憶體。 |
| kube-api-server | 一個控制平面元件,提供底層 Kubernetes API,以便管理工具與之互動,例如 kubectl 或 Kubernetes 儀錶板。 |
| kube-scheduler | 決定哪些節點可以執行工作負載,並在應用程式啟動或建立時啟動它們。 |
容器、Pod 和節點
容器會在 Pod 內執行,接著會在節點內執行。
容器
如果容器密切相關且需要共用資源 (例如磁碟),則應該只將容器一起排程在單一 Pod 中。
Pod
Pod:
- 可以容納一或多個容器。
- 用來代表應用程式的單一實例。
- 包含如何執行 Pod 内容器的規格,例如由 Pod 内容器共用的網路和存儲詳細資訊。
您可以使用 Pod 範本來定義 Pod 的相關資訊,例如要使用的容器映像和連接埠。
節點
節點:
- 可以容納多個 Pod。
- 可能是虛擬機或實體機器,視叢集而定。
每個節點都是由控制平面或 主要節點所管理。 主要節點會管理叢集中節點間 Pod 的排程。
小提示
您可以使用 節點親和性,將 Kubernetes Pod 指派給特定節點。 您可以使用kubectl命令和.yaml清單檔的組合來執行此動作。
備註
服務實際上是具有自己IP位址的Pod集合。
記憶體和網路功能
Kubernetes也會管理與容器型應用程式相關聯的網路和記憶體元件。
儲存體
針對記憶體,Kubernetes 會使用 磁碟區。 磁碟區基本上是 Pod 中容器可以存取以儲存檔案的目錄。 您可以將 Kubernetes 記憶體磁碟區排列成兩個廣泛的類別:
- 永續性磁碟區。 永續性磁碟區以 Kubernetes 資源的形式提供儲存體磁碟區。 在容器重新啟動之後,磁碟區和資料皆可供使用。
- 暫時磁碟區。 暫時磁碟區提供唯讀輸入資料的暫存儲存體。 當容器重新啟動時,暫時磁碟區和數據已不再可供使用。
備註
Kubernetes 支援不同類型的磁碟區,包括 azureDisk,用於將Microsoft Azure 數據磁碟掛接至 Pod、將 Azure 檔案磁碟掛接至 Pod 和 iSCSI 的 azureFile。
網路
Kubernetes 支援下列領域的網路功能:
- 容器網路化。 關注 Pod 中容器之間的網路通訊。
- 叢集網路。 提供叢集內 Pod 之間的網路通訊。
- 服務(外部)。 允許從叢集外部對 Pod 中執行的應用程式進行網路存取。
- 服務 (內部)。 指定允許在叢集內的資源之間使用哪些網路服務。
若要在先前概述的案例中達成網路通訊,您必須瞭解 Kubernetes 中設定某些核心元件的方式,包括:
- 器皿:
- 容器會共用 Pod 的網路設定,包括 IP 位址。
- 容器在相同的 Pod 內有共享資源,而且可以與相同 Pod 中的其他容器通訊。
- Pod 內的所有容器在網路方面的行為就如同在相同主機上一樣。
- Pod:
- 每個 Pod 都有自己的唯一 IP 位址。
- 服務業:
- 每個服務都有自己的虛擬IP位址。
- 集群:
- 每個叢集節點都有自己的IP位址,就像在一般叢集主機中一樣。
從叢集與服務通訊牽涉到使用 kube-dns 和 kube-proxy 服務,從服務 IP 位址路由至 Pod IP 位址。
若要直接支援 Pod 之間的通訊(例如 Pod 對 Pod),以及允許將原則套用至該通訊,您必須將容器網路介面 (CNI) 外掛程式新增至 Kubernetes 叢集中。 CNI 是網路外掛程式的產業規格。Kubernetes 上有許多外掛程式符合此規格。
備註
CNI 外掛程式會為 Pod 的實體網路建立抽象層次。 該抽象網路的虛擬本質讓您更輕鬆地設定、操作和自動化 Pod 網路功能。 實體 網路稱為底層網路,而虛擬抽象 網路稱為重疊網路。