pod-6

核心要点:pv的accessModes字段和pvc的accessModes不匹配,他们是子集关系。题目给出的pv是once而实际应用的pvc则是many,这肯定是不符合要求的。
PVC 的 accessModes 必须是 PV 的 accessModes 的子集
例如:
PV 有 ReadWriteOnce 和 ReadOnlyMany
PVC 可以请求 ReadWriteOnce 或 ReadOnlyMany
但如果 PVC 请求 ReadWriteMany(而 PV 不支持),则会绑定失败。
StorageClass 的干预
如果 PVC 未指定 accessModes,某些 StorageClass 可能会提供默认值,但显式声明是最佳实践。

还有个知识点就是sc自动在pod的节点创建对应的pv目录,cka中用到的则是一个叫
local-path的开源sc会自动在pod所在节点自动创建。使用以下命令即可。
#拉取一个开源的sc部署,实现自动创建目录
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml
在pvc的资源清单里指定就行。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: local-path # 使用这个 SC
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
如果只是想让 Kubernetes 自动管理存储(比如自动创建目录、绑定 PV/PVC),直接安装一个现成的 CSI Driver 或 Provisioner 就行,不需要自己从头写代码。
📌 一句话总结
“Provisioner” 或 “CSI Driver” 就是现成的工具,安装后就能让 Kubernetes 自动管理存储(比如自动创建目录、动态分配 PV)。
🚀 3 种现成方案(按推荐顺序)
1️⃣ 直接使用 local-path(最简单,适合测试)
适用场景:单节点存储、CKA 考试、快速测试
特点:
- 自动在 Pod 所在节点创建目录(如
/opt/local-path-provisioner/pvc-xxx) - 仅支持
ReadWriteOnce(不能多节点共享) - 删除 PVC 后数据会被清理(
reclaimPolicy: Delete)
安装方式:
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml
使用方式:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: local-path # 使用这个 SC
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
2️⃣ 使用开源 CSI Driver(生产推荐)
适用场景:多节点共享存储、生产环境
推荐工具:
| 工具 | 存储类型 | 特点 |
|---|---|---|
| NFS Subdir External Provisioner | NFS | 自动在 NFS 服务器上创建子目录 |
| TopoLVM | 本地 LVM | 动态管理本地磁盘 |
| OpenEBS | 本地/分布式 | 支持多副本、快照 |
示例(NFS Provisioner):
helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=192.168.1.100 \
--set nfs.path=/mnt/nfs_share
生成的 StorageClass:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-sc
provisioner: cluster.local/nfs-provisioner
parameters:
archiveOnDelete: "false"
3️⃣ 云厂商的 CSI Driver(AWS/GCP/Azure)
适用场景:云环境(EBS、Azure Disk、Google Persistent Disk)
特点:
- 全托管,无需维护存储服务器
- 自动扩容、快照、加密
示例(AWS EBS):
kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"
PVC 示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ebs-pvc
spec:
storageClassName: ebs-sc # AWS EBS 的 StorageClass
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
🔧 如何选择?
| 场景 | 推荐方案 |
|---|---|
| CKA 考试 / 本地测试 | local-path |
| 本地集群 + 共享存储 | NFS Provisioner |
| 云环境(AWS/GCP/Azure) | 云厂商 CSI Driver |
| 生产级本地存储 | TopoLVM / OpenEBS |
- “Provisioner” 就是现成的工具,安装后 Kubernetes 就能自动管理存储(动态创建 PV/目录)。
- 大多数情况不需要自己写代码,直接用开源方案(如
local-path、NFS Provisioner、云厂商 CSI)。 - 生产环境建议用 CSI Driver(如 AWS EBS CSI、TopoLVM),功能更完整。
浙公网安备 33010602011771号