☰
OpenEBS 云原生存储平台指南:本地与复制存储引擎架构、部署与配置详解
2026/10/5 6:27:18 网站建设 项目流程
  • 云原生
  • CLI

【免费下载链接】openebs

A popular & widely deployed Open Source Container Native Storage platform for Stateful Persistent Applications on Kubernetes.

项目地址:https://gitcode.com/gh_mirrors/op/openebs
点击查看免费下载

OpenEBS 是一个面向 Kubernetes 的开源容器原生存储(Container Native Storage)平台,为有状态应用提供持久化存储,支持动态供给、在线扩容、瘦供给、快照与恢复等能力。本文以 OpenEBS 仓库根目录 README.md 为核心骨架,结合 统一 Helm Chart、设计文档 与各引擎实现,系统讲解其两种存储路线、五大存储引擎、部署配置与底层原理,读完可掌握在 Kubernetes 上选型、安装与调优 OpenEBS 的完整方法。

OpenEBS 是什么

OpenEBS 是一个开源容器原生存储解决方案,通过容器化的存储控制器为 Kubernetes 工作负载动态供给存储资源,具备高度的灵活性与云原生特性。它支持多种存储引擎:LocalPV(本地 PV)直接使用节点存储,Replicated PV(复制 PV)提供高级数据复制与韧性。OpenEBS 与 Kubernetes 无缝集成,提供存储策略、在线扩容(resize)、瘦供给(thin-provisioning)、快照(snapshots)与恢复(restore)等能力,是有状态应用(Stateful Applications)的理想选择。

关键设计理念(详见 designs/README.md):

  • 微服务架构:与它所服务的应用一样,OpenEBS 由微服务组成,并借助 Kubernetes 自身来编排和管理这些组件;
  • 纯用户态实现:完全构建在用户空间,可跨 OS/平台高度移植;
  • 意图驱动:继承 Kubernetes 的声明式原则,使用简单。

两大存储路线:Local Storage 与 Replicated Storage

OpenEBS 为 Kubernetes 工作负载提供两种主要存储方式:本地存储(Local Storage)与复制存储(Replicated Storage)。下表是二者完整的对比概览:

特性本地存储(Local Storage)复制存储(Replicated Storage)
数据可用性仅限卷所在节点可用,不适用于高可用场景在多个节点间同步复制数据,确保高可用性与持久性
适用场景适用于自行管理复制与可用性的应用,如 MongoDB、Cassandra 等分布式数据库适用于需要存储级复制和高可用的有状态工作负载,如 Percona/单机数据库、GitLab
性能接近磁盘原生性能,开销极小面向高性能设计,利用 NVMe-oF 语义实现低延迟访问
局限不具备高可用性;节点故障会导致数据不可用需要充足的资源(CPU、内存、NVMe)才能获得最佳性能
快照与克隆由 LVM、ZFS 等高级文件系统支撑时支持支持,提供企业级存储能力
备份与恢复通过 Velero + Restic 支持本地卷备份恢复通过 Velero 支持,保障数据保护与恢复

选型总结:当应用能够自行管理复制与高可用时,本地存储是好的选择;当需要存储级复制、更高的数据持久性与基于网络的存储访问时,应选择复制存储。

五大存储引擎一览

OpenEBS 伞形组织(Umbrella)下包含以下主要存储引擎子项目:

子项目Local PV HostpathLocal PV ZFSLocal PV LVMLocal PV Rawfile(实验性)Mayastor
类型单节点(Single-node)单节点单节点单节点多节点(Multi-node)
用途替代 Kubernetes 树内 CSI HostpathZFS 管理后端存储的存储引擎LVM2 管理后端存储的存储引擎实验性:使用 extent 文件作为块存储通用复制企业级存储
面向人群开发者或 DevOpsZFS 用户与生产部署LVM2 用户与生产部署开发者企业与生产部署
特性Kubernetes Hostpath 的全部能力,外加:动态供给、零配置、无 CSI 驱动供给 ZFS datasets、供给 ZFS 卷、动态供给、ZFS 韧性、ZFS RAID 保护、CSI 驱动供给 LVM2 卷、动态供给、LVM2 RAID 保护、CSI 驱动将本地文件作为文件系统供给为持久卷、CSI 驱动复制存储 NVMe/RDMA、快照、克隆、高可用、CSI 驱动
状态稳定,可部署于生产环境稳定,可部署于生产环境稳定,可部署于生产环境Beta,评估与集成中稳定,可部署于生产环境

引擎差异的底层视角

从源码与设计文档可以进一步理解这些引擎的差异:

  • Local PV Hostpath是动态本地 hostpath 卷供给器,其 StorageClass 的spec.provisioner设置为openebs.io/local,通过metadata.annotations的cas.openebs.io/config键进行存储配置,支持BasePath(hostpath 目录路径)与NodeAffinityLabel(节点亲和标签)等参数,详见 Hostpath LocalPV 设计文档;
  • Local PV ZFS支持poolname/poolpattern参数:其中poolpattern是一个正则表达式,在CreateVolume时按模式动态选择 ZFS 池,是对固定poolname的补充(镜像了 lvm-localpv 中volgroup/vgpattern的设计),详见 ZFS poolpattern 设计文档;
  • Local PV LVM支持在用户指定的 VolumeGroup 中供给瘦供给(thin provision)卷,详见 LVM 瘦供给设计文档;
  • Replicated PV Mayastor提供跨节点的同步复制、NVMe/RDMA 高性能访问与快照克隆能力,其数据面与控制面代码分别维护在独立仓库。

为什么选择 OpenEBS

OpenEBS 在 Kubernetes 环境中管理存储具备以下显著优势:

  • 云原生架构:作为云原生解决方案设计与 Kubernetes 无缝集成,大部分存储引擎符合 CSI 规范;
  • 覆盖广泛工作负载:同时为需要复制与不需要复制的工作负载提供解决方案;
  • 避免云锁定:通过抽象存储管理,OpenEBS 促进数据在本地或云端各种 Kubernetes 环境间迁移,降低对单一云厂商的依赖;
  • 成本效率:凭借瘦供给等特性实现存储资源的动态分配,通过避免过度供给并支持在线扩容来降低存储成本;
  • 高可用与更小爆炸半径:通过跨节点同步复制数据提升应用韧性;节点故障时仅影响该节点上的数据,最大限度降低对整体系统的影响。

架构概览:三大平面

OpenEBS 的架构是容器原生的、水平可扩展的,由可归入三个主要区域(平面)的微服务集合构成:

  1. 数据引擎(数据平面,Data Plane):负责与底层存储设备(主机文件系统、机械盘、SSD、NVMe 设备)交互的容器。数据引擎为卷提供高可用、快照、克隆等能力,并根据工作负载需求选择不同引擎(如 CoW 类 cStor、Jiva 或 LocalPV)。高可用通过将卷访问抽象到 target 容器实现——target 向多个 replica 容器同步复制数据,replica 将数据写入底层存储设备;节点故障时应用与 target 被重新调度到新节点,target 连接其余可用 replica 继续服务 IO;
  2. 存储管理(控制平面,Control Plane):负责 Kubernetes(Volume/CSI 接口)与数据引擎创建的卷之间的对接,提供卷信息 API,供 Kubernetes Provisioner(卷/快照/备份管理)、Prometheus(指标采集)以及 CLI/UI(存储状态洞察)使用;
  3. 存储设备管理平面(Storage Device Management Plane):作为控制平面的一部分,以 Kubernetes 原生方式管理节点上的存储设备(机械盘、SSD、NVMe 等),可视为设备清单管理工具,通过设备声明(类似 PV/PVC 概念)追踪设备使用情况,可通过 kubectl 与自定义资源完成设备列表、拓扑识别等操作。

快速上手:通过统一 Helm Chart 安装

OpenEBS 可在 Kubernetes 1.23+ 集群上快速部署。其统一 Helm Chart是一个聚合型 Chart,把各引擎 Chart 作为依赖(dependencies)打包在一起,见 charts/Chart.yaml。Chart 依赖结构如下:

仓库(Repository)名称(Name)版本(Version)
openebs-crds4.7.0-develop
https://grafana.github.io/helm-chartsalloy1.0.1
https://grafana.github.io/helm-chartsloki6.29.0
https://openebs.github.io/dynamic-localpv-provisionerlocalpv-provisioner4.7.0-develop
https://openebs.github.io/lvm-localpvlvm-localpv1.11.0-develop
https://openebs.github.io/mayastor-extensionsmayastor0.0.0
https://openebs.github.io/rawfile-localpvrawfile-localpv0.15.1
https://openebs.github.io/zfs-localpvzfs-localpv2.12.0-develop

默认安装将包含以下引擎(树形结构见 charts/README.md):

openebs ├── (默认) Local PV HostPath ├── (默认) Local PV LVM ├── (默认) Local PV ZFS ├── (默认) Local PV Rawfile └── (默认) Replicated PV Mayastor

前提条件

安装前请确认各引擎的系统前提(以官方文档为准):Hostpath 需要节点本地目录;LVM 引擎需要节点安装 LVM2;ZFS 引擎需要节点安装 ZFS;Mayastor 需要具备 NVMe 等高性能设备与充足 CPU/内存资源。

添加 Helm 仓库并安装

helm repo add openebs https://openebs.github.io/openebs helm repo update

使用默认值安装(将安装 LocalPV Hostpath、LocalPV LVM、LocalPV ZFS 与 Mayastor 组件到 openebs 命名空间):

helm install openebs --namespace openebs openebs/openebs --create-namespace

若希望安装时排除 Replicated PV Mayastor(例如纯本地存储场景):

helm install openebs --namespace openebs openebs/openebs --set engines.replicated.mayastor.enabled=false --create-namespace

卸载时先删除所有存储卷与存储池,再执行:

helm delete <RELEASE NAME> -n <RELEASE NAMESPACE>

仓库还提供了脚本化安装入口 scripts/helm/install.sh,支持--upgrade、--wait、--timeout、--no-loki、--mayastor、--lvm、--zfs、--hostpath(始终启用)等选项,便于 CI/CD 流水线调用。

Chart 配置参数详解

引擎级开关与日志组件配置集中在 charts/values.yaml,关键参数如下:

配置键说明默认值
engines.local.hostpath.enabled启用/禁用动态 LocalPV Provisionertrue
engines.local.lvm.enabled启用/禁用 LocalPV LVM 存储引擎true
engines.local.zfs.enabled启用/禁用 LocalPV ZFS 存储引擎true
engines.local.rawfile.enabled启用/禁用 LocalPV Rawfile 存储引擎(未稳定,默认关闭)false
engines.replicated.mayastor.enabled启用/禁用 Replicated PV Mayastor 存储引擎true
openebs-crds.csi.volumeSnapshots.enabled启用/禁用 Volume Snapshot CRD 的安装true
preUpgradeHook.enabled启用/禁用 OpenEBS 升级前 Hooktrue
preUpgradeHook.image.registry/repo/tagHook 任务容器镜像配置docker.io/openebs/kubectl:1.25.15
global.imageRegistry全局容器镜像仓库覆盖""
global.imagePullSecrets全局镜像拉取密钥(与局部密钥合并而非覆盖)[]
global.imagePullPolicy全局镜像拉取策略覆盖""
loki.enabled启用/禁用 Loki 日志组件true
alloy.enabled启用/禁用 Alloy 日志采集组件true

关于升级前 Hook

charts/templates/pre-upgrade-hook.yaml 定义了仅在升级(helm upgrade)且检测到 v3 旧版本时运行的 Job:它为 VolumeSnapshot 相关 CRD 打上helm.sh/resource-policy=keep注解(防止快照 CRD 在升级中被误删),并删除旧的openebs-localpv-provisionerDeployment。这与 openebs-upgrade 的 Rust 实现共同构成 v3 → v4 的平滑升级路径。

Loki 存储选项(随 Chart 自带)

默认情况下 OpenEBS Chart 以高可用模式部署 Loki:多副本 + MinIO 分布式对象存储。Loki 存储有几种可选方案(详见 charts/loki-storage.md):

  1. 单副本部署(文件系统卷):适合小规模/测试环境,配置storage.type: filesystem、replication_factor: 1、minio.enabled: false;
  2. 高可用部署(对象存储):生产环境多副本必须使用对象存储,这是默认模式;
  3. MinIO 作为默认对象存储:Loki 处于 HA 模式时,推荐 MinIO 也运行在 HA 模式;
  4. 迁移提醒:从文件系统卷迁移到对象存储并不容易,如果未来计划扩容,从一开始就应选用对象存储;
  5. 外部 S3 兼容存储:可通过loki.loki.storage.type: s3并配置bucketNames.chunks、s3端点与凭证等字段接入 AWS S3、GCS 等任意 S3 兼容服务。

Chart 会为 Loki 与 MinIO 自动创建基于 LocalPV Hostpath 的 StorageClass(openebs-loki-localpv、openebs-minio-localpv),其provisioner: openebs.io/local、reclaimPolicy: Delete、volumeBindingMode: WaitForFirstConsumer,模板见 charts/templates/loki-storage/storage/localpv-storageclass.yaml。

深入引擎:Hostpath 动态供给的工作流

以 Local PV Hostpath 为例(详见 设计文档),动态供给器解决的问题是:有状态应用需要 PersistentVolume,但基础设施(本地 hostpath 目录)已存在却无法直接转化为 PV。传统做法需要管理员逐台登录节点建目录、手工编写 PV/PVC YAML,不可扩展。OpenEBS 通过openebs.io/local供给器实现了全动态流程。

典型的 Hostpath StorageClass 配置(spec.provisioner: openebs.io/local,volumeBindingMode: WaitForFirstConsumer,reclaimPolicy: Delete):

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: openebs-hostpath annotations: openebs.io/cas-type: local cas.openebs.io/config: | - name: StorageType value: "hostpath" - name: BasePath value: "/var/openebs/local/" provisioner: openebs.io/local volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Delete

供给流程(Provisioning):

  1. 接收 PersistentVolumeClaim 的供给任务;
  2. 校验 StorageClass 与 PVC 上的配置项;
  3. 合并 StorageClass 与 PVC 的配置;
  4. 生成 PersistentVolume 名称;
  5. 创建 init Pod——在指定/默认 hostpath 目录下按 PV 名称创建目录;
  6. init Pod 退出;
  7. 创建 PersistentVolume 对象——设置名称、目录路径、节点选择器标签键(可选)。

释放流程(Deprovisioning):接收 PV 删除任务 → 创建 cleanup Pod 删除 hostpath 目录及其内容 → 删除 PV 对象。触发条件是 PV 带有pv.kubernetes.io/provisioned-by: openebs.io/local标签。

完整的端到端操作序列为:部署供给器(helm install openebs openebs/openebs -n openebs)→ 创建 StorageClass → 创建 PVC → 创建使用该 PVC 的应用 Pod;删除时依次删除应用 Pod、删除 PVC,供给器自动完成目录清理与 PV 回收。

扩展生态:kubectl 插件与运维工具

  • Kubectl 插件(plugin/README.md):为使用统一 Chart 部署 OpenEBS 的用户提供统一管理界面,覆盖 Mayastor、LocalPV-LVM、LocalPV-ZFS、LocalPV-Hostpath 全部引擎。二进制命名为kubectl-openebs,因此命令为kubectl openebs,通用命令结构为kubectl openebs <engine> <operation> <resource>,默认输出表格格式,支持-o json/-o yaml;不再硬编码 mayastor 命名空间,默认使用 kubeconfig 当前上下文命名空间;
  • 升级工具(openebs-upgrade/src/lib.rs):Rust 实现的 v3 → v4 升级组件,配合 Chart 中的升级前 Hook 与 升级编排器 自动完成引擎 Chart 的替换与数据面升级;
  • 设计与规划:仓库 designs/ 收录了各引擎的 OEP 设计文档,涵盖 ZFS 池模式、LVM 瘦供给、Mayastor 加密、池扩展、卷组快照等主题,是深入理解引擎行为的最佳资料;
  • 发布与贡献流程:参见 RELEASE.md 与 contribute/process/release-management.md。

总结

OpenEBS 以"本地存储 + 复制存储"双路线覆盖 Kubernetes 有状态应用的全部持久化需求:需要自管复制的分布式工作负载可选择近乎零开销的 LocalPV(Hostpath/LVM/ZFS/Rawfile),需要存储级高可用与高性能的工作负载可选择 Replicated PV Mayastor。通过一个统一 Helm Chart 即可按需启用任意引擎组合,结合 CSI 标准、快照/克隆、在线扩容与 Velero 备份恢复,形成完整的云原生存储生命周期管理方案。OpenEBS 是 CNCF Sandbox 项目,遵循 Apache 2.0 许可(见 LICENSE),可部署于任何 Kubernetes 1.23+ 集群——无论是云端、本地(虚拟或裸金属)还是开发环境。

  • 云原生
  • CLI

【免费下载链接】openebs

A popular & widely deployed Open Source Container Native Storage platform for Stateful Persistent Applications on Kubernetes.

项目地址:https://gitcode.com/gh_mirrors/op/openebs
点击查看免费下载
上一篇:推荐一款强大的Python APNS库 - PyAPNs
下一篇:CANN/Ascend C全局缓冲区设置

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询