CNCF云原生生態版圖-分類指南(三)- 運行時
- CNCF云原生生態版圖-分類指南
- 三、運行時(Runtime)
- (一)云原生存儲(Cloud Native Storage)
- 1. 是什么?
- 2. 解決什么問題?
- 3. 如何解決問題?
- 4. 使用的技術
- 5. 項目和產品整體介紹
- (二)容器運行時(Container Runtime)
- 1. 是什么?
- 2. 解決什么問題?
- 3. 如何解決問題?
- 4. 使用的技術
- 5. 項目和產品整體介紹
- (三)云原生網絡(Cloud Native Network)
- 1. 是什么?
- 2. 解決什么問題?
- 3. 如何解決問題?
- 4. 使用的技術
- 5. 項目和產品整體介紹
- (四)小結
- 鏈接
CNCF云原生生態版圖-分類指南
三、運行時(Runtime)
運行時層包含容器在云原生環境中運行所需的一切。包括用于啟動容器的代碼,稱為容器運行時;使持久存儲可用于容器的工具;以及管理容器環境網絡的 VPN。
但請注意,不能將這些資源與上面討論的 Provisioning 層處理的網絡和存儲工作混淆。那些專注于讓容器平臺運行。該類別中的工具用于啟動和停止容器,幫助它們存儲數據,并支持它們相互通信。
(一)云原生存儲(Cloud Native Storage)
1. 是什么?
存儲是存儲應用的持久性數據的位置,通常稱為持久卷。為了可靠地運行,應用程序需要能夠輕松訪問存儲。通常,當說持久數據時,指的是存儲數據庫、消息或任何其他信息,并且希望在應用程序重新啟動時不會消失。
2. 解決什么問題?
云原生架構具有流暢、靈活且富有彈性的特點,使得容器重啟時數據的持久化變得具有挑戰性。容器化應用程序為了擴縮容或自我修復,通常會被不斷創建和刪除,也可能隨著時間的推移改變運行的物理位置。這些原因促使云原生環境下的存儲必須以獨立節點的形式提供。存在如下幾個重大挑戰:
- 要存儲數據,就需要硬件,而且磁盤與任何其他硬件一樣,受基礎結構限制,這是我們面臨的第一個重大挑戰。
- 然后是實際的存儲接口,數據中心之間的存儲接口可能存在較大差異(在舊世界中,每個基礎設施都有自己的存儲解決方案和自己的接口),這使得數據中心難以具備可移植性。
- 最后,手動資源調配和自動擴展不兼容,因此,為了從云的彈性中受益,必須自動調配存儲資源。
云原生存儲就是專門為這些新的云原生挑戰量身定制的。
3. 如何解決問題?
云原生存儲分類中的工具能提供如下的能力:
- 為容器提供云原生存儲能力。
- 標準化容器和存儲接口。
- 通過備份和恢復提供數據保護。
云原生存儲通過使用云原生兼容的容器存儲接口和可以自動配置的存儲,來消除人力瓶頸,以實現自動擴展和自我修復。
4. 使用的技術
云原生存儲的實現主要依賴于容器存儲接口 (CSI) ,該接口提供了一組標準 API,為容器提供文件和塊存儲。該類別中有許多工具,包括開源和供應商提供的工具,它們利用 CSI 為容器提供按需存儲。
此外,還有一些技術旨在解決其他云原生存儲挑戰。Minio 提供了與 S31 兼容的對象存儲 API。Velero 等工具有助于簡化備份和恢復 Kubernetes 集群本身以及應用程序使用的持久數據的過程。
5. 項目和產品整體介紹
屬于云原生存儲分類的項目和產品共有 72 個,其中 CNCF 項目有 12 個。這些項目和產品的關鍵字有:
- Persistent volume 持久卷
- CSI 容器存儲接口
- Storage API 存儲 API
- Backup and restore 備份和還原
CNCF 項目如下表所示:
項目 | CNCF 項目階段 | 說明 |
---|---|---|
Rook | 已畢業 | Rook 將分布式存儲系統轉變為自我管理、自我擴展、自我修復的存儲服務 |
CubeFS | 孵化中 | 一款新一代云原生開源存儲系統,支持 S3、HDFS2 和 POSIX3 等訪問協議 |
Longhorn | 孵化中 | 為 Kubernetes 等容器編排平臺提供可靠的、持久化的存儲解決方案。它允許容器在不同的節點之間遷移時,仍然能夠訪問和使用之前存儲的數據 |
Carina | 沙盒 | 一個標準的 kubernetes CSI 插件 |
Curve | 已存檔 | 一個高性能、輕量級運維、云原生的開源分布式存儲系統 |
HwameiStor | 沙盒 | 一款 Kubernetes 原生的容器附加存儲 (CAS4) 解決方案,將 HDD、SSD 和 NVMe 磁盤形成本地存儲資源池進行統一管理,使用 CSI 架構提供分布式的本地數據卷服務,為有狀態的云原生應用或組件提供數據持久化能力 |
K8up | 沙盒 | 通過與 Kubernetes 緊密集成,為容器化應用提供了可靠的備份和恢復功能,確保應用數據在災難事件或數據丟失場景下能夠得到有效的保護和恢復 |
Kanister | 沙盒 | 用于在 Kubernetes 環境下處理復雜的數據操作任務,如備份、恢復、遷移和數據處理等 |
OpenEBS | 沙盒 | 提供了靈活的存儲選項,能夠讓用戶在容器編排平臺中輕松地管理和使用存儲資源 |
ORAS | 沙盒 | 一個專注于將 OCI5(Open Container Initiative)注冊表用作存儲的項目 |
Piraeus Datastore | 沙盒 | 一個云原生存儲系統,可為 Kubernetes 本地持久卷提供動態配置、資源管理和高可用性 |
Vineyard | 沙盒 | 用于在數據密集型應用場景中高效地管理和共享數據。它能夠跨越不同的計算框架(如 Spark、Pandas 等)和存儲系統(如分布式文件系統、對象存儲等),為數據的高效處理提供支持 |
(二)容器運行時(Container Runtime)
1. 是什么?
如容器注冊表中所述,容器是一組用于執行(或啟動)應用程序的計算約束6。容器化應用程序認為它們正在自己的專用計算機上運行,并且不知道它們正在與其他進程共享資源(類似于虛擬機)。
容器運行時是執行容器化應用程序的軟件。如果沒有運行時,容器鏡像就無法運行起來,它就只是指定容器化應用程序配置的靜態文件。運行時將在容器中啟動應用程序,并為其提供所需的資源。
2. 解決什么問題?
容器鏡像(具有應用程序規范的文件)必須以標準化、安全和隔離的方式啟動。標準化是因為需要在標準的操作規則下,保證容器能夠在任何地方運行。安全是因為不希望任何不應該訪問它的人訪問。隔離是不希望應用程序影響其他應用程序或受其他應用程序影響(例如,同地部署應用程序(co-located application7)崩潰,不會相互影響),隔離起到基礎的保護作用。此外,還需要為應用程序提供 CPU、存儲和內存等資源。
3. 如何解決問題?
容器運行時以標準化的方式在所有環境中啟動應用程序,并設置安全邊界。該類工具在安全邊界設置上會有所不同,比如 CRI-O 或 gVisor 等運行時就大大強化了其安全邊界。運行時還要為容器設置資源限制,如果不加限制,應用程序就會按需消耗資源,這可能會造成從其他應用程序搶奪資源的現象,因此最好在運行容器時對使用資源進行限制。
4. 使用的技術
并不是所有的容器運行時工具都采用相同的方式實現。Containerd(著名的 Docker 產品的一部分)和 CRI-O 是標準的容器運行時實現。還有一些工具將容器的使用擴展到其他技術,例如 Kata,它支持將容器作為 VM 運行。其他工具旨在解決與容器相關的特定問題,例如 gVisor,它在容器和操作系統之間提供額外的安全層。
5. 項目和產品整體介紹
屬于容器運行時分類的項目和產品共有 20 個,其中 CNCF 項目有 10 個。這些項目和產品的關鍵字有:
- Container 容器
- MicroVM 微型虛擬機
CNCF 項目如下表所示:
項目 | CNCF 項目階段 | 說明 |
---|---|---|
containerd | 已畢業 | 行業標準的容器運行時,強調簡單性、健壯性和可移植性 |
CRI-O | 已畢業 | 適用于 Kubernetes 的輕量級容器運行時 |
Inclavare Containers | 沙盒 | 一種基于硬件安全增強技術的容器解決方案。它主要專注于利用硬件的可信執行環境(TEE,如英特爾 SGX)來提供容器化應用的安全隔離和隱私保護 |
Krustlet | 已存檔 | 一個用于在 Kubernetes 集群中運行 WebAssembly(Wasm)應用程序的工具 |
Kuasar | 沙盒 | 聚焦于提升容器運行的性能、安全性和資源利用效率 |
Lima | 沙盒 | 用于在本地環境輕松地運行 Linux 虛擬機,并且這些虛擬機能夠很好地支持容器運行時(如 Docker、containerd) |
rkt | 已存檔 | 一種輕量級、安全且遵循開放標準的容器技術 |
Virtual Kubelet | 沙盒 | 一種偽裝成 kubelet 的開源 Kubernetes kubelet 實現 |
WasmEdge Runtime | 沙盒 | 將云原生和無服務器應用程序范例引入邊緣計算 |
youki | 沙盒 | Rust 中 OCI 運行時規范的實現,類似于 runc8 |
(三)云原生網絡(Cloud Native Network)
1. 是什么?
容器通過云原生網絡相互通信以及與基礎設施層通信。分布式應用程序具有多個組件,這些組件將網絡用于不同的目的。此類別中的工具在現有網絡之上創建一個專門用于應用通信的虛擬網絡,稱為重疊網(overlay network)。
2. 解決什么問題?
雖然通常將容器中運行的代碼稱為應用程序,但現實情況是,大多數容器只包含大型應用程序的一小部分特定功能。現代應用程序(如 Netflix 或 Gmail)由許多更小的組件組成,每個組件都在自己的容器中運行。為了允許所有這些獨立的部分作為一個內聚的應用程序運行,容器需要各自相互通信。此類別中的工具提供專用通信網絡。
在容器之間流動的數據和消息可能包含敏感或私有數據。由于云原生網絡使用軟件來控制、檢查和修改數據流,因此管理、保護和隔離容器之間的連接要容易得多。云原生網絡的可編程性(programmable)和聲明式(declarative)支持通過擴展容器網絡和網絡策略(例如防火墻和訪問規則),以允許應用程序連接到在容器網絡外部運行的虛擬機或服務。
3. 如何解決問題?
此類別中的項目和產品使用容器網絡接口 (CNI)(一個 CNCF 項目)為容器化應用程序提供網絡功能。其中一些工具,如 Flannel,相當簡約,為容器提供最基本的連接。其他工具(如 NSX-T)提供完整的軟件定義網絡層,為每個 Kubernetes 命名空間創建一個隔離的虛擬網絡。
容器網絡至少需要為每個 Pod 分配 一個IP 地址(這是容器化應用程序在 Kubernetes 中運行的位置),以允許其他進程訪問它。
4. 使用的技術
該分類下項目和產品的多樣性和創新性,在很大程度上是源自于 CNI(類似于上面提到的 storage 和 Container Storage Interface)。CNI 標準化了網絡層為 Pod 提供功能的方式。 為 K8S 環境選擇合適的容器網絡至關重要,有許多工具可供選擇。Weave Net、Antrea、Calico 和 Flannel 都提供了有效的開源網絡層。它們的功能差異很大,最終應根據特定需求來進行選擇。
許多供應商使用軟件定義網絡 (SDN) 工具支持和擴展 Kubernetes 網絡,提供對網絡流量的更多洞察,來更好的實施網絡策略,乃至將容器網絡和策略擴展到更廣泛的數據中心。
5. 項目和產品整體介紹
屬于云原生網絡分類的項目和產品共有 27 個,其中 CNCF 項目有 10 個。這些項目和產品的關鍵字有:
- SDN 軟件定義網絡
- Network Overlay 網絡疊加
CNCF 項目如下表所示:
項目 | CNCF 項目階段 | 說明 |
---|---|---|
Cilium | 已畢業 | 用于提供、保護和觀察工作負載之間的網絡連接,由革命性的內核技術 eBPF 提供支持 |
Container Network Interface (CNI) | 孵化中 | 一種容器網絡規范。它定義了容器運行時和網絡插件之間的標準接口,目的是為了讓容器能夠無縫地連接到各種不同的網絡環境,同時也方便網絡插件開發者創建能夠兼容多種容器運行時的網絡解決方案 |
Antrea | 沙盒 | 為容器提供網絡連接、網絡策略實施以及服務發現等功能,旨在簡化容器網絡的管理并提升網絡性能和安全性 |
CNI-Genie | 沙盒 | 一個用于容器網絡接口(CNI)的多網絡插件解決方案。它允許在同一個 Kubernetes 集群中同時使用多個網絡插件,為容器提供靈活的網絡配置選擇,以滿足復雜多樣的網絡需求 |
FabEdge | 已存檔 | 一個專為邊緣計算場景設計的開源 Kubernetes 容器網絡解決方案 |
Kube-OVN | 沙盒 | 將 SDN 的能力和云原生結合, 提供豐富的功能,極致的性能以及良好的可運維性 |
kube-vip | 沙盒 | 一個用于 Kubernetes 集群的虛擬 IP(VIP)管理工具。它主要解決在 Kubernetes 集群中為服務提供高可用的網絡訪問入口的問題,確保在集群節點故障或網絡變化等情況下,服務的 IP 地址始終保持可用 |
Network Service Mesh | 沙盒 | 一種用于在云原生環境中管理和交付網絡服務的技術。它以服務網格的概念應用于網絡服務,將網絡功能(如負載均衡、防火墻、加密等)抽象為可管理的網絡服務,并通過一個分布式的網狀架構來提供、發現和消費這些服務 |
Spiderpool | 沙盒 | 一個 Kubernetes 的 underlay9 和 RDMA10 網絡解決方案, 它能運行在裸金屬、虛擬機和公有云上 |
Submariner | 沙盒 | 用于在多個 Kubernetes 集群之間建立安全的網絡連接,實現跨集群的服務發現和通 |
(四)小結
云原生運行時提供了容器在云原生環境中運行所需的所有工具:
- 云原生存儲使應用程序能夠輕松快速地訪問可靠運行所需的數據。
- 容器運行時,用于創建和啟動執行應用程序代碼的容器。
- 云原生網絡為容器化應用程序提供通信連接。
鏈接
- CNCF Landscape
- CNCF LANDSCAPE GUIDE
Amazon S3(Simple Storage Service)是亞馬遜公司提供的一種對象存儲服務。它允許用戶在網絡上的任何位置存儲和檢索任意數量的數據。這些數據被存儲為對象,對象可以是文件、圖像、視頻等各種格式的數據。 ??
HDFS(Hadoop Distributed File System)是一個分布式文件系統,是 Apache Hadoop 項目的核心子項目。它被設計用來在普通硬件構成的集群上存儲大規模數據集,并且能夠提供高吞吐量的數據訪問。例如,像互聯網公司存儲海量的用戶日志數據、搜索引擎存儲網頁索引等場景都會用到 HDFS。 ??
POSIX(Portable Operating System Interface)是一套 IEEE(電氣和電子工程師協會)定義的標準。它的目的是為了在不同的操作系統之間提供一個統一的應用程序接口(API)規范,使得應用程序源代碼在經過適當的編譯后,可以在多種符合 POSIX 標準的操作系統上運行,提高操作系統之間應用程序的可移植性。 ??
容器附加存儲(Container - Attached Storage,CAS)是一種專門為容器化環境設計的存儲方式。它緊密依附于容器,主要用于滿足容器對存儲的動態、靈活和高性能的需求。與傳統存儲方式不同,CAS 能夠更好地適應容器的生命周期,從容器的創建、運行到銷毀的全過程提供適配的存儲服務。 ??
Open Container Initiative(OCI)是一個開源的、獨立于廠商的容器規范組織。它的成立是為了建立開放的容器標準,確保容器技術在不同的操作系統和云平臺之間具有更好的互操作性和兼容性。 ??
在計算機科學和相關領域,計算約束是指對計算資源(如 CPU、GPU、內存、存儲等)的限制或條件。這些約束可以是硬件本身的物理限制,也可以是由軟件、系統配置、用戶需求或其他因素施加的限制。 ??
“co - located application” 指的是同地部署的應用程序。它是一種軟件部署策略,即多個應用程序或應用程序的組件被放置在相同的物理位置或接近的位置,這個位置可以是同一臺服務器、同一個數據中心的服務器集群,或者是同一云計算區域內的資源池。 ??
runc 是一個輕量級的、符合 OCI(Open Container Initiative)標準的容器運行時工具。它主要用于創建和運行容器,是容器運行的底層實現之一,在容器生態系統中起著至關重要的作用。例如,在 Kubernetes 等容器編排平臺中,runc 常常被用作默認的容器運行時來啟動和管理容器。 ??
在網絡和計算機系統領域,“underlay” 通常指底層基礎設施或基礎網絡。它是構建上層網絡或應用的基礎,提供物理連接、基本的網絡拓撲和傳輸功能等。 ??
RDMA(Remote Direct Memory Access)即遠程直接內存訪問,是一種用于計算機之間高速數據傳輸的技術。它允許計算機在不經過操作系統內核的情況下,直接從一個計算機的內存訪問另一個計算機的內存,從而實現低延遲、高帶寬的數據傳輸,主要應用于高性能計算、存儲系統和數據中心網絡等領域。 ??