Kubernetes 1.31 + CephFS CSI 的部署和使用说明

1️⃣ 部署 CephFS CSI 驱动

如果不用 Rook,可以直接用 Ceph CSI 官方 YAML 安装:

git clone --depth=1 https://github.com/ceph/ceph-csi.git
cd ceph-csi/deploy/cephfs/kubernetes
kubectl apply -f csi-cephfsplugin.yaml
kubectl apply -f csi-cephfsplugin-provisioner.yaml

如果你的 K8s 节点没有 ceph-common 包,需要提前安装(用于挂载 CephFS)。


2️⃣ 创建访问 CephFS 的 Secret

yaml复制编辑apiVersion: v1
kind: Secret
metadata:
  name: cephfs-secret
  namespace: default
stringData:
  adminID: csi
  adminKey: AQDxxxxxxxxxxxxxxxxxxx==

获取 key:

bash复制编辑ceph auth get-key client.csi

3️⃣ 创建 StorageClass

yaml复制编辑apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:
  clusterID: <你的 Ceph FSID>
  fsName: cephfs
  pool: cephfs_data
  csi.storage.k8s.io/provisioner-secret-name: cephfs-secret
  csi.storage.k8s.io/provisioner-secret-namespace: default
  csi.storage.k8s.io/node-stage-secret-name: cephfs-secret
  csi.storage.k8s.io/node-stage-secret-namespace: default
reclaimPolicy: Delete
allowVolumeExpansion: true

4️⃣ 创建 PVC(多 Pod 共享读写)

yaml复制编辑apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cephfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: csi-cephfs-sc
  resources:
    requests:
      storage: 20Gi

5️⃣ Pod 挂载示例

yaml复制编辑apiVersion: v1
kind: Pod
metadata:
  name: cephfs-test-pod
spec:
  containers:
  - name: app
    image: busybox
    command: ["/bin/sh", "-c", "sleep 3600"]
    volumeMounts:
    - name: cephfs-vol
      mountPath: /mnt/cephfs
  volumes:
  - name: cephfs-vol
    persistentVolumeClaim:
      claimName: cephfs-pvc

6️⃣ 使用建议

  • Kubernetes 1.31 必须用 CSI 驱动,不能再用老的 kubernetes.io/cephfs
  • 如果要生产部署,建议配合 Rook 管理 Ceph 集群,这样 CSI 自动部署、升级和配置更方便。
  • 如果 CephFS 工作目录很大,建议在 StorageClass 中合理设置 mounter: fusemounter: kernel,并保持内核和 Ceph 版本兼容。