概述
PVC 作为用户对存储资源的需求申请,主要包括存储空间请求、访问模式、PV选择条件和存储类别等信息的设置。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: slow
selector:
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}
属性解析:
- 申请
8GiB存储空间 - 访问模式
ReadWriteOnce PV选择条件为包含标签 “release: "stable"”,并且包含条件为“environment In [dev]”标签- 存储类别为“slow”
PVC相关配置
- 资源请求:描述对存储资源的请求,目前只支持
requests.storage的设置, 存储空间设置。 - 访问模式:用于描述用户应用对存储资源的访问权限。与PV设置相同。
- 存储卷模式:包括文件系统和块设备
PV选择条件:通过Label Selector设置,可以使用PVC对于系统中已经存在的PV做筛选,可使用matchLabels和matchExpressions进行设置,如果两个都设置,取交集。- 存储类别:
PVC在定义时可以设定需要的后端存储的类别,storageClassName字段定义。只有设置了class的PV才能被系统选出并绑定。- 未启用:等效于
PVC设置storageClassName的值为空,只能选择未设定class的PV与之配合绑定 - 启用:要求集群管理员已定义默认的
StorageClass,如果系统中不存在默认的,则等效于不启用。
- 未启用:等效于
注意:PVC 受限于Namespace。Pod在引用PVC时同样受Namespace的限制,只有相同Namespace中的PVC才能挂载到Pod内。
当Selector和Class都进行了设置,那么系统将选择两个条件同时满足的PV与之匹配。
如果资源供应使用的是动态模式,没有预先定义PV,仅通过StorageClass交给系统自动完成PV的动态创建,那么PVC再设定Selector时,系统将无法为其供应任何存储资源。
在启用动态供应模式的情况下,一旦用户删除了PVC,与之绑定的PV也将根据其默认的回收策略“Delete”被删除。如果需要保留PV,则在动态绑定成功后,用户需要将系统自动生成PV的回收策略从“Delete”改成“Retain”
结语
Kubernetes Persistent Volume Claim (PVC) 是 Kubernetes 对象模型中的一个核心概念,它在管理应用的存储资源方面发挥着关键作用。下面是对 PVC 的意义和功能的总结:
- 存储抽象化:
PVC实现了存储资源的抽象化,允许用户以声明式的方式请求存储,而无需关注底层存储的具体实现(如云存储、本地磁盘等)。这种方式提高了应用部署的可移植性和灵活性。 - 动态供给:
Kubernetes支持基于PVC的动态存储分配。当用户创建一个PVC时,如果配置得当,Kubernetes存储插件会自动匹配合适的Persistent Volume(PV)或在云提供商处创建新的存储资源来满足需求。这样,开发者无需预先手动配置存储卷。 - 资源申请与绑定:
PVC代表了用户对存储资源的需求说明,包括存储大小、访问模式(读写、只读)等。Kubernetes会负责将PVC与合适的PV绑定,确保应用能够获得符合需求的存储资源。 - 生命周期管理:
PVC的生命周期与Pod分离,这意味着即使Pod被重启或重新调度,与之关联的PVC仍然存在,数据得以保留。这为有状态应用提供了持久化的数据存储解决方案。 - 资源复用与扩容:
PVC允许在多个Pod之间共享存储资源(通过ReadWriteMany访问模式),并可以在不中断服务的情况下进行存储资源的扩容操作,提高了资源利用率和系统的弹性。 - 简化存储管理:对于运维团队而言,通过
PVC管理存储资源可以极大地简化流程,自动化存储分配、绑定和回收过程,降低了人为错误,提升了运维效率。
总之,Kubernetes Persistent Volume Claim 是实现应用存储资源自动化管理、提高存储灵活性和应用可移植性的重要机制。它作为 Kubernetes 存储架构的关键组件,使得在容器化环境中管理和使用存储变得更加高效和便捷。