【云原生】openebs-device+cstor存储方案部署

要配置使用 OpenEBS 的 device+cStor 存储方案,需要完成 cStor 池的创建、存储类定义等步骤。cStor 是 OpenEBS 提供的高性能块存储解决方案,基于存储设备构建,支持快照、克隆等高级功能。以下是详细配置步骤:

一、前提条件

1. 节点准备
  • Kubernetes 集群(1.21+ 版本,本文k8s版本为1.28.2)

  • 每个节点上有至少一块空闲的块设备(未格式化且未挂载

  • 安装 OpenEBS(参考官方文档):

bash 复制代码
kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml
2. 验证 OpenEBS 组件
bash 复制代码
kubectl get pods -n openebs

确保 cstor-operatoropenebs-ndm 等组件正常运行(STATUS=Running)。

二、配置步骤

1. 发现并标记存储设备

OpenEBS 的 NDM(Node Disk Manager)会自动发现节点上(openebs-ndm运行的节点)的块设备,需标记可用设备供 cStor 使用。

(1)查看发现的设备(存在污点的master节点除外)

bash 复制代码
kubectl get blockdevices -n openebs

输出示例:

复制代码
NAME                NODENAME    SIZE          CLAIMSTATE   STATUS
blockdevice-123...   slave01       107374182400  Unclaimed    Active
blockdevice-876...   slave02       107374182400  Unclaimed    Active

(2)标记设备为 "cstor" 可用

bash 复制代码
kubectl label blockdevices -n openebs blockdevice-12345678... openebs.io/block-device-type=cstor
kubectl label blockdevices -n openebs blockdevice-87654321... openebs.io/block-device-type=cstor
2. 安装cstor-operator
bash 复制代码
kubectl apply -f https://openebs.github.io/charts/cstor-operator.yaml
​
# 若registry.k8s.io镜像仓库无法访问

# 方案一:
可以 wget https://openebs.github.io/charts/cstor-operator.yaml 到本地
# 将镜像中registry.k8s.io替换为k8s.mirror.nju.edu.cn
# 然后 kubectl apply -f cstor-operator.yaml

​# 方案二:
# 或者在各节点containered仓库配置
sudo vi /etc/containerd/config.toml
# 添加如下配置
 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"] # registry.k8s.io
               endpoint = ["https://k8s.mirror.nju.edu.cn"]
               
# 再reload、restart containered
sudo systemctl daemon-reload
sudo systemctl restart containerd
3. 验证是否安装成功
bash 复制代码
kubectl get crd | grep cstor
4. 创建 cStor 池(CStorPoolCluster)
bash 复制代码
apiVersion: cstor.openebs.io/v1
kind: CStorPoolCluster
metadata:
  name: cstor-pool
  namespace: openebs
spec:
  pools:
    # 02节点的池配置
    - nodeSelector:
        kubernetes.io/hostname: hy02  # 目标节点
      dataRaidGroups:
        - blockDevices:
            # 02节点的块设备名称
            - blockDeviceName: blockdevice-6710671d199cc923f5d05d72a16f8e51
      poolConfig:
        # 单盘必须用 stripe;mirror 需至少 2 块盘;raidz 需至少 3 块盘
        dataRaidGroupType: stripe
        # 可选:开启厚置备(默认 false,即 thin provision)
        thickProvision: false
        # 可选:压缩(默认 off,可选 lz)
        compression: "off"

    # 03节点的池配置
    - nodeSelector:
        kubernetes.io/hostname: hy03  # 目标节点
      dataRaidGroups:
        - blockDevices:
            # 03节点的块设备名称
            - blockDeviceName: blockdevice-1e62f0264d7ceb5c4b6232d67e0d1915
      poolConfig:
        # 单盘必须用 stripe
        dataRaidGroupType: stripe
        thickProvision: false
        compression: "off"

(1)应用配置

bash 复制代码
kubectl apply -f cstor-pool.yaml

(2)验证 cStor 池状态

bash 复制代码
# 查看池集群
kubectl get cspc -n openebs
# 查看单个池状态
kubectl get cspi -n openebs

三、创建存储类(StorageClass)

bash 复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-cstor
provisioner: cstor.csi.openebs.io
parameters:
  cas-type: cstor
  cstorPoolCluster: cstor-pool   # 对应你的 CSPC 名称
  replicaCount: "2"              # 数据副本数(建议与节点数一致)
allowVolumeExpansion: true

应用配置

bash 复制代码
kubectl apply -f cstor-sc.yaml

四、使用:创建PVC、PV即可

自动创建pv和pvc绑定

亲测有效哦,如果文章中有什么问题,欢迎大家批评指正!!!

相关推荐
Spider Cat 蜘蛛猫2 小时前
微服务- 自动审核商家入驻
微服务·云原生·架构
陈聪.2 小时前
Kubernetes Service 与 Ingress 知识总结
云原生·容器·kubernetes
分布式存储与RustFS21 小时前
RustFS 多协议接入全景:S3 之外,Swift/Keystone 与 SFTP/FTPS 怎么选
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
分布式存储与RustFS1 天前
在 Kubernetes 上用 RustFS Operator 给 Tenant 开 KMS 加密:spec.encryption 实战
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
Seoyoneh1 天前
呼叫中心系统云原生架构演进:传统自建与云端部署的技术实现对比分析
云原生·架构
2601_962218471 天前
万象生鲜系统订单全生命周期追踪实现生鲜企业订单业务数字化可视
大数据·运维·微服务·云原生·架构
分布式存储与RustFS2 天前
RustFS 1.0 GA 前的生产验收清单:从 rc.1 到 GA 该准备什么
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
Henry-SAP2 天前
SAP PP 反冲机制业务解析
人工智能·云原生·sap·erp
A-刘晨阳2 天前
K8s集群中的数据库新范式:KES-Operator解锁部署、扩缩容、备份全链路自动化
运维·数据库·云原生·kubernetes·自动化
江畔柳前堤2 天前
云原生 × AI 全景图谱:从 Kubernetes 到 Agent 基础设施的一次认知跃迁
人工智能·分布式·gpt·云原生·kubernetes·原型模式·agi