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

【k8s】pvc 配置的两种方式volumeClaimTemplates 和 PersistentVolumeClaim

pvc配置实例   

实例1

在Deployment中配置 template:xxxxxxvolumeClaimTemplates:- metadata:name: dataspec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: nfsdev-storageclass (创建好的storageClassName)

实例2

#先创建一个pvc 然后在 Deployment中引用
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nacosserver-pvcnamespace: xxxdev
spec:storageClassName: course-nfs64storageaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi##################################################containers........#创建了卷pvcdata,然后挂载到容器中的某个目录volumeMounts:- name: pvcdatamountPath: /home/nacos/plugins/peer-findersubPath: peer-finder- name: pvcdatamountPath: /home/nacos/datasubPath: data- name: pvcdatamountPath: /home/nacos/logssubPath: logs# 修复点 2: volumes 定义在 Pod 级别(与 containers 同级)volumes:- name: pvcdatapersistentVolumeClaim:claimName: nacosserver-pvc

两种pvc使用的不同

     这两个配置涉及 Kubernetes 中两种不同的 PVC(PersistentVolumeClaim)使用方式,主要区别在于创建方式使用场景


1. volumeClaimTemplates (动态模板方式)

volumeClaimTemplates:       # 用于 StatefulSet 的动态 PVC 模板- metadata:name: data           # 生成的 PVC 名称前缀(如 data-0, data-1)spec:accessModes: [ "ReadWriteMany" ]  # 多节点读写storageClassName: "course-nfs64storag"  # 存储类名称(注意拼写)resources:requests:storage: 20Gi    # 请求 20GB 存储
✅ 特点:
  • 动态创建 PVC
    当 StatefulSet 被部署时,Kubernetes 会自动为每个 Pod 副本生成独立的 PVC(如 data-<pod-name>-0data-<pod-name>-1)。

  • 绑定 StatefulSet 生命周期
    删除 StatefulSet 时,关联的 PVC 默认不会被删除(需手动清理)。

  • 适用场景
    有状态应用(如 MySQL、Redis 集群),每个 Pod 需要独立的持久化存储。


2. 独立 PVC + 手动引用方式

# 先创建独立的 PVC 资源
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nacosserver-pvc      # 固定名称的 PVCnamespace: xxxdev     # 指定命名空间
spec:storageClassName: course-nfs64storage  # 存储类名称accessModes:- ReadWriteOnce         # 单节点读写resources:requests:storage: 1Gi          # 请求 1GB 存储
---
# 在 Pod/Deployment 中引用已存在的 PVC
volumes:- name: pvcdatapersistentVolumeClaim:claimName: nacosserver-pvc  # 直接引用 PVC 名称
✅ 特点:
  • 静态创建 PVC
    手动提前创建 PVC 资源(通过 kubectl apply)。

  • 跨 Pod 共享存储
    多个 Pod 可通过 claimName 引用同一个 PVC(需访问模式支持,如 ReadWriteMany)。

  • 独立生命周期
    PVC 与 Pod 解耦,删除 Pod 不会删除 PVC。

  • 适用场景
    通用存储需求(如单实例应用、共享存储目录)。


🔍 关键区别总结:

特性volumeClaimTemplates (StatefulSet)独立 PVC + claimName
PVC 创建方式动态生成(按 Pod 副本数自动创建)手动预先创建
PVC 命名规则自动生成(如 data-0data-1固定名称(如 nacosserver-pvc
存储隔离性每个 Pod 有独立 PVC多个 Pod 可共享同一 PVC
访问模式示例中为 ReadWriteMany(多节点读写)示例中为 ReadWriteOnce(单节点读写)
适用控制器专用于 StatefulSet适用于 Pod/Deployment/StatefulSet
生命周期管理随 StatefulSet 创建/删除(PVC 需手动删)独立管理

❗ 注意事项:

  1. 访问模式冲突
    示例中 volumeClaimTemplates 使用 ReadWriteMany,而独立 PVC 使用 ReadWriteOnce
    若多个 Pod 同时挂载独立 PVC,必须使用 ReadWriteMany,否则会出现挂载错误

  2. 存储类名称拼写
    volumeClaimTemplates 中为 course-nfs64storag(少字母 e),独立 PVC 中为 course-nfs64storage
    需确保名称一致,否则可能因存储类不存在导致 PVC 挂起。

  3. 存储大小差异
    动态模板申请 20Gi,独立 PVC 申请 1Gi,根据实际需求调整。


💡 选择建议:

  • 需要 为每个 Pod 提供独立存储(如数据库集群)→ volumeClaimTemplates + StatefulSet

  • 需要 共享存储卷(如配置文件目录)→ 独立 PVC + claimName
    (确保存储类支持 ReadWriteMany,如 NFS)

http://www.dtcms.com/a/327298.html

相关文章:

  • 计算机网络1-8:第一章 概述 习题课
  • UserController类讲解
  • Git 撤回已推送到远程的最近push
  • Linux 服务器,安装mqtt服务
  • AuthController类讲解
  • 思科、华为、华三如何切换三层端口?
  • 前端面试题汇总--Vue2篇
  • 网络安全:如何保障社交媒体账户的安全?
  • 导入文件到iPhone实现
  • Python打卡Day40 训练和测试的规范写法
  • iOS 编译 cpp 代码生成 .a 库备忘
  • 【测试】Bug+设计测试用例
  • 华为发布AI推理新技术,降低对HBM内存依赖
  • C语言—数组和指针练习题合集(二)
  • 终端安全检测和防御技术总结
  • 2025年Java后端秋招面试宝典:高频题库+场景解析
  • wordpress从wp_nav_menu中获取菜单项
  • 聆思duomotai_ap sdk适配dooiRobot
  • 【PyTorch学习笔记 - 03】 Transforms
  • 算法打卡力扣第88题:合并两个有序数组(easy)
  • Java的异常机制
  • 【牛客刷题】REAL806 放它一马:怪物经验值最大化策略详解
  • 云原生应用的DevOps3(CI/CD十大安全风险、渗透场景)
  • UE5多人MOBA+GAS 42、提高头像画质
  • C++——高性能组件
  • AI大模型基础:BERT、GPT、Vision Transformer(ViT)的原理、实现与应用
  • 【2】Transformers快速入门:统计语言模型是啥?
  • Agent智能体基础
  • 「日拱一码」057 逆向强化学习(IRL)
  • 从0开始的中后台管理系统-5(菜单的路径绑定以及角色页面的实现)