Kubernetes如何為應用程序提供網絡和存儲?
譯文【51CTO.com快譯】計算、存儲和網絡是任何基礎架構服務的基礎。在Kubernetes中,節點代表計算構建模塊,它為集群中運行的pod提供了這些基礎性的網絡和存儲資源。網絡和存儲服務由專為Kubernetes設計的軟件定義容器原生插件來提供。
網絡組件支持pod到pod、節點到pod、pod到服務以及外部客戶端到服務的通信。 Kubernetes遵循用于實現網絡服務的插件模式。Kubenet是默認的網絡插件,配置簡單。它通常與為節點之間或單節點環境中的通信設置路由規則的云提供商一起使用。
Kubernetes可以支持基于容器網絡接口(CNI)規范的許多插件,該規范定義了容器的網絡連接,并在容器刪除時處理網絡資源。CNI有許多實現版本,包括Calico、Cilium、Contiv和Weave Net等。CNI規范還支持公共云中可用的虛擬網絡,因而可以將網絡拓撲和子網擴展到Kubernetes集群。
一些與CNI兼容的網絡插件(比如Calico)通過隔離pod來實施策略,從而執行嚴格的路由策略。它們將類似防火墻的規則引入到Kubernetes集群的pod和命名空間。
Kubernetes存儲
持久存儲通過持久卷暴露給Kubernetes。pod通過持久卷聲明來使用卷。存儲管理員配置存儲資源的方式是,從現有的網絡連接存儲(NAS)、存儲區域網絡(SAN)、直連存儲(DAS)、固態驅動器(SSD)、非易失性內存標準(NVMe)或閃存磁盤陣列來創建持久卷。開發人員和DevOps團隊通過與pod關聯的持久卷聲明獲得大量的持久卷。
Kubernetes隨帶存儲基元(primitive),可以從現有節點來暴露存儲。使底層存儲可以被pod訪問的卷類型就是這樣一種基元。卷類型的例子包括emptyDir和hostPath。它們用于特定的使用場合:emptyDir用于暫存空間,hostPath使本地卷可供pod使用。但是由于與節點緊密耦合,它們沒有很高的可用性和容錯性。覆蓋存儲層將來自塊設備、NAS和SAN的存儲卷聚合起來,將外部存儲暴露給Kubernetes對象。
為了提供高可用性和容器原生存儲功能,Kubernetes推出了插件,以便存儲供應商將其平臺暴露給容器化工作負載。來自公共云提供商的塊存儲、基于NFS和GlusterFS的分布式文件系統以及幾個商業存儲平臺在Kubernetes的上游開源發行版中含有插件。存儲管理員根據性能和速度為每種類型的存儲引擎創建存儲類。可以從這些存儲類別為不同類型的工作負載創建持久卷和聲明。比如說,關系數據庫管理系統(RDBMS)可以與每秒輸入/輸出操作(IOPS)較高的存儲類別關聯起來,而內容管理系統(CMS)可以通過不同的存儲類別針對分布式存儲引擎。
圖1. Kubernetes的覆蓋存儲:將存儲暴露給pod和容器。
與CNI相似,Kubernetes社區已通過容器存儲接口(CSI)定義了存儲規范,該規范鼓勵采用一種標準的便攜式方法來實現和使用存儲服務。
為擴展而生的輕量級網絡堆棧
Kubernetes源自Borg,為超大規模工作負載而設計。其現代化架構可確保基礎架構資源的最佳利用。幾乎無需更改配置,即可輕松將另外的worker節點添加到現有集群中。工作負載就能夠立即利用新節點的CPU、內存和存儲資源。
將一組相關的容器組合起來作為一個pod,并將其當作部署和擴展單元,這個想法帶來更好的性能。比如說,將Web服務器和緩存容器放在同一個pod中可縮短延遲、提高性能。 pod中的容器有著同樣的執行上下文,從而使它們能夠使用進程間通信,這減少了開銷。
屬于同一ReplicaSet和部署的pod可迅速擴展。只需幾秒鐘即可將部署擴展到數百個pod的規模。可以根據資源能力和所需的配置狀態,調度節點上的pod。如果配置Horizontal Pod Autoscaler(HPA),Kubernetes可以自動擴展部署的規模。
在彈性基礎架構環境中運行時,Kubernetes可以使用Cluster Autoscaler向集群添加節點和從集群刪除節點。與HPA結合使用,該技術可以有效地管理工作負載和基礎架構的動態自動擴展。
Kubernetes的輕量級網絡堆棧和服務發現是為規模環境設計的。它們可以處理服務暴露的供內外使用的數萬個端點。
Kubernetes生態系統和社區不斷創新,使該平臺適合超大規模工作負載。
原文標題:HOW KUBERNETES PROVIDES NETWORKING AND STORAGE TO APPLICATIONS,作者:Janakiram MSV
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】