乐于分享
好东西不私藏

Kubernetes 中支持的存储插件详解

Kubernetes 中支持的存储插件详解

一、Kubernetes 存储体系概述

Kubernetes 通过持久卷(Persistent Volume, PV)持久卷声明(Persistent Volume Claim, PVC)机制实现存储抽象。存储插件作为两者之间的桥梁,主要分为In-TreeOut-of-Tree两大类:

关键结论:Kubernetes 存储生态已从传统的 In-Tree 插件向 CSI (Container Storage Interface) 标准化架构迁移,CSI 是当前生产环境的最佳实践选择。

二、主要存储插件分类

1. In-Tree 插件(内置插件)

这些是 Kubernetes 原生集成的存储驱动,但已逐步被 CSI 替代:

  • AWSElasticBlockStore
    :AWS EBS 卷
  • AzureDisk
    :Azure 托管磁盘
  • GCEPersistentDisk
    :Google Cloud 持久化磁盘
  • CephFS
    :Ceph 文件系统
  • NFS
    :网络文件系统
  • iSCSI
    :SCSI over IP
  • Local
    :本地存储卷(K8s 1.14+)
# 传统 PV 示例(NFS)
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.0.0.1
    path: "/exports"

2. CSI 驱动(推荐方案)

Container Storage Interface 是标准化存储接口,主流云厂商和存储提供商都实现了 CSI 驱动:

2.1 公有云 CSI 驱动

  • AWS EBS CSI
    ebs.csi.aws.com
  • Azure Disk CSI
    disk.csi.azure.com
  • GCP PD CSI
    pd.csi.storage.gke.io
  • AliCloud Disk CSI
    diskplugin.csi.alibabacloud.com

2.2 企业存储 CSI 驱动

  • Ceph CSI
    :支持 RBD 和 CephFS
  • NetApp Trident
    csi.trident.netapp.io
  • Portworx
    pxd.portworx.com
  • Pure Storage
    pure-csi

2.3 本地存储方案

  • Local Path Provisioner
    :简单本地路径供给
  • OpenEBS
    :开源容器附加存储
# 查看集群已安装的 CSI 驱动
kubectlgetcsidrivers.storage.k8s.io

3. FlexVolume 插件(过渡方案)

FlexVolume 是 CSI 之前的扩展方案,现已被淘汰:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-flex
spec:
  flexVolume:
    driver: "azure/azurefile"
    secretRef:
      name: azure-secret
    options:
      shareName: "k8s"

三、生产环境选型建议

1. 云环境选择

最佳实践:始终使用对应云厂商的 CSI 驱动,它们经过充分测试且支持最新功能(如快照、扩容等)

2. 本地数据中心选择

  • 文件存储
    :CephFS CSI / NFS
  • 块存储
    :Ceph RBD CSI / iSCSI
  • 超融合
    :OpenEBS / Rook

3. 特殊场景

  • 高性能需求
    :Portworx / Pure Storage
  • 跨云场景
    :Rook + Ceph

四、CSI 驱动部署示例(以 AWS EBS 为例)

# 1. 部署 AWS EBS CSI 驱动
kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

# 2. 创建 StorageClass
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
  encrypted: "true"
EOF

# 3. 创建 PVC
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ebs-claim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ebs-sc
  resources:
    requests:
      storage: 10Gi
EOF

五、面试重点问题

  1. CSI 架构组件

    • Node Plugin(DaemonSet 部署)
    • Controller Plugin(StatefulSet/Deployment 部署)
  2. 动态供给流程

    graphTD
    A[创建PVC]--B[CSI Provisioner监听到]
    B--C[调用CSI CreateVolume]
    C--D[创建PV并绑定]
  3. 拓扑感知调度

    # StorageClass 关键参数
    volumeBindingMode: WaitForFirstConsumer
  4. 扩展操作

    • 卷扩容(allowVolumeExpansion: true
    • 快照/克隆(需安装 VolumeSnapshot CRD)

面试技巧:结合具体场景说明存储选型理由,例如:”在AWS环境中我们会选择EBS CSI而不是In-Tree驱动,因为它支持更快的卷扩容操作和IOPS配置”

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Kubernetes 中支持的存储插件详解

评论 抢沙发

7 + 1 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮