温馨提示×

Kubernetes部署时Debian存储解决方案

小樊
31
2025-12-26 21:11:18
栏目: 云计算

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:立即绑定。
    • reclaimPolicyDelete(删除 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 侧作为块卷使用,依赖外部目标端配置)。

0