在Kubernetes的PV/PVC中引用StorageClass前是否需要提前创建?
问题解答
1. PV/PVC引用不存在的StorageClass仍能绑定的原因
Kubernetes中storageClassName字段对于静态预配的PV来说,仅作为匹配标识使用,不需要对应集群中真实存在的StorageClass资源。PV控制器执行绑定时,只会校验三个核心匹配条件:
- 二者
storageClassName的取值完全一致 - PVC请求的存储容量不超过PV的容量
- 二者的访问模式完全匹配
只要三个条件全部满足就会完成绑定,不会额外校验该storageClassName对应的StorageClass资源是否真实存在。只有需要动态创建PV的场景下,才要求StorageClass资源真实存在,用于调用对应存储插件创建PV。
2. PVC不指定StorageClass报错,指定不存在的slow反而绑定成功的原因
当PVC未显式声明storageClassName时,Kubernetes的处理逻辑如下:
- 优先自动填充集群配置的默认StorageClass
- 如果集群没有配置默认StorageClass,PVC会直接抛出StorageClass相关报错,除非你显式将PVC的
storageClassName设置为""(空字符串),表示明确要匹配未设置StorageClass的静态PV。
你在PVCmysql-alpha-pvc中显式指定storageClassName: slow后,刚好和已存在的PValpha-pv的storageClassName取值、1Gi容量、RWO访问模式全部匹配,因此直接完成了静态绑定,和slow对应的StorageClass资源是否存在没有关系。
相关截图参考:

内容的提问来源于stack exchange,提问作者Mayur Kadam
相关产品推荐
相关产品推荐

