Skip to content
返回部署

Kubernetes Volumes

Pod 持久和临时存储 — PV、PVC 和存储类。

容器高级

为什么

K8s volume 提供存活 pod 重启的存储(PersistentVolume)或临时(emptyDir)。PVC 抽象存储请求与存储供应者。

Docker is used by 59% of professional developers per the Stack Overflow 2024 survey,Kubernetes 在生产中运行 60% 的容器化工作负载(CNCF 2024 调查)。容器编排通过声明式滚动发布将部署相关事故减少 35%。

何时使用

持久数据(DB、上传)用 PV/PVC。临时空间用 emptyDir。

如何做

1. StorageClass — 定义供应者(EBS、gp3 等) 2. PVC — 请求存储,自动供应 PV 3. 挂载 — pod spec 中 volumeMounts 4. 访问 — ReadWriteOnce、ReadOnlyMany、ReadWriteMany 5. 调整 — allowVolumeExpansion: true 6. 快照 — VolumeSnapshot 备份 7. 临时 — emptyDir 临时空间

示例

# pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: { name: data } spec: accessModes: [ReadWriteOnce] storageClassName: gp3 resources: { requests: { storage: 10Gi } } # deployment.yaml — 挂载 PVC spec: containers: - name: app volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: { claimName: data } # 临时空间 volumes: - name: scratch emptyDir: { sizeLimit: 1Gi }

常见问题

  • ⚠PVC pending — 无存储类或容量不足,查事件
  • ⚠pod 删丢数据 — 用 emptyDir 非 PVC,emptyDir 临时
  • ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致

最佳实践

  • ✓持久数据用 PVC — 存活 pod 删除和重调度
  • ✓storageClassName 设快 SSD — AWS gp3,Azure premium SSD
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答