在 Kubernetes 中通过 Ceph 管理 PersistentVolume(PV)的核心步骤如下:
-
Ceph 集群准备:部署 Ceph 集群并创建存储池(如 RBD 块存储池或 CephFS 文件系统),确保 Kubernetes 节点能够访问 Ceph Monitor 和 OSD 节点。
-
Kubernetes Secret 配置:
- 创建包含 Ceph 用户认证信息(如
keyring
)的 Secret:apiVersion: v1 kind: Secret metadata: name: ceph-secret type: kubernetes.io/rbd data: key: <base64编码的Ceph用户密钥>
- 创建包含 Ceph 用户认证信息(如
-
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
- 使用 Ceph RBD 或 CephFS 的 Provisioner(如
-
PV/PVC 创建:
- 动态供给:通过 PVC 触发自动创建 PV:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ceph-pvc spec: storageClassName: ceph-rbd accessModes: [ReadWriteOnce] resources: requests: storage: 10Gi
- 静态供给:手动定义 PV,指定
monitors
、pool
等参数并绑定 PVC。
- 动态供给:通过 PVC 触发自动创建 PV:
-
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 需指定
path
和mounter
(如fuse
或kernel
)。 - 访问模式需与 Ceph 后端兼容(如 RBD 不支持 ReadWriteMany)。
- 多集群场景需配置
clusterID
及跨集群通信。