在 Kubernetes 中,持久卷(Persistent Volume,PV)是一种用于持久化存储的资源,与 Pod 的生命周期无关。PV 是由集群管理员配置的,可以被多个 Pod 使用,并且可以在 Pod 之间保留数据。

以下是有关 Kubernetes 持久卷的一些关键概念:

1. Persistent Volume(PV)的定义:
   - PV 是集群中的存储资源,它具有容量、访问模式(ReadWriteOnce、ReadOnlyMany、ReadWriteMany)、存储类(StorageClass)、状态(Available、Bound、Released 等)等属性。
   apiVersion: v1
   kind: PersistentVolume
   metadata:
     name: mypv
   spec:
     capacity:
       storage: 1Gi
     accessModes:
       - ReadWriteOnce
     hostPath:
       path: /path/on/host

   上述例子定义了一个基于主机路径的持久卷(HostPath PV),具有1Gi的存储容量和ReadWriteOnce的访问模式。

2. Persistent Volume Claim(PVC):
   - Persistent Volume Claim 是 Pod 对 PV 的请求,Pod 通过 PVC 来声明对存储资源的需求。PVC 匹配 PV 的属性,例如容量和访问模式。
   apiVersion: v1
   kind: PersistentVolumeClaim
   metadata:
     name: mypvc
   spec:
     accessModes:
       - ReadWriteOnce
     resources:
       requests:
         storage: 1Gi

   上述例子定义了一个请求1Gi存储容量和ReadWriteOnce访问模式的 Persistent Volume Claim。

3. Storage Class(存储类):
   - 存储类是用于动态创建 PV 的对象。它允许集群管理员定义存储卷的类型、提供商和其他参数。
   apiVersion: storage.k8s.io/v1
   kind: StorageClass
   metadata:
     name: fast
   provisioner: kubernetes.io/fast

   存储类在 PVC 中指定,而不是在 PV 中指定,使得存储卷的动态分配更加灵活。

4. 使用 PV 和 PVC 的 Pod:
   - Pod 可以通过 Volume 指定要使用的 PV 或 PVC。
   apiVersion: v1
   kind: Pod
   metadata:
     name: mypod
   spec:
     containers:
     - name: mycontainer
       image: nginx
       volumeMounts:
       - name: myvolume
         mountPath: /data
     volumes:
     - name: myvolume
       persistentVolumeClaim:
         claimName: mypvc

   上述例子中,Pod 使用名为 mypvc 的 Persistent Volume Claim,并将其挂载到容器中的 /data 目录。

5. Reclaim Policy(回收策略):
   - PV 具有回收策略,定义了在 PV 释放时要执行的操作。有三种回收策略:Retain(保留 PV),Delete(删除 PV)和Recycle(回收 PV,仅适用于 NFS、HostPath 等)。
   apiVersion: v1
   kind: PersistentVolume
   metadata:
     name: mypv
   spec:
     capacity:
       storage: 1Gi
     accessModes:
       - ReadWriteOnce
     hostPath:
       path: /path/on/host
     persistentVolumeReclaimPolicy: Retain

   上述例子中,persistentVolumeReclaimPolicy 设置为 Retain,表示在释放 PV 后不会删除 PV。

持久卷是 Kubernetes 中用于解决数据持久化需求的一种重要机制。通过 PV 和 PVC 的结合使用,可以实现数据的动态分配、共享和保留。存储类的引入进一步增加了存储资源的灵活性,允许集群管理员根据实际需求进行存储资源的动态管理。


转载请注明出处:http://www.pingtaimeng.com/article/detail/9741/Kubernetes