openebs动态存储使用

首先看性能用途对比

LocalPV LVM 与 LocalPV ZFS 对比表

项目 LocalPV LVM LocalPV ZFS 对比结果
性能(尤其是写) 更好(接近裸盘,overhead 极低);写性能通常比 ZFS 高 30%~5x(取决于 workload) 较好,但有明显 overhead(CoW、checksum、ARC 等);写性能一般比 LVM 慢 LVM 胜
读性能 优秀 优秀(有 ARC 缓存加持时经常很强) 差不多,ZFS 有时更好
CPU / 内存占用 很低(轻量) 较高(ZFS 需要较多 RAM 做 ARC 缓存,推荐每节点至少 8-16GB 空闲 RAM) LVM 胜
功能丰富度 基础(Thin Provisioning、Snapshot、Resize) 远强(快照几乎零成本、Compression、Deduplication、Checksumming 自愈、Encryption、zfs send/recv、RAIDZ 等) ZFS 大胜
数据完整性 一般(需额外配 dm-integrity) 极强(内置 checksum + 自愈) ZFS 大胜
快照(Snapshot) 支持,但有性能损耗 极佳(Copy-on-Write,几乎零成本) ZFS 大胜
Thin Provisioning + 扩容 支持 支持 平手
运维复杂度 较低 稍高(ZFS pool 管理、tuning) LVM 胜
Near bare-metal 性能 是(OpenEBS 官方表格明确标 Yes) 否(有 ZFS 层 overhead) LVM 胜

LocalPV LVM、LocalPV ZFS、Mayastor 三种存储方案对比表

对比项目 LocalPV LVM(LocalPV) LocalPV ZFS(ZFS) Mayastor(Replicated)
数据位置 单个节点本地 单个节点本地 跨节点分布(多节点同步)
节点故障影响 数据不可访问(单节点依赖) 数据不可访问(单节点依赖) 无影响(多节点副本备份)
写性能 极高(无额外开销,接近裸盘) 中等(有 CoW 及校验 overhead) 较高(低开销,同步复制)
CPU 占用 极低(仅内核层处理) 中等(需维护 ARC 缓存) 中等(需同步节点数据)
功能丰富度 基础(快照、扩容、薄置) 极高(压缩、加密、自愈等) 较高(副本同步、故障转移)
数据完整性 一般(需额外配置完整性校验) 极强(内置校验、自愈) 极强(多副本校验同步)
运维复杂度 低(仅管理 LVM 卷组) 中等(需维护 ZFS 池) 中等(需管理节点同步)
资源占用 低(无额外内存消耗) 较高(需预留 ARC 缓存内存) 中等(需维护节点同步)
适用场景 追求极致性能、简单运维场景 需数据高可靠性、功能丰富场景 需高可用、跨节点备份场景

存储方案性能对比表

存储方案 随机读 IOPS(4K) 随机写 IOPS(4K) 读延迟 写延迟 顺序吞吐(MB/s) CPU 开销 备注
裸 NVMe / LocalPV LVM 500K--1M+ 300K--800K+ ~0.05--0.2 ms ~0.1--0.3 ms 3000--7000+ 最低 最高性能基准
Mayastor (Replicated) 45K--500K+ 35K--400K+ 0.1--1.5 ms 1--2.5 ms 2000--3500+ 高(polling) 接近本地,replicas=2--3
LocalPV ZFS 50K--200K 20K--100K 0.2--0.8 ms 0.3--1.5 ms 1000--3000 中等(ARC 缓存) 快照强
Longhorn (v1/v2) 15K--60K 12K--50K 2--6 ms 3--10 ms 600--1200 中低 简单易用
Rook/Ceph RBD 25K--150K 20K--100K 0.5--2 ms 1--3 ms 1000--2800 中高 规模大但开销高
cStor (旧引擎) ~7K--20K - 已不推荐

总结 最好的就是lvm够了性能好,开销

快速部署Local PV LVM

部署前提

js 复制代码
apt install lvm2

在所有节点上创建卷组,LVM驱动将用于部署卷
pvcreate /dev/sdb
vgcreate lvmvg /dev/sdb

在上述命令中,是要创建的卷组名称。lvmvg
只安装lvm
js 复制代码
helm install openebs openebs/openebs \
  --namespace openebs \
  --set engines.replicated.mayastor.enabled=false \
  --set engines.local.zfs.enabled=false \
  --set engines.local.hostpath.enabled=false \
  --set loki.enabled=false \
  --set alloy.enabled=false
如下:
js 复制代码
# kubectl get pods
NAME                                             READY   STATUS    RESTARTS        AGE
openebs-localpv-provisioner-89447ff8-jt45m       1/1     Running   2 (5h41m ago)   24h
openebs-lvm-localpv-controller-95d4c9856-ldjkn   5/5     Running   0               24h
openebs-lvm-localpv-node-9wlll                   2/2     Running   0               24h
openebs-lvm-localpv-node-bn5rt                   2/2     Running   0               24h
openebs-lvm-localpv-node-w5ks9                   2/2     Running   0               24h
创建sc
yaml 复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-lvm
  annotations:
    storageclass.kubernetes.io/is-default-class: "false"   # 如果你不想让它成为默认,可以不加这行
provisioner: local.csi.openebs.io
parameters:
  storage: "lvm"
  volgroup: "lvmvg"  # ← 必须和你之前用 vgcreate 创建的卷组名称一致
  fsType: xfs
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: true

测试

yaml 复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: openebs-lvm
  resources:
    requests:
      storage: 20Gi
---

apiVersion: v1
kind: Pod
metadata:
 name: fio
spec:
 restartPolicy: Never
 containers:
 - name: perfrunner
   image: openebs/tests-fio
   command: ["/bin/bash"]
   args: ["-c", "while true ;do sleep 50; done"]
   volumeMounts:
      - mountPath: /datadir
        name: fio-vol
   tty: true
 volumes:
 - name: fio-vol
   persistentVolumeClaim:
     claimName: my-pvc
插件命令
js 复制代码
root@sr-demon1:/usr/local/src# openebs -n openebs localpv-lvm get volumes
 NAME                                      NODE        STATUS  CAPACITY   VOLGROUP  PVC-NAME  SC-NAME
 pvc-094022d1-836c-4c59-8504-5da2486a6e17  sr-demon-3  Ready   20.00 GiB  lvmvg     my-pvc    openebs-lvm
 pvc-bb516bcf-2d06-43e2-9166-ba9b54e3f2e8  sr-demon-3  Ready   20.00 GiB  lvmvg     my-pvc    openebs-lvm
root@sr-demon1:/usr/local/src# openebs localpv-lvm get volume-groups  -n openebs
 NAME   NODE        UUID                                    TOTAL-SIZE  FREE-SIZE  LV-COUNT  PV-COUNT  SNAP-COUNT
 lvmvg  sr-demon-2  doENw0-nkym-L8oT-rtO8-bJ8g-kDTR-9wIhLn  204796Mi    204796Mi   0         1         0
 lvmvg  sr-demon-3  Dbr6Ij-pwLf-OIIJ-domO-zu5E-3b40-hObUg7  204796Mi    163836Mi   2         1         0
 lvmvg  sr-demon-4  7p2svV-u0mq-0xUi-3wj8-biFI-SNws-YvESbB  204796Mi    204796Mi   0         1         0

机械盘跑starrocks 集群性能还是不错的


相关推荐
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
qq_452396233 天前
第十三篇:《K8s 安全基础:RBAC、ServiceAccount、Pod Security》
java·安全·kubernetes
睡不醒男孩0308233 天前
云原生运维实战:高并发架构下的云原生可观测性、韧性降级与自动化干预体系
数据库·kubernetes·高并发·prometheus·devops·sre·缓存调优
qq_452396233 天前
第十四篇:《K8s 网络模型与 CNI 插件(Calico、Flannel、Cilium)》
网络·kubernetes·php
Hadoop_Liang3 天前
Kubernetes 应用 HTTPS 安全访问配置实践
https·kubernetes
java_cj3 天前
从0到1启动kube-apiserver:深入源码解析API Server启动全流程
docker·容器·kubernetes
Hadoop_Liang4 天前
使用Kubernetes Gateway API实现域名访问应用
容器·kubernetes·gateway
java_cj4 天前
深入kubectl create源码:从YAML到Pod的完整链路拆解
运维·云原生·容器·kubernetes
万能的知了4 天前
K8s到底需不需要GPU节点?集群资源分配的底层逻辑
云原生·容器·kubernetes
卧室小白4 天前
K8S基础-控制器&deploy&pod回滚更新&service
docker·容器·kubernetes