在容器化方面,数据的持久化存储是个难题。临时容器是一个短暂的计算环境,其中代码不会永远存储。但是您仍然需要将数据存储在某个物理磁盘上!
容器的高度可变性与有状态存储的需求不一致,这是一个引入了无数解决方法的难题。针对 Kubernetes 中有状态的服务 ,通常必须依靠外部工具和数据库来保存和传输这些数据。
CNCF 拥有广泛的与 Kubernetes 集成的持久数据存储工具,以帮助管理使用持久存储卷的管理任务。下面,我们将回顾 CNCF 托管的其中一些工具。这些软件包的范围从提供云原生存储、在客户端应用程序和存储之间提供标准接口以及提供数据备份和恢复选项。
1. Rook
Kubernetes 的存储编排
网站:https://rook.io/
GitHub:https://github.com/rook/rook
持久存储系统需要大量维护以维持运营。Rook 是 Kubernetes 的开源云原生存储实用程序,旨在自动化存储管理员的一些任务,例如程序化存储、迁移、灾难恢复、监控和资源管理。Rook 支持文件、块和对象存储类型。
Rook 实际上利用了 Kubernetes 的架构,使用了 K8s Operator。截至 2022 年,CNCF 毕业项目 Rook 支持三个存储提供商:Ceph[1]、Cassandra[2] 和 NFS[3]。可以在此处查看 Rook论坛[4]以了解项目的最新信息并提出问题。
2. Longhorn
基于 Kubernetes 构建的云原生分布式存储
GitHub:https://github.com/longhorn/longhorn
网站:https://longhorn.io/
Longhorn 是 Kubernetes 分布式块存储的开源工具。使用 Longhorn,您可以为 Kubernetes 集群复制存储,并利用持久卷的内置增量备份。您可以使这些快照重复出现并将它们备份到辅助对象存储。这是通过“将大型块存储控制器划分为多个较小的存储控制器”来实现的,从而有助于缓解与各种基于容器的微服务的存储相关的问题。
Longhorn 还与非云托管的 K8s 集群兼容,并具有可免费使用的图形管理 UI。与 Rook 类似,它是 Kubernetes 原生的。Longhorn 最初由 Rancher 开发,现在是 CNCF 内的一个 孵化项目[5]。
3.CubeFS
云原生分布式文件系统和对象存储。
GitHub:https://github.com/cubeFS/cubefs
网站:https://cubefs.io/
CubeFS,原名 ChubaoFS,是一个分布式文件系统,旨在支持大规模的云原生架构。研究发现,与 Ceph 相比,CFS 的速度大约快三倍。CubeFS 的功能是让容器集群中托管的客户端应用程序与元数据子系统和数据子系统通信的卷对话。这些卷可以部署到各种容器中,以实现许多不同客户端之间的文件共享。
CubeFS 的高级底层元数据子系统本身是分布式的,以提高性能和可扩展性。CubeFS 可用作多租户访问的通用存储引擎或确保同一文件副本的一致性。正如文档[6]所述,像 CubeFS 这样的分布式文件系统尤其有助于创建机器学习模型。目前,CubeFS 是 CNCF 中的一个孵化项目。
4.K8up
Kubernetes 和 OpenShift 备份 operator
GitHub:https://github.com/k8up-io/k8up
网站:https://k8up.io/
K8up 被其创建者亲切地称为“番茄酱”,是用于执行备份的 Kubernetes operator。K8up 可通过 Helm Chart 方便地分发,易于为特定的云原生备份用例部署和定制。K8up 可用于自动备份任何标记为ReadWriteMany
或带有自定义标签的持久卷声明 (PVC)。您还可以使用 K8up 启动按需备份、安排例行备份、安排长期存档以及查看和管理备份。K8up 可与 S3 兼容的存储一起使用。目前,K8up 是 CNCF 的沙盒项目。
5.OpenEBS
开源 container-attached 存储(CAS)
GitHub:https://github.com/openebs/openebs
网站:https://www.openebs.io/
OpenEBS 是另一个开源项目,旨在帮助简化使用云原生基础架构维护有状态工作负载的过程。借助 OpenEBS,开发人员可以使用熟悉的 K8s 命令和 API 来控制特定容器的工作负载存储。存储软件本身由 Kubernetes 容器化和编排。该项目将此设置称为容器附加存储 (CAS)。OpenEBS 最初由 MayaData 创建和赞助,目前,是 CNCF 的一个沙盒项目。
6. ORAS
OCI registry-as-storage
GitHub:https://github.com/oras-project/oras
网站:https://oras.land/
您可能熟悉Open Container Initiative[7] (OCI),该组织为容器设置行业标准格式。一种这样的格式是分发规范[8],它定义了存储、处理和拉取容器镜像的标准方法。
开发人员也开始使用 OCI 注册表来存储非容器类型。因此,OCI 工件[9]创建来定义这些任意存储类型。最后,OCI registry-as-storage (ORAS) 是一个实用程序,专门帮助从 OCI 注册中心推送和拉取这些通用 OCI 工件。迄今为止,几乎没有实施 ORAS。该文档仅引用 Singularity 和 Helm 项目作为当前实现。ORAS 是 CNCF 的沙盒项目。
7. Piraeus Datastore
Kubernetes 的高可用数据存储
GitHub:https://github.com/piraeusdatastore/piraeus
网站:https://piraeus.io/
Piraeus 是一个开源云原生存储系统,旨在与 Kubernetes 本地持久卷一起使用。该实用程序提供动态配置、资源管理和高可用性等功能,为有状态工作负载启用故障转移过程。与此列表中的其他项目相比,Piraeus 非常易于使用,并且开始只需要几个命令。如果您的项目仅使用本地存储,Piraeus 是一个不错的选择。目前,Piraeus 是 CNCF 的沙盒项目。
8. Vineyard
内存中不可变的数据管理器
GitHub:https://github.com/v6d-io/v6d
网站:https://v6d.io/
与本文的其他项目不同,Vineyard (v6d) 的独特之处在于它专注于内存数据存储。Vineyard 适用于大型数据系统,因为它使用零拷贝数据共享来减少冗余处理。它提供了一种抽象的方式来处理可能利用图形数据库的多个计算框架。目前,Vineyard 是一个沙盒 CNCF 项目。
总结
要在 Kubernetes 中实现 持久存储[10],必须定义一个持久卷[11],其中有许多StorageClasses[12]用于各种存储类型。例如,您使用本地存储并可以指向运行 Kubernetes 的主机上的特定文件夹,但这并不总是最佳实践,因为您经常需要跨节点共享存储。运行 NFS 服务器是一种选择,但大多数用例都希望将云存储作为持久卷。
无论他们使用何种基础架构,工程师和 ITOps 都需要轻松访问以存储和检索数据。为了获得云原生生态系统的全部优势,将存储与终端节点解耦并在整个容器生态系统中进行智能编排非常重要。正如我们在上面看到的,CNCF 中有许多项目试图简化将 Kubernetes 与持久的、有状态的存储结合起来的过程。
参考资料
[1]
Ceph: https://github.com/rook/rook
[2]
Cassandra: https://github.com/rook/cassandra
[3]
NFS: https://github.com/rook/nfs
[4]
论坛: https://groups.google.com/g/rook-dev
[5]
孵化项目: https://www.cncf.io/blog/2021/11/04/longhorn-brings-cloud-native-distributed-storage-to-the-cncf-incubator/
[6]
文档: https://chubaofs.readthedocs.io/en/latest/overview.html
[7]
Open Container Initiative: https://opencontainers.org/
[8]
分发规范: https://containerjournal.com/features/oci-announces-distribution-specification-v1-0/
[9]
OCI 工件: https://github.com/opencontainers/artifacts
[10]
持久存储: https://www.youtube.com/watch?v=pumX2Ds5L0c&ab_channel=TheDigitalLife
[11]
持久卷: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
[12]
StorageClasses: https://kubernetes.io/docs/concepts/storage/storage-classes/
- END -
原文:
https://containerjournal.com/features/8-cncf-projects-for-cloud-native-persistent-storage/