CNCF云原生生态版图-分类指南(三)- 运行时
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)即远程直接内存访问,是一种用于计算机之间高速数据传输的技术。它允许计算机在不经过操作系统内核的情况下,直接从一个计算机的内存访问另一个计算机的内存,从而实现低延迟、高带宽的数据传输,主要应用于高性能计算、存储系统和数据中心网络等领域。 ↩︎