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

k8s存储介绍(五)PV与PVC

在 Kubernetes(k8s)中,持久化存储(Persistent Storage)是一个非常重要的概念,因为 Pod 本身是无状态的,重启后会丢失数据。为了支持有状态应用,Kubernetes 提供了持久化存储的机制,主要包括 PV(Persistent Volume,持久卷)和 PVC(Persistent Volume Claim,持久卷声明)。

1. 什么是 PV 和 PVC?

PV(Persistent Volume,持久卷) Persistent Volume(PV)是由管理员创建的存储资源,它代表了集群中的实际存储,可以是本地存储、NFS、云存储(如 AWS EBS、Google Persistent Disk)等。PV 是集群级别的资源,不属于特定的命名空间。

PVC(Persistent Volume Claim,持久卷声明) Persistent Volume Claim(PVC)是用户(开发者或应用)请求存储资源的方式。PVC 代表了对存储的需求,比如存储大小、访问模式等。Kubernetes 通过 PVC 绑定到合适的 PV,以满足用户的需求。

2. PV 和 PVC 的工作流程

  1. 管理员创建 PV:管理员在集群中定义一个 PV,并指定存储类型、大小、访问模式等。

  2. 用户创建 PVC:应用程序需要存储时,用户创建 PVC,声明所需的存储资源。

  3. Kubernetes 进行绑定:Kubernetes 根据 PVC 的请求寻找合适的 PV,并进行绑定。

  4. Pod 挂载 PVC:Pod 使用 PVC 来挂载存储,应用程序可以像使用本地存储一样访问数据。

3. PV 的定义示例

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: standard
  hostPath:
    path: "/mnt/data"

字段解释

  • capacity:指定存储容量,如 10Gi。

  • accessModes:访问模式,包括:

    • ReadWriteOnce(RWO):单个节点可读写。

    • ReadOnlyMany(ROX):多个节点只读。

    • ReadWriteMany(RWX):多个节点可读写。

  • persistentVolumeReclaimPolicy:回收策略:

    • Retain(保留):PV 释放后数据仍然保留。

    • Recycle(回收):简单删除数据。

    • Delete(删除):PV 释放后删除存储。

  • storageClassName:存储类,允许动态存储。

  • hostPath:表示本地存储路径。

4. PVC 的定义示例

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: example-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: standard

字段解释

  • accessModes:指定访问模式。

  • resources.requests.storage:请求的存储大小。

  • storageClassName:必须与 PV 的存储类匹配。

5. 在 Pod 中使用 PVC

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: app-container
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: storage
  volumes:
    - name: storage
      persistentVolumeClaim:
        claimName: example-pvc

说明

  • volumeMounts:将 PVC 挂载到容器内的 /usr/share/nginx/html 目录。

  • volumes:引用 example-pvc 作为存储。

6. PV 绑定 PVC 的过程

  1. 管理员创建 PV,它可以是静态的或动态分配的。

  2. 用户创建 PVC,请求特定存储大小和访问模式。

  3. Kubernetes 绑定 PVC 到合适的 PV

  4. Pod 挂载 PVC,并可以访问存储数据。

7. 应用场景

  1. 数据库存储:MySQL、PostgreSQL、MongoDB 等数据库需要持久化存储,以防止数据丢失。

  2. 日志存储:应用日志需要持久化存储,以便分析和调试,即使 Pod 重新调度,日志仍然可用。

  3. 文件共享:多个 Pod 共享数据,如 NFS 或云存储,多个应用可同时访问相同数据。

  4. 机器学习:训练数据集通常很大,需要持久化存储,以供模型训练和分析。

  5. CI/CD 持久化:在持续集成/持续部署(CI/CD)流程中,构建缓存或构件存储需要持久化数据。

相关文章:

  • Windows系统中,通过局域网共享文件夹让同一路由器下的其他设备访问文件
  • Kubernetes
  • 【Java/数据结构】优先级队列(PriorityQueue)
  • .git 文件夹
  • ctfshow WEB web7
  • redis配置文件解析
  • oracle密码过期 ORA-28001解决方案: the password has expired
  • Linux学习笔记(应用篇三)
  • Java 大视界 -- 基于 Java 的大数据分布式系统的监控与运维实践(155)
  • RustDesk部署到linux(自建服务器)
  • Win11+VS2022+CGAL5.6配置
  • 自然语言处理NLP-文本预处理
  • nodejs-原型污染链
  • 4.Matplotlib:基础绘图
  • QT自运行程序
  • 在 VMware Workstation 17 中安装的 Ubuntu 虚拟机无法使用桥接模式
  • 【FDTD Solutions仿真入门及应用】
  • 【高项】信息系统项目管理师(十二)项目干系人管理【3分】
  • 《云原生安全攻防》-- K8s容器安全:权限最小化与SecurityContext
  • 洪水灌溉算法 + 总结
  • 大外交|巴西总统卢拉第六次访华签署20项协议,“双方都视对方为机遇”
  • 牛市早报|中方调整对美加征关税措施,五部门约谈外卖平台企业
  • 俄副外长:俄美两国将举行双边谈判
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单
  • 山东省市监局“你点我检”专项抽检:一批次“无抗”鸡蛋农兽药残留超标
  • 为证明我爸是我爸,我将奶奶告上法庭