笔记摘自视频章节:第七章 存储 pv/pvc
主题
pv/pvc概念,参考 持久卷 | Kubernetes
笔记
存储的管理是一个与计算实例的管理完全不同的问题。PersistentVolume 子系统为用户 和管理员提供了一组 API,将存储如何供应的细节从其如何被使用中抽象出来。 为了实现这点,我们引入了两个新的 API 资源:PersistentVolume(PV) 和 PersistentVolumeClaim(PVC)。
- 持久卷(PersistentVolume,PV)是集群中的一块存储。 持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样,也是使用 卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。
- 持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与 Pod 类似。 Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。
PV 卷是集群中的资源。PVC 申领是对这些资源的请求,也被用来执行对资源的申领检查。 PV 卷和 PVC 申领之间的互动遵循如下生命周期:
-
供应:PV 卷的供应有两种方式:静态供应或动态供应。
-
静态供应
-
动态供应:动态调整, 目前很难用
-
绑定: PV与PVC之间是 1:1 的关系, 主控节点中的控制回路监测新的 PVC 对象,寻找与之匹配的 PV 卷(如果可能的话), 并将二者绑定到一起。
-
使用:Pod 将 PVC 申领当做存储卷来使用。集群会检视 PVC 申领,找到所绑定的卷,并 为 Pod 挂载该卷。对于支持多种访问模式的卷,用户要在 Pod 中以卷的形式使用申领 时指定期望的访问模式。
-
保护使用中的存储对象:当使用某 PVC 的 Pod 对象仍然存在时,认为该 PVC 仍被此 Pod 使用。这一功能特性的目的 是确保仍被 Pod 使用的 PersistentVolumeClaim(PVC)对象及其所绑定的 PersistentVolume(PV)对象在系统中不会被删除,因为这样做可能会引起数据丢失。
-
资源清单:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: 172.17.0.2
- 讲解
- storage: 存储大小5Gb
- volume: Filesystem
- accessMode: 访问模式
- ReadWriteOnce: 卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式也允许运行在同一节点上的多个 Pod 访问卷。
- storageClassName: pvc指定存储类,只有类相同的才能被匹配到。如果为空,则匹配该值为空的PV
访问模式
- ReadWriteOnce: 卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式也允许运行在同一节点上的多个 Pod 访问卷。
- ReadOnlyMany: 卷可以被多个节点以只读方式挂载。
- ReadWriteMany: 卷可以被多个节点以读写方式挂载。
回收策略
目前的回收策略有:
- Retain -- 手动回收
- Recycle -- 基本擦除 (rm -rf /thevolume/*),
- Delete -- 诸如 AWS EBS、GCE PD、Azure Disk 或 OpenStack Cinder 卷这类关联存储资产也被删除
很多策略是否支持要是要看具体的存储方案是否支持。
阶段
每个卷会处于以下阶段(Phase)之一:
- Available(可用)-- 卷是一个空闲资源,尚未绑定到任何申领;
- Bound(已绑定)-- 该卷已经绑定到某申领;
- Released(已释放)-- 所绑定的申领已被删除,但是资源尚未被集群回收;
- Failed(失败)-- 卷的自动回收操作失败。 命令行接口能够显示绑定到某 PV 卷的 PVC 对象。