Kubernetes PV和PVC的声明及区别
一、PV(Persistent Volume)的声明
PV(Persistent Volume)是Kubernetes中由管理员配置的一段存储,是集群中的资源,就像节点是集群资源一样。PV是对底层网络存储的抽象,将存储定义为一种“资源”。其声明通常涉及以下步骤和属性:
-
定义PV对象:通过YAML或JSON文件定义PV,包括存储大小、访问模式(如ReadWriteOnce、ReadOnlyMany、ReadWriteMany等)、回收策略(Retain、Delete、Recycle,但Recycle已被弃用)、存储类型(如NFS、AWS EBS等)等。
-
创建PV:使用
kubectl apply -f <pv-definition-file>.yaml
命令将定义的PV创建到Kubernetes集群中。 -
示例:
apiVersion: v1 kind: PersistentVolume metadata: name: pv001 spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: slow nfs: path: /tmp server: 172.17.0.2
二、PVC(Persistent Volume Claim)的声明
PVC(Persistent Volume Claim)是用户对存储的请求,类似于Pod消耗节点资源,PVC则消耗PV资源。其声明通常涉及以下步骤和属性:
-
定义PVC对象:通过YAML或JSON文件定义PVC,包括存储请求大小、访问模式、存储类名称等。
-
创建PVC:使用
kubectl apply -f <pvc-definition-file>.yaml
命令将定义的PVC创建到Kubernetes集群中。 -
绑定PV:当PVC被创建后,Kubernetes会根据PVC的请求在已有的PV中选择一个满足条件的进行绑定。
-
示例:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-demo-1 spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: slow
三、PV和PVC的区别
-
使用者不同:
- PV:由Kubernetes集群管理员创建和管理,他们关注如何提供存储资源,而不需关心这些资源如何被使用。
- PVC:由Kubernetes集群的用户创建,他们通过PVC声明所需的存储资源,而不需要关注这些资源是如何被实现的。
-
所承担的任务不同:
- PV:作为资源的生产者,负责生成存储资源并提供给PVC使用。
- PVC:作为资源的消费者,向PV申请存储资源的大小及访问模式等。
-
生命周期不同:
- PV:从创建(Provisioning)到绑定(Binding)到使用(Using)再到释放(Releasing)和回收(Recycling),具有完整的生命周期。
- PVC:主要关注从声明到绑定PV的过程,并在Pod中使用这个PVC。
-
角色和目的:
- PV:提供存储资源,是存储的提供者。
- PVC:是对存储资源的请求和绑定,是Pod能够定义使用的一种存储卷类型。
通过上述对比,可以看出PV和PVC在Kubernetes存储管理中扮演着不同的角色,共同协作实现集群的持久化存储需求。