在 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 的工作流程是:
- 集群管理员创建一系列 PV,指定类型、容量和访问模式。
- 用户创建 PVC(PersistentVolumeClaim),请求特定大小和访问模式的存储。
- Kubernetes 系统根据 PVC 的请求匹配可用的 PV,将其绑定(Bound)到 PVC。
- 用户在 Pod 中声明使用 PVC 来挂载存储卷。
- Pod 使用 PVC 挂载的 PV,完成对存储的读写操作。
- 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: "/"
它的工作流程是:
- 管理员创建 NFS 类型 PV,挂载到 10.0.0.1 的 / 目录,容量为 1Gi。
- 用户创建 1Gi 容量的 PVC。
- Kubernetes 将该 PVC 绑定到 nfs-pv PV。
- 用户在 Pod 中使用该 PVC 挂载存储卷。
- Pod 可以读写 nfs-pv PV 挂载的 NFS 存储。
- PVC 解除与 nfs-pv PV 绑定后,nfs-pv 根据回收策略执行数据清理。
所以总结来说,PV 的主要作用是提供持久化存储供 PVC 和 Pod 使用,其主要特征是:
- 预配置的网络存储,静态资源。
- 提供持久化的存储能力,数据生命周期独立于 Pod。
- 支持多种存储类型,如公有云、私有云和本地存储。
- 具有存储容量和访问模式等属性。
- 回收策略决定了删除 PV 时数据的清理方式。
它的工作流程是:
- 管理员创建 PV,指定存储类型、容量和访问模式。
- 用户创建 PVC 请求特定的存储。
- Kubernetes 匹配 PVC 和 PV,将其绑定。
- Pod 使用 PVC 挂载 PV。
- Pod 可以读写 PV 提供的存储。
- PV 和 PVC 解除绑定,PV 根据策略清理数据。