前置知识: 云计算

Kubernetes存储

3 minIntermediate2026/6/14

Kubernetes存储:PV、PVC、StorageClass、CSI 与数据持久化详解。

1. 存储概述

1.1 存储分层

┌──────────────────────────┐
│     应用 (Pod)            │
├──────────────────────────┤
│     PVC (声明)            │
├──────────────────────────┤
│     PV (卷)               │
├──────────────────────────┤
│     StorageClass (类)     │
├──────────────────────────┤
│     CSI (驱动)            │
├──────────────────────────┤
│     后端存储              │
└──────────────────────────┘

1.2 存储

描述生命周期
emptyDir临时目录随 Pod
hostPath节点路径独立
PV/PVC持久卷独立
ConfigMap配置独立
Secret敏感数据独立

2. PV 与 PVC

2.1 PersistentVolume (PV)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  nfs:
    server: 10.0.0.100
    path: /data/share

2.2 PersistentVolumeClaim (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: fast-ssd

2.3 访问模式

模式缩写描述
ReadWriteOnceRWO单节点读写
ReadOnlyManyROX多节点只读
ReadWriteManyRWX多节点读写
ReadWriteOncePodRWOP单 Pod 读写(1.27+)

2.4 回收策略

策略描述
Retain保留数据,需手动清理
Delete删除 PV 和后端存储
Recycle已废弃

2.5 绑定流程

PVC 创建 → 控制器匹配 PV → 绑定 → Pod 使用 PVC

3. StorageClass

3.1 概念

StorageClass 定义存储””,支持动态供给。

3.2 配置示例

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  iopsPerGB: '50'
  throughput: '250'
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

3.3 动态供给流程

PVC 创建(指定 StorageClass)→
  Provisioner 检测 →
    自动创建 PV →
      PVC 绑定 PV →
        Pod 使用

3.4 卷绑定模式

模式描述
Immediate立即绑定
WaitForFirstConsumer等 Pod 调度后绑定

4. CSI(容器存储接口

4.1 概念

CSI 是 Kubernetes 存储插件的标准接口,使存储供应商无需修改 Kubernetes 代码。

4.2 CSI 架构

Kubernetes → CSI Sidecar → CSI Driver → 存储后端

4.3 常见 CSI 驱动

驱动后端存储
ebs.csi.aws.comAWS EBS
disk.csi.azure.comAzure Disk
pd.csi.storage.gke.ioGCP Persistent Disk
disk.csi.alibabacloud.com阿里云云盘
csi-hostpath本地存储(测试)
ceph-csiCeph RBD/CephFS
nfs.csi.k8s.ioNFS

5. 临时存储

5.1 emptyDir

apiVersion: v1
kind: Pod
metadata:
  name: cache-pod
spec:
  containers:
    - name: app
      image: nginx
      volumeMounts:
        - name: cache
          mountPath: /cache
  volumes:
    - name: cache
      emptyDir:
        medium: Memory # 可选:使用内存
        sizeLimit: 256Mi

5.2 hostPath

volumes:
  - name: data
    hostPath:
      path: /data/app
      type: DirectoryOrCreate

注意:hostPath 不推荐生产使用,存在安全和调度问题。

6. 存储最佳实践

实践描述
使用 PVC 而非直接 PV解耦应用与存储
使用 StorageClass动态供给
WaitForFirstConsumer避免跨区绑定
数据备份定期快照
加密存储启用加密
监控监控存储使用率
清理策略合理设置回收策略