Kubernetes 環境由多個組件、硬件和軟件組成,它們共同管理容器化應用程序的部署和執行。以下是關鍵組件以及它們如何融入圖片。
什么是容器化應用程序?
容器化應用程序與其所需的庫、二進制文件和配置文件捆綁到一個容器中。并非每個應用程序都是容器化的完美候選者。許多開發人員遵守云原生應用程序的十二要素應用程序指南:
- I. 代碼庫:在修訂控制中跟蹤的一個代碼庫,許多部署
- 二、依賴關系:顯式聲明和隔離依賴關系
- 三、配置:將配置存儲在環境中
- 四。支持服務:將支持服務視為附加資源
- 五、構建、發布、運行:嚴格分離構建和運行階段
- 六、進程:將應用程序作為一個或多個無狀態進程執行
- 七。端口綁定:通過端口綁定導出服務
- 八。并發:通過流程模型橫向擴展
- 九。可處置性:通過快速啟動和正常關閉最大限度地提高魯棒性
- X. Dev/prod parity:保持開發、登臺和生產盡可能相似
- 十一。日志:將日志視為事件流
- 十二。管理流程:將管理/管理任務作為一次性流程運行
許多流行的語言和應用程序已被容器化并位于開源存儲庫中,但是使用運行應用程序所需的庫和二進制文件構建應用程序容器可能更有效,而不是導入所有可用的內容。創建容器可以是程序化的,從而可以創建持續集成和部署 (CI/CD) 管道以提高效率。容器化應用程序屬于開發人員的領域。
什么是 Kubernetes 容器?
容器是應用程序的標準化、獨立的執行外殼。通常,容器將包含一個應用程序,通常由微服務以及正確執行所需的二進制文件和庫組成。通過將容器限制為單個進程,問題診斷變得更容易,更新應用程序也是如此。與虛擬機不同,容器不包含底層操作系統,因此與虛擬機相比被認為是輕量級的。Kubernetes 容器屬于開發人員的領域。
什么是 Kubernetes pod?
Pod 是 Kubernetes 集群中最小的執行單元。在 Kubernetes 中,容器不直接在集群節點上運行;相反,一個或多個容器被封裝在一個 pod 中。pod 中的所有應用程序共享相同的資源和本地網絡,從而簡化了 pod 中的應用程序之間的通信。Pod 在每個節點上使用一個稱為 kubelet 的代理與 Kubernetes API 和集群的其余部分進行通信。盡管開發人員需要 API 訪問權限,但 pod 的管理正在過渡到DevOps的領域。
隨著 pod 負載的增加,Kubernetes 可以自動復制 pod 以實現所需的可擴展性。因此,設計一個盡可能精簡的吊艙是很重要的。Pod 應該包含一個主進程以及執行它們所需的任何幫助或“邊車”容器。
容器與 pod 有什么區別?
容器包含執行特定流程或功能所需的代碼。在 Kubernetes 之前,組織將直接在物理或虛擬服務器上運行容器,但沒有Kubernetes 集群提供的可擴展性和靈活性。
Pod 為容器提供了另一層抽象。一個或多個應用程序可以包裝到一個 pod 中(想想 pod 中的豌豆),而 pod 是 Kubernetes 集群中的最小執行單元。例如,pod 可以包含初始化容器,這些容器為容器化應用程序代碼準備環境,然后在應用程序容器開始執行之前終止。Pod 是集群中最小的復制單元,因此 Pod 中的所有容器將一起向上或向下擴展。如果應用程序需要訪問持久存儲,Pod 包括持久存儲卷和容器。
什么是 Kubernetes 節點?
正如 pod 是 Kubernetes 中最小的執行單元一樣,節點是 Kubernetes 集群中計算硬件的最小單元。節點可以是本地物理服務器,也可以是駐留在本地或云提供商處的 VM。
像容器一樣,節點提供了一個抽象層。如果運營團隊將節點視為具有處理能力和內存的簡單資源,則每個節點都可以與下一個節點互換。節點一起工作,形成 Kubernetes 集群,隨著需求的變化自動分配工作負載。如果一個節點發生故障,它會自動從集群中刪除,并由其他節點接管。每個節點都運行一個名為 kubelet 的代理,它與集群控制平面進行通信。節點是 DevOps 和 IT 的領域。
Kubernetes pod 與節點之間有什么區別?
Pod 是可執行代碼的抽象,節點是計算機硬件的抽象,所以比較有點像蘋果和橘子。Pod 只是 Kubernetes 中最小的執行單元,由一個或多個容器組成,每個容器都有一個或多個應用程序及其二進制文件。節點是組成 Kubernetes 集群的物理服務器或虛擬機。節點是可互換的,通常不會由用戶或 IT 單獨處理,除非需要維護。
什么是 Kubernetes 控制平面?
- Kubernetes 控制平面是 Kubernetes 集群的控制器。盡管大多數集群將有一個控制平面,但可以有多個以實現彈性。例如,在跨可用區的大型云部署中,可能有一個控制平面在每個可用區中運行。這些是 Kubernetes 控制平面的組件:
- apiserver:顧名思義,API 服務器公開了 Kubernetes API,它是通信中心。通過命令行界面 (CLI) 或其他用戶界面 (UI) 進行的外部通信傳遞到 kube-apiserver,并且所有控制平面到節點的通信也通過 API 服務器。
- etcd:存儲與集群相關的所有數據的鍵值存儲。etcd 具有高可用性和一致性,因為對 etcd 的所有訪問都是通過 API 服務器進行的。etcd 中的信息通常以人類可讀的 YAML(YAML Ain't Markup Language)格式化。
- scheduler:創建新 Pod 時,該組件會根據資源需求、策略和有關地理位置和與其他工作負載的干擾的“親和性”規范將其分配給節點執行。
- controller-manager:雖然 Kubernetes 集群有多個控制器功能,但它們都被編譯成一個二進制文件。
什么是 Kubernetes 集群?
Kubernetes 集群由節點組成,節點可以是虛擬機或物理服務器。當你使用 Kubernetes 時,你總是在管理一個集群。必須至少有一個 Kubernetes 控制平面實例在一個節點上運行,并且至少有一個節點供 pod 執行。通常,集群將有多個節點來處理隨著工作負載變化(無論是由于一天中的時間、季節性還是其他原因)而擴展的應用程序。如果從集群中添加或減少節點,集群將根據需要自動重新分配工作負載。
Kubernetes 節點與集群有什么區別?
節點是集群的最小元素。集群由節點組成。集群是一個共享 pod 整體執行的集體,反映在 Google Kubernetes 集群項目的原始名稱:Borg。
什么是 Kubernetes 卷?
由于容器最初被設計為短暫且無狀態的,因此幾乎不需要解決存儲持久性問題。然而,隨著更多需要從持久存儲讀取和寫入的應用程序被容器化,訪問持久存儲卷的需求已經出現。為了實現這一點,Kubernetes 具有持久卷。獨特之處在于它們在集群外部,持久卷可以掛載到集群,而無需將它們與特定節點、容器或 pod 關聯。持久卷可以是本地的或基于云的,并且是 DevOps 和 IT 的領域。
Kubernetes 的組件如何協同工作?
簡而言之,應用程序被創建或遷移到容器中,然后用于創建在 Kubernetes 集群上運行的 Pod。創建 Pod 后,Kubernetes 會將它們分配給集群中的一個或多個節點,并確保正確數量的副本 Pod 正在運行。Kubernetes 掃描集群以確保每組 pod 都按指定運行。