Day 13 - Volume 与 PV/PVC
📘 Day 13:Volume 与 PV/PVC
🎯 今日目标
- 会用 emptyDir 和 hostPath Volume
- 理解 PV/PVC 的绑定流程
- 能创建静态 PV 并供 Pod 使用
- 掌握 AccessMode(RWO/ROX/RWX)
- 掌握 ReclaimPolicy(Retain/Recycle/Delete)
🧠 理论精讲(30 分钟)
存储层次
1 | Pod ──→ PVC(声明:我要 5Gi RWO 存储)──→ PV(物理存储:这里是 5Gi NFS) |
| 概念 | 说明 | 类比 |
|---|---|---|
| Volume | Pod 级别存储定义 | 直接在 Pod 里写磁盘配置 |
| PV | 集群级别存储资源 | 管理员准备的存储池 |
| PVC | 用户存储请求 | 申请单 |
PV 关键属性
| 属性 | 可选值 | 说明 |
|---|---|---|
| accessModes | RWO / ROX / RWX | 读写模式 |
| ReclaimPolicy | Retain / Recycle / Delete | PV 释放后行为 |
| volumeMode | Filesystem / Block | 文件系统还是块设备 |
AccessMode 速查
| 缩写 | 全称 | 含义 |
|---|---|---|
| RWO | ReadWriteOnce | 单节点读写 |
| ROX | ReadOnlyMany | 多节点只读 |
| RWX | ReadWriteMany | 多节点读写 |
PV 生命周期
1 | Provisioning(创建)→ Available(可用)→ Bound(已绑定)→ Released(释放) |
🔧 动手实操(120 分钟)
练习 13.1:emptyDir Volume
1 | # emptyDir:Pod 生命周期内存在,Pod 删除即销毁 |
练习 13.2:hostPath Volume
1 | # hostPath:挂载节点上的目录 |
练习 13.3:静态 PV 创建与绑定
1 | # 1. 先在节点上创建实际目录 |
练习 13.4:多 PV 自动匹配
1 | # 创建 3 个不同大小的 PV |
🐛 排错练习(30 分钟)
场景:PVC 一直 Pending
1 | # 排查清单 |
🏆 赛题模拟(40 分钟)
⚠️ 严格限时 35 分钟
题目:静态 PV 存储管理
1 | 【操作要求】 |
📋 命令速查
| 命令 | 功能 | 注解 |
|---|---|---|
kubectl get pv |
列出 PersistentVolume | STATUS: Available (空闲)/Bound (已绑定)/Released (PVC 已删但未回收)/Failed |
kubectl get pv -o wide |
PV + 容量/访问模式/回收策略/状态/声明 | 快速审计存储资源 |
kubectl describe pv <name> |
PV 详细信息 | 查看 Reclaim Policy、AccessModes、底层存储类型(hostPath/NFS/CSI 等) |
kubectl get pvc |
列出 PersistentVolumeClaim | STATUS: Pending (无匹配 PV)/Bound (已绑定) |
kubectl get pvc -A |
所有命名空间的 PVC | 跨 NS 视角排查存储资源使用 |
kubectl describe pvc <name> |
PVC 详细信息 | Events 段显示绑定过程;Pending 时查看失败原因 |
kubectl get pv,pvc |
同时查看 PV/PVC | 逗号分隔查看绑定关系 |
kubectl patch pv <name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' |
修改 PV 回收策略 | 防止 PVC 删除时 PV 被自动回收(Retain/Recycle/Delete) |
kubectl delete pvc <name> |
删除 PVC | PV 的 Reclaim Policy 决定 PV 后续状态 |
kubectl get pods -o wide | grep <pod> |
查看 Pod 所在节点 | PV hostPath 必须确认 Pod 调度到了正确节点 |
kubectl exec <pod> -- df -h |
查看 Pod 内挂载存储空间 | 验证 PV 是否挂载成功及容量是否正确 |
kubectl exec <pod> -- ls -la /mnt/data |
查看挂载目录内容 | 验证文件是否存在和权限 |
kubectl exec <pod> -- touch /mnt/data/test && echo "ok" > /mnt/data/test |
验证存储读写 | 确认 PV 不是只读挂载 |
kubectl get sc |
列出 StorageClass | 动态供给与 PV/PVC 配合使用 |
📚 参考来源
| 来源 | 链接 / 说明 |
|---|---|
| Kubernetes 官方:PersistentVolume | https://kubernetes.io/docs/concepts/storage/persistent-volumes/ |
| Kubernetes 官方:卷 | https://kubernetes.io/docs/concepts/storage/volumes/ |
| Kubernetes 官方:配置 Pod 使用 PV | https://kubernetes.io/docs/concepts/storage/persistent-volumes/ |
| Kubernetes 官方:访问模式 | https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes |
| Kubernetes 官方:回收策略 | https://kubernetes.io/docs/concepts/storage/persistent-volumes/#reclaim-policy |