Kubernetes(k8s) 中如何使用 Ceph 存储来管理 PersistentVolume(PV)?

问题浏览数Icon
32
问题创建时间Icon
2025-04-26 20:59:00
回答 | 共 4 个
作者头像
fengyun09

在 Kubernetes 中通过 Ceph 管理 PersistentVolume(PV)的核心步骤如下:

  1. Ceph 集群准备:部署 Ceph 集群并创建存储池(如 RBD 块存储池或 CephFS 文件系统),确保 Kubernetes 节点能够访问 Ceph Monitor 和 OSD 节点。

  2. Kubernetes Secret 配置

    • 创建包含 Ceph 用户认证信息(如 keyring)的 Secret:
      apiVersion: v1
      kind: Secret
      metadata:
      name: ceph-secret
      type: kubernetes.io/rbd
      data:
      key: <base64编码的Ceph用户密钥>
  3. StorageClass 定义(动态供给)

    • 使用 Ceph RBD 或 CephFS 的 Provisioner(如 rbd.csi.ceph.com):
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
      name: ceph-rbd
      provisioner: rbd.csi.ceph.com
      parameters:
      clusterID: <Ceph集群ID>
      pool: <RBD存储池名称>
      csi.storage.k8s.io/provisioner-secret-name: ceph-secret
      csi.storage.k8s.io/node-stage-secret-name: ceph-secret
  4. PV/PVC 创建

    • 动态供给:通过 PVC 触发自动创建 PV:
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: ceph-pvc
      spec:
      storageClassName: ceph-rbd
      accessModes: [ReadWriteOnce]
      resources:
       requests:
         storage: 10Gi
    • 静态供给:手动定义 PV,指定 monitorspool 等参数并绑定 PVC。
  5. Pod 挂载存储

    apiVersion: v1
    kind: Pod
    metadata:
     name: app-pod
    spec:
     containers:
       - name: app
         image: nginx
         volumeMounts:
           - mountPath: /data
             name: ceph-vol
     volumes:
       - name: ceph-vol
         persistentVolumeClaim:
           claimName: ceph-pvc

关键注意事项

  • 确保 Ceph 客户端工具(如 rbd)和内核模块在 Kubernetes 节点可用(RBD 场景)。
  • CephFS 需指定 pathmounter(如 fusekernel)。
  • 访问模式需与 Ceph 后端兼容(如 RBD 不支持 ReadWriteMany)。
  • 多集群场景需配置 clusterID 及跨集群通信。
作者头像
shuguang88

是否考虑过使用Rook简化Ceph存储管理,或在云环境中尝试AWS EBS等托管服务?

作者头像
dodo2333
  1. 准备Ceph集群:确保Ceph集群已部署且健康,创建专门用于Kubernetes的存储池(如k8s-pool)。

  2. 生成Ceph用户密钥

    ceph auth get-or-create client.k8s mon 'allow r' osd 'allow rwx pool=k8s-pool'

    保存生成的密钥(如ceph-secret文件)。

  3. 创建Kubernetes Secret

    apiVersion: v1
    kind: Secret
    metadata:
    name: ceph-secret
    type: kubernetes.io/rbd
    data:
    key: <base64编码的Ceph用户密钥>
  4. 定义StorageClass(动态供应)

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
    name: ceph-rbd
    provisioner: rbd.csi.ceph.com
    parameters:
    clusterID: <Ceph集群ID>
    pool: k8s-pool
    imageFeatures: layering
    csi.storage.k8s.io/provisioner-secret-name: ceph-secret
    csi.storage.k8s.io/node-stage-secret-name: ceph-secret
    reclaimPolicy: Delete
  5. 创建PVC

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: ceph-pvc
    spec:
    storageClassName: ceph-rbd
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
      storage: 10Gi
  6. 验证:PVC绑定后,Pod挂载PVC即可使用Ceph存储。

注意

  • 节点需安装ceph-common及内核RBD模块。
  • 若使用CephFS,需改用cephfs-provisioner并调整参数。
作者头像
quickstep22

在Kubernetes中使用Ceph存储管理PersistentVolume(PV)的核心步骤如下:

  1. Ceph集群部署:搭建Ceph集群并创建存储池(RBD)或文件系统(CephFS)。确保Kubernetes节点网络与Ceph集群互通。

  2. 认证配置

    • 生成Ceph用户密钥(如client.k8s),通过ceph auth get-key获取密钥。
    • 在Kubernetes中创建Secret存储认证信息(如monitor地址、用户密钥),例如:
      apiVersion: v1
      kind: Secret
      metadata:
      name: ceph-secret
      type: "kubernetes.io/rbd"
      data:
      key: <base64编码的Ceph用户密钥>
  3. CSI驱动集成

    • 部署Ceph CSI插件(如csi-rbdplugincsi-cephfsplugin),替代传统in-tree驱动以实现更灵活的存储管理。
  4. StorageClass定义

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: ceph-rbd
    provisioner: rbd.csi.ceph.com
    parameters:
     clusterID: <Ceph集群ID>
     pool: k8s_pool
     imageFeatures: layering
    reclaimPolicy: Delete
  5. 动态资源分配:用户通过PVC触发自动PV创建。示例PVC:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: ceph-pvc
    spec:
     storageClassName: ceph-rbd
     accessModes: ["ReadWriteOnce"]
     resources:
       requests:
         storage: 5Gi
  6. Pod挂载验证:在Pod中引用PVC测试数据持久化能力,检查跨节点调度时的存储状态一致性。

关键注意事项

  • 网络策略需开放Ceph monitor端口(默认6789)及OSD通信端口
  • 建议启用Ceph RBD镜像的fast-diffdeep-flatten特性以支持高级功能
  • 通过ceph osd pool application enable命令标记存储池用途
  • 监控需同时覆盖Ceph集群健康状态(如PG分布、OSD利用率)及Kubernetes PV/PVC使用量

灾备方案

  • 利用Ceph RBD镜像快照创建定期备份
  • 结合Velero实现应用级存储迁移
  • 配置Ceph纠删码池提升数据可靠性

此方案通过CSI实现存储与计算解耦,支持在线扩容、多访问模式等企业级需求,建议生产环境使用Ceph v16+(Pacific)与Kubernetes v1.23+版本组合。