K8s中的pv&&pvc

由于部分图片显示问题,附上有道云笔记的链接:http://note.youdao.com/noteshare?id=76d0d00ddfbb2bcf52e088e048f17543&sub=F0D96251095F4FACAA0F5C699DC46606

K8S中的pv&&pvc

参考:https://www.cnblogs.com/benjamin77/p/9944268.html

1.pv

PersistentVolume (PV) 是外部存储系统中的一块存储空间,由管理员创建和维护。与 Volume 一样,PV 具有持久性,生命周期独立于 Pod。

2.pvc

  • PersistentVolumeClaim (PVC) 是对 PV 的申请 (Claim)。PVC 通常由普通用户创建和维护。需要为 Pod 分配存储资源时,用户可以创建一个 PVC,指明存储资源的容量大小和访问模式(比如只读)等信息,Kubernetes 会查找并提供满足条件的 PV。

  • 有了 PersistentVolumeClaim,用户只需要告诉 Kubernetes 需要什么样的存储资源,而不必关心真正的空间从哪里分配,如何访问等底层细节信息。这些 Storage Provider 的底层信息交给管理员来处理,只有管理员才应该关心创建 PersistentVolume 的细节信息。

3.pv&pvc&pod

3.1 创建pv

  • 1.capacity 指定 PV 的容量为 1G。
  • 2.accessModes 指定访问模式为 ReadWriteOnce,支持的访问模式有:
    • ReadWriteOnce – PV 能以 read-write 模式 mount 到单个节点。
    • ReadOnlyMany – PV 能以 read-only 模式 mount 到多个节点。
    • ReadWriteMany – PV 能以 read-write 模式 mount 到多个节点。
  • 3.persistentVolumeReclaimPolicy 指定当 PV 的回收策略为 Recycle,支持的策略有:
    • Retain – 需要管理员手工回收。
    • Recycle – 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/*。
    • Delete – 删除 Storage Provider 上的对应存储资源,例如 AWS EBS、GCE PD、Azure Disk、OpenStack Cinder Volume 等。
  • 4.storageClassName 指定 PV 的 class 为 nfs。相当于为 PV 设置了一个分类,PVC 可以指定 class 申请相应 class 的 PV。
  • 5.path指定 PV 在 NFS 服务器上对应的目录。

3.2 创建pvc

PVC 就很简单了,只需要指定 PV 的容量,访问模式和 class。

创建pod


与使用普通 Volume 的格式类似,在 volumes 中通过 persistentVolumeClaim 指定使用 mypvc1 申请的 Volume。

3.3 pv的回收

pv的回收,主要通过删除pvc来实现,未删除pvc之前,pv的状态时bound,删除pvc之后,pv的状态为available

4. pv的动态供给

前面的例子中,我们提前创建了 PV,然后通过 PVC 申请 PV 并在 Pod 中使用,这种方式叫做静态供给(Static Provision)。

与之对应的是动态供给(Dynamical Provision),即如果没有满足 PVC 条件的 PV,会动态创建 PV。相比静态供给,动态供给有明显的优势:不需要提前创建 PV,减少了管理员的工作量,效率高。

动态供给是通过 StorageClass 实现的,StorageClass 定义了如何创建 PV,下面是两个例子。

StorageClass standard:

StorageClass slow:

这两个 StorageClass 都会动态创建 AWS EBS,不同在于 standard 创建的是 gp2 类型的 EBS,而 slow 创建的是 io1 类型的 EBS。不同类型的 EBS 支持的参数可参考 AWS 官方文档。

StorageClass 支持 Delete 和 Retain 两种 reclaimPolicy,默认是 Delete。

与之前一样,PVC 在申请 PV 时,只需要指定 StorageClass 和容量以及访问模式,比如:

除了 AWS EBS,Kubernetes 支持其他多种动态供给 PV 的 Provisioner,完整列表请参考 https://kubernetes.io/docs/concepts/storage/storage-classes/#provisioner

原文地址:https://www.cnblogs.com/zhangjxblog/p/12167681.html