K8s 动态 PV 供应:StorageClass 与 CSI 插件(Ceph/Rook)的联动配置
·
Kubernetes 动态 PV 供应:StorageClass 与 CSI 插件(Ceph/Rook)配置指南
核心概念
-
动态 PV 供应
自动按需创建持久卷,无需手动预置存储资源。 -
StorageClass
定义存储的"类别",包含供应器参数和回收策略:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: rook-ceph-block provisioner: rook-ceph.rbd.csi.ceph.com # CSI 驱动标识 reclaimPolicy: Retain allowVolumeExpansion: true -
CSI 插件
Ceph/Rook 通过 CSI 驱动程序实现与 Kubernetes 的集成:- RBD (块存储):
rook-ceph.rbd.csi.ceph.com - CephFS (文件存储):
rook-ceph.cephfs.csi.ceph.com
- RBD (块存储):
配置步骤(以 RBD 为例)
1. 部署 Rook-Ceph 集群
确保已安装 Rook Operator 并创建 CephCluster:
kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.8.0/deploy/examples/crds.yaml
kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.8.0/deploy/examples/common.yaml
kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.8.0/deploy/examples/operator.yaml
kubectl apply -f cluster.yaml # 自定义的 Ceph 集群配置
2. 创建 StorageClass
# rook-ceph-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: rook-ceph # Ceph 集群命名空间
pool: replicapool # RBD 存储池名称
imageFormat: "2" # RBD 镜像格式
imageFeatures: layering # RBD 特性
csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: Immediate
应用配置:
kubectl apply -f rook-ceph-storageclass.yaml
3. 创建 PersistentVolumeClaim (PVC)
# demo-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
storageClassName: rook-ceph-block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
应用 PVC:
kubectl apply -f demo-pvc.yaml
验证配置
-
检查 PV 自动创建:
kubectl get pv # 应显示自动生成的 PV -
查看 PVC 状态:
kubectl get pvc rbd-pvc -o wide输出示例:
NAME STATUS VOLUME CAPACITY STORAGECLASS AGE rbd-pvc Bound pvc-... 10Gi rook-ceph-block 5m -
检查 Ceph 存储池:
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- rbd ls replicapool
关键参数说明
| 参数 | 说明 |
|---|---|
provisioner | CSI 驱动程序标识符 |
clusterID | Rook 部署的命名空间 |
pool | Ceph 中创建的 RBD 存储池 |
reclaimPolicy | PV 回收策略 (Retain/Delete) |
volumeBindingMode | 卷绑定时机 (Immediate/WaitForFirstConsumer) |
故障排查
-
PVC 卡在 Pending 状态
- 检查 StorageClass 名称是否匹配
- 验证 CSI 插件 Pod 是否正常运行:
kubectl -n rook-ceph get pod -l app=csi-rbdplugin-provisioner
-
卷挂载失败
- 检查节点上的 CSI 驱动日志:
kubectl -n rook-ceph logs ds/csi-rbdplugin
- 检查节点上的 CSI 驱动日志:
-
存储扩容问题
- 确保 Ceph 存储池支持自动扩容
- 验证
allowVolumeExpansion: true已设置
提示:完整配置参考 Rook 官方文档。
更多推荐
所有评论(0)