Kubernetes 在 Debian 上的存储选型与落地
一 选型总览
- 临时与本地开发:EmptyDir(Pod 生命周期内有效)、HostPath(节点目录映射,节点故障不可达)。
- 共享文件存储:NFS(简单、成本低,适合多 Pod 读写的共享场景)。
- 分布式块存储:Ceph RBD(Rook 管理,高可用、可扩展)、Longhorn(轻量、易运维,适合边缘/中小集群)。
- 分布式文件存储:GlusterFS(需至少3块磁盘,配合 Heketi 可做动态供给)。
- 直连块存储:iSCSI(对接外置 SAN/阵列,适合已有存储基础设施)。
以上方案均可在 Debian 节点上部署,结合 PV/PVC/StorageClass 实现静态或动态供给。
二 快速落地方案
-
NFS 共享存储(入门首选)
- 在 Debian 上搭建 NFS Server:
sudo apt install -y nfs-kernel-server
sudo mkdir -p /data/nfs-server
echo “/data/nfs-server *(rw,async,no_subtree_check)” | sudo tee -a /etc/exports
sudo systemctl start nfs-kernel-server && sudo systemctl enable nfs-kernel-server
-
集群内使用(静态 PV/PVC 示例):
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity: {storage: 2Gi}
accessModes: [“ReadWriteMany”]
nfs: {server: “<NFS_SERVER_IP>”, path: “/data/nfs-server”}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes: [“ReadWriteMany”]
resources: {requests: {storage: 1Gi}}
- 提示:NFS 适合共享访问;若需动态供给,可部署 NFS Provisioner(如 nfs-subdir-external-provisioner)。
-
Rook Ceph 块存储(生产级统一存储)
- 前置:在每个节点安装 ceph-common(sudo apt install -y ceph-common)。
- 部署 Rook Operator 与 CephCluster(示例命令):
kubectl apply -f https://raw.githubusercontent.com/rook/rook/release-1.13/cluster/examples/kubernetes/ceph/operator.yaml
kubectl apply -f https://raw.githubusercontent.com/rook/rook/release-1.13/cluster/examples/kubernetes/ceph/cluster.yaml
- 创建 StorageClass(动态供给 RBD):
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: “<CLUSTER_ID>”
pool: replicapool
imageFeatures: layering
csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner-secret
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node-secret
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
reclaimPolicy: Delete
- 在 PVC 中指定 storageClassName: rook-ceph-block 即可动态创建 RBD 卷。
-
Longhorn 分布式块存储(轻量易用)
- Helm 安装:
helm repo add longhorn https://charts.longhorn.io
helm install longhorn longhorn/longhorn --namespace longhorn-system
- 使用:Longhorn 会自动创建 longhorn StorageClass,直接在 PVC 中使用该 class 即可动态创建卷,支持快照、备份与多副本。
三 关键配置要点
- PV/PVC 与访问模式
- ReadWriteOnce(RWO):单节点读写;ReadOnlyMany(ROX):多节点只读;ReadWriteMany(RWX):多节点读写。
- NFS 天然适合 RWX;块存储(RBD/RawDisk)通常提供 RWO,如需 RWX 可结合上层共享(如 NFS)或使用支持 RWX 的 CSI。
- StorageClass 参数
- provisioner:指定 CSI/插件(如 rook-ceph.rbd.csi.ceph.com、kubernetes.io/no-provisioner)。
- volumeBindingMode:
- WaitForFirstConsumer:调度后再绑定,适合本地盘/拓扑感知;
- Immediate:立即绑定。
- reclaimPolicy:Delete(删除 PVC 同时清理 PV/后端卷)或 Retain(保留数据便于手动回收)。
- 本地盘与拓扑约束
- 使用 local 卷时,推荐:provisioner: kubernetes.io/no-provisioner,volumeBindingMode: WaitForFirstConsumer,reclaimPolicy: Retain,避免调度漂移导致数据不可用。
四 场景化建议
- 学习与测试:EmptyDir/HostPath 快速验证;需要共享时用 NFS。
- 中小规模生产:Longhorn(部署快、运维简单、带快照/备份)。
- 需要统一存储与多协议:Rook Ceph(块/文件/对象一体,适合高可用与扩展性)。
- 已有磁盘/三节点起步:GlusterFS + Heketi(至少3块盘,Heketi 做动态卷管理)。
- 对接外置阵列:iSCSI(Kubernetes 侧作为块卷使用,依赖外部目标端配置)。