【云原生篇】数据持久化之PV和PVC
  KRe60ogUm4le 26天前 17 0

在 Kubernetes (K8s) 中,卷(Volume)、持久卷(Persistent Volume,PV)和持久卷声明(Persistent Volume Claim,PVC)是与数据存储和管理相关的重要概念,它们为容器提供了数据持久化和存储资源管理的能力。

Volume

概念

Kubernetes 中的 Volume 是附加到 Pod 中的一个或多个容器的存储区域。Volume 的生命周期与 Pod 绑定,它超出了单个容器的文件系统的限制,允许数据在容器重启后持久化,并且可以在 Pod 的多个容器之间共享。

核心特性
  • 数据持久化:即使容器崩溃,Volume 中的数据也可以保留。
  • 共享数据:Volume 可以被 Pod 中的多个容器挂载和访问。
  • 多种 Volume 类型:Kubernetes 支持多种类型的 Volume,包括 hostPath(将节点上的文件系统挂载到 Pod 中)、configMap、secret、nfs、cloud storage(如 AWS EBS、GCP Persistent Disk 等)等。
使用场景
  • 临时存储容器之间需要共享的数据。
  • 存储日志或检查点数据,以便在容器重启后进行恢复。
  • 挂载配置文件或敏感信息(通过 ConfigMap 或 Secret)。

Persistent Volume (PV)

概念

PV 是集群中预先配置的一段网络存储,它与 Volume 类似,但是具有独立于 Pod 生命周期的持久性。管理员可以提前配置一系列的 PV,或者通过 StorageClass 动态地创建。

核心特性
  • 集群资源:PV 是集群级别的资源,类似于节点,独立于单个 Pod。
  • 生命周期独立:PV 的生命周期独立于任何使用它的 Pod,这意味着删除 Pod 并不会导致 PV 中的数据丢失。
  • 支持多种存储后端:可以是网络存储系统如 NFS、iSCSI 或特定云提供商的存储解决方案。

Persistent Volume Claim (PVC)

概念

PVC 是用户对存储的请求或声明,它类似于 Pod 对计算资源(CPU 和内存)的请求。Pod 通过 PVC 来请求存储资源,而无需了解背后的存储系统的复杂性。

核心特性
  • 抽象化存储:PVC 为 Pod 和存储之间提供了一个抽象层,使得应用无需关心具体的存储细节。
  • 动态存储分配:如果使用了支持动态分配的 StorageClass,当 PVC 被创建时,存储系统可以自动创建相应的 PV 来满足 PVC 的请求。
  • 存储资源请求:可以请求特定大小和访问模式(如 ReadWriteOnce、ReadOnlyMany、ReadWriteMany)的存储。

使用示例

# PersistentVolume 示例
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-example
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: standard
  nfs:
    path: /path/to/nfs
    server: 

# PersistentVolumeClaim 示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-example
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: standard

在这个例子中,PV pv-example 由管理员提前创建,它使用 NFS 作为存储后端。用户通过创建 PVC pvc-example 来请求存储资源,Kubernetes 会自动绑定符合条件的 PV 给这个 PVC,然后 Pod 可以通过引用 PVC 来使用这个存储资源。

通过使用 PV 和 PVC,Kubernetes 提供了灵活且强大的存储资源管理能力,使得应用可以以可移植的方式使用持久化数据。

在 Kubernetes 中,持久卷(Persistent Volume,简称 PV)和持久卷声明(Persistent Volume Claim,简称 PVC)之间的关系非常紧密,它们共同管理和抽象化了存储资源的使用。这种关系可以类比于计算资源中 Pod 和 Node 的关系,其中 PV 类似于 Node(提供资源),而 PVC 类似于 Pod(消耗资源)。以下是 PV 和 PVC 关系的几个关键点:

1. 抽象化和封装

  • PV 是集群中预先配置的或通过动态供给动态创建的一段网络存储空间。它封装了存储的细节,比如存储的实际类型(如 NFS、云存储等)、容量、存取模式等。
  • PVC 是用户对存储的请求或声明,它通过声明所需的存储容量和存取模式(如 ReadWriteOnce、ReadOnlyMany、ReadWriteMany)来请求存储资源,但不需要关心具体的存储实现细节。

2. 资源请求与供给

  • 用户创建 PVC 来请求存储资源,就像在 Pod 定义中请求计算资源(CPU 和内存)一样。PVC 定义了所需的存储容量和访问模式。
  • PV 是满足这些请求的存储资源,当 PVC 被创建时,Kubernetes 的控制平面会寻找一个符合 PVC 请求的 PV 并将其绑定给 PVC。一旦 PV 被 PVC 绑定,它就被该 PVC 独占,直到 PVC 被删除或手动解除绑定。

3. 生命周期管理

  • PV 的生命周期通常由管理员或动态供给系统管理,它独立于任何单个 PVC 的生命周期。PV 可以在没有被任何 PVC 使用时预先创建,等待绑定;也可以在 PVC 创建时动态供给。
  • PVC 的生命周期由用户管理,当 PVC 不再需要时,用户可以删除 PVC。根据 PV 的回收策略,相应的 PV 可以被删除、回收再利用或保持不变。

4. 动态供给

在动态供给的环境中,用户只需创建 PVC,存储系统会自动创建一个满足 PVC 请求的 PV。这大大简化了存储资源的管理,使得用户无需担心存储资源的预配问题。

总结

PV 和 PVC 之间的关系通过提供一个层次化和抽象化的接口来管理存储资源,使得用户可以灵活地请求所需的存储资源,而不必关心底层的存储细节。这种模型提高了 Kubernetes 应用的可移植性和灵活性,允许存储资源按需供给和回收,从而提高资源的利用率和管理效率。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 26天前 0

暂无评论

推荐阅读
  KRe60ogUm4le   2024年04月26日   25   0   0 java算法
  KRe60ogUm4le   2024年05月03日   52   0   0 javascala
KRe60ogUm4le
最新推荐 更多

2024-05-31