Kubernetes 中的 Persistent Volume(PV)是什么?

在 Kubernetes 中,PersistentVolume(PV)是一种存储资源,用于提供持久化存储以供 Pod 使用。它是集群中预先配置的一段网络存储,Pod 可以挂载使用。

PV 的主要特征是:

  • 提供持久化存储:PV 中的数据在 Pod删除后仍然保留。
  • 静态资源:PV 需要预先创建,由管理员手动配置或动态供应。
  • 支持多种类型:支持多种云存储、私有云存储以及本地存储类型。
  • 生命周期独立:PV 的生命周期独立于使用它的 Pod。
  • 回收策略:可以配置删除PV时是保留数据、删除数据还是手动清理数据。

PV 支持以下几种类型:

  • 公有云块存储:AWSElasticBlockStore、AzureFile、AzureDisk 等。
  • 私有云存储:OpenStack Cinder等。
  • 本地存储:主机目录、本地 SSD/HDD 等。
  • NFS:通过 NFS 共享存储。
  • GlusterFS/CephFS:通过 Gluster/Ceph 共享存储。
  • 容器存储:容器存储接口(CSI)的存储系统。

PV 的工作流程是:

  1. 集群管理员创建一系列 PV,指定类型、容量和访问模式。
  2. 用户创建 PVC(PersistentVolumeClaim),请求特定大小和访问模式的存储。
  3. Kubernetes 系统根据 PVC 的请求匹配可用的 PV,将其绑定(Bound)到 PVC。
  4. 用户在 Pod 中声明使用 PVC 来挂载存储卷。
  5. Pod 使用 PVC 挂载的 PV,完成对存储的读写操作。
  6. PV 和 PVC 解除绑定后,PV 根据回收策略执行数据清理工作。

例如,一个 NFS 类型的 PV 定义如下:

yaml
apiVersion: v1
kind: PersistentVolume  
metadata: 
  name: nfs-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:       
    server: 10.0.0.1
    path: "/"

它的工作流程是:

  1. 管理员创建 NFS 类型 PV,挂载到 10.0.0.1 的 / 目录,容量为 1Gi。
  2. 用户创建 1Gi 容量的 PVC。
  3. Kubernetes 将该 PVC 绑定到 nfs-pv PV。
  4. 用户在 Pod 中使用该 PVC 挂载存储卷。
  5. Pod 可以读写 nfs-pv PV 挂载的 NFS 存储。
  6. PVC 解除与 nfs-pv PV 绑定后,nfs-pv 根据回收策略执行数据清理。

所以总结来说,PV 的主要作用是提供持久化存储供 PVC 和 Pod 使用,其主要特征是:

  1. 预配置的网络存储,静态资源。
  2. 提供持久化的存储能力,数据生命周期独立于 Pod。
  3. 支持多种存储类型,如公有云、私有云和本地存储。
  4. 具有存储容量和访问模式等属性。
  5. 回收策略决定了删除 PV 时数据的清理方式。

它的工作流程是:

  1. 管理员创建 PV,指定存储类型、容量和访问模式。
  2. 用户创建 PVC 请求特定的存储。
  3. Kubernetes 匹配 PVC 和 PV,将其绑定。
  4. Pod 使用 PVC 挂载 PV。
  5. Pod 可以读写 PV 提供的存储。
  6. PV 和 PVC 解除绑定,PV 根据策略清理数据。