当前位置: 首页 > news >正文

【Kubernetes】Kubernetes 如何管理存储?PV 和 PVC 是如何工作的?

在 Kubernetes 中,存储管理是通过 Persistent Volume (PV)Persistent Volume Claim (PVC) 来实现的。

  • 它们为容器化应用提供持久化存储,使得应用在重启或重新调度时仍然能够访问数据。

1. 存储管理概述

Kubernetes 的存储管理是基于 持久化卷 (Persistent Volume)持久化卷声明 (Persistent Volume Claim) 的模型。这个模型将存储的生命周期与 Pod 的生命周期分开,允许存储资源在 Pod 之间共享和复用。

  • Persistent Volume (PV):代表集群中的存储资源。它是由集群管理员预先配置的存储资源。PV 可以是本地磁盘、NFS、iSCSI、云存储(如 AWS EBS、Google Cloud Persistent Disk 等)等多种类型。

  • Persistent Volume Claim (PVC):是用户对存储的请求,声明了需要多少存储空间、访问模式等。Pod 使用 PVC 来请求存储资源,Kubernetes 会根据 PVC 的要求动态地绑定到合适的 PV 上。

  • StorageClass:在某些存储后端(如云提供商的块存储)中,可以使用 StorageClass 来动态创建 PV。当 PVC 被创建时,如果没有指定具体的 PV,Kubernetes 会根据 PVC 的要求和 StorageClass 动态地为 PVC 创建合适的 PV。

2. PV 和 PVC 的工作原理

1. Persistent Volume (PV)

PV 是集群中的存储资源。集群管理员预先配置和创建 PV,通常在 YAML 配置文件中定义。PV 的配置包含以下信息:

  • 存储的容量
  • 存储类型(如 NFS、iSCSI、云块存储)
  • 访问模式(ReadWriteOnce、ReadOnlyMany、ReadWriteMany)
  • 绑定方式(静态绑定或动态绑定)

例如,创建一个 NFS 类型的 PV:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs-storage
  nfs:
    path: /mnt/data
    server: nfs-server.example.com
  • capacity:定义了 PV 的存储容量(如 5Gi)。
  • accessModes:定义了 PV 的访问模式,通常有:
    • ReadWriteOnce (RWO):只能由一个节点以读写方式挂载。
    • ReadOnlyMany (ROX):可以由多个节点以只读方式挂载。
    • ReadWriteMany (RWX):可以由多个节点以读写方式挂载。
  • persistentVolumeReclaimPolicy:定义 PV 被释放后如何处理,常见的选项有:
    • Retain:保留 PV,等待管理员手动处理。
    • Recycle:回收 PV。
    • Delete:删除 PV。
  • nfs:定义了 NFS 类型的存储服务器和路径。
2. Persistent Volume Claim (PVC)

PVC 是用户对存储的请求,指定了所需的存储容量、访问模式等。PVC 是 Pod 中存储卷的需求,Kubernetes 根据 PVC 的请求动态绑定到合适的 PV。

例如,创建一个 PVC 请求 5Gi 的存储空间:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: nfs-storage
  • accessModes:指定存储卷的访问模式,必须与 PV 的访问模式兼容。
  • resources.requests.storage:指定 PVC 请求的存储容量。
  • storageClassName:指定存储类,如果没有明确指定,Kubernetes 将使用默认的存储类(如果有的话)。
3. PVC 与 PV 的绑定

当 PVC 被创建时,Kubernetes 会尝试找到一个满足以下条件的 PV:

  • 存储容量足够。
  • 存储类型与 PVC 请求的类型匹配。
  • 访问模式与 PVC 请求的访问模式匹配。

如果满足条件,Kubernetes 会将 PVC 与 PV 进行绑定。这个绑定是 动态的,并且一旦绑定,PVC 就会引用该 PV,直到 PVC 被删除或释放。

4. StorageClass 和动态卷供应

如果没有预先配置 PV,Kubernetes 可以使用 StorageClass 来动态创建 PV。StorageClass 定义了存储提供商和存储类型的信息。通过定义不同的 StorageClass,用户可以请求不同类型的存储(如云存储或本地存储)。

例如,创建一个 StorageClass 来使用 AWS EBS 存储:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2

当 PVC 被创建时,如果指定了 StorageClass,Kubernetes 会根据该 StorageClass 动态创建 PV,并将 PVC 绑定到该 PV 上。

5. Pod 使用 PVC

一旦 PVC 被绑定到 PV,Pod 就可以使用 PVC 来访问存储。Pod 使用 PVC 作为存储卷的引用,通过在 spec.volumes 中挂载 PVC:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-image
      volumeMounts:
        - mountPath: /data
          name: my-storage
  volumes:
    - name: my-storage
      persistentVolumeClaim:
        claimName: my-pvc

在这个示例中,Pod 使用 my-pvc PVC 来挂载存储卷,容器可以通过 /data 路径访问存储。

3. PV 和 PVC 的生命周期

  • PV 生命周期:PV 是由管理员预先创建的,可以通过静态或动态方式绑定到 PVC。一旦 PVC 被删除,PV 会进入释放状态(根据 PV 的 persistentVolumeReclaimPolicy 决定是否删除或保留)。
  • PVC 生命周期:PVC 是由用户创建的,它表示存储的需求。PVC 的生命周期由 Pod 的生命周期决定,Pod 删除时,PVC 也会被删除(除非手动删除 PVC)。

4. 总结

  • Persistent Volume (PV) 是 Kubernetes 集群中的存储资源,它可以是多种类型的存储后端(如 NFS、云存储等)。
  • Persistent Volume Claim (PVC) 是用户请求存储的资源,Kubernetes 会根据 PVC 来绑定适当的 PV。
  • StorageClass 可以用于动态创建 PV,允许用户根据不同的存储需求动态请求存储。
  • 通过 PV 和 PVC,Kubernetes 提供了一种灵活且持久的存储方式,使得容器化应用在重启或重新调度时能够持续访问数据。

https://github.com/0voice

相关文章:

  • C++——清明
  • QScrollArea 内部滚动条 QSS 样式失效问题及解决方案
  • JavaScript逆向WebSocket协议解析与动态数据抓取
  • 【CMake】《CMake构建实战:项目开发卷》笔记-Chapter11-实践:基于onnxruntime的手写数字识别库
  • LENOVO联想ThinkBook 16 G6 ABP(21KK)恢复预装OEM原厂Win11系统镜像
  • 每日c/c++题 备战蓝桥杯(小球反弹)[镜像思路求解,最小公倍数]
  • 为什么 LoRA 梯度是建立在全量参数 W 的梯度之上
  • 面向对象编程(OOP)概述
  • 低延迟云网络的核心技术
  • OpenCV轮廓检测全面解析:从基础到高级应用
  • docker的run命令 笔记250406
  • 《深度学习入门:基于Python的理论与实现》第二章感知机
  • 基于OPENCV的图像透视矫正
  • MySQL-SQL-DDL语句、表结构创建语句语法、表约束、表数据类型,表结构-查询SQL、修改SQL、删除SQL
  • 文件映射mmap与管道文件
  • 每日c/c++题 备战蓝桥杯([蓝桥杯 2023 省 B] 冶炼金属)
  • 大模型推理--Qwen2.5-Omni在A100上的初体验
  • ubantu操作笔记
  • 整数编码 - 华为OD统一考试(A卷、JavaScript)
  • 李臻20242817_安全文件传输系统项目报告_第6周
  • 微信网站如何做/口碑好网络营销电话
  • 校园网站设计毕业论文1000字/seo搜索引擎优化费用
  • 文成做网站/网站关键词优化系统
  • 企业推广策划公司/seo网站推广助理招聘
  • 男人女人做羞羞事网站/网络营销师怎么考
  • 网站遮罩是什么/软文发布平台排名