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

Kustomize实战:PV/PVC多环境管理

Kustomize 管理 PV/PVC 实战:标准化、多环境复用

Kustomize 是 Kubernetes 原生的配置管理工具,核心优势是无需模板语法,通过 “基础配置 + 覆盖补丁” 实现多环境复用,尤其适合管理 PV、PVC 这类需要在开发 / 测试 / 生产环境中差异化配置的资源。本文结合 PV/PVC 的使用场景,讲解 Kustomize 的核心用法、目录结构设计和实战案例。

一、核心概念(Kustomize 基础)

在管理 PV/PVC 前,先明确 Kustomize 的 3 个核心概念,适配存储资源的多环境需求:

概念作用适配 PV/PVC 场景
基础目录(base)存放所有环境共用的 “基准配置”(如 PVC 名称、基础访问模式)定义 PV/PVC 的通用字段(如 accessModes: ReadWriteMany、PVC 名称前缀)
覆盖目录(overlay)存放特定环境的 “差异化配置”(如容量、存储类、后端地址)开发环境用小容量(5Gi)、测试 / 生产用大容量(20Gi);生产环境用 Ceph 存储类,开发用 NFS
kustomization.yaml核心配置文件,声明资源、补丁、变量等聚合 PV/PVC/Pod 资源,指定环境差异化补丁(如替换存储容量、存储类名称)

二、目录结构设计(推荐最佳实践)

针对 PV/PVC 的多环境管理,建议采用「基础目录 + 多覆盖目录」的结构,清晰区分通用配置和环境差异:

storage/
├── base/                  # 基础配置(所有环境共用)
│   ├── pvc-base.yaml      # PVC 基础配置(通用访问模式、名称)
│   ├── pod-base.yaml      # Pod 基础配置(通用挂载路径、容器镜像)
│   └── kustomization.yaml # 聚合基础资源
└── overlays/              # 环境覆盖配置(差异化部分)├── dev/               # 开发环境│   ├── patch-pvc.yaml # PVC 差异化(容量5Gi、NFS存储类)│   └── kustomization.yaml├── test/              # 测试环境│   ├── patch-pvc.yaml # PVC 差异化(容量10Gi、NFS存储类)│   └── kustomization.yaml└── prod/              # 生产环境├── pv-prod.yaml   # 生产环境专属 PV(Ceph后端,管理员手动创建)├── patch-pvc.yaml # PVC 差异化(容量20Gi、Ceph存储类)└── kustomization.yaml

三、实战:用 Kustomize 管理多环境 PV/PVC

步骤 1:编写基础配置(base 目录)

基础目录存放所有环境共用的配置,避免重复编写。

1.1 基础 PVC 配置(pvc-base.yaml)

定义通用字段(访问模式、PVC 名称前缀),差异化字段(容量、存储类)留到 overlay 中覆盖:

# base/pvc-base.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: app-storage-pvc  # 所有环境共用的 PVC 名称
spec:accessModes:- ReadWriteMany  # 通用访问模式(多节点读写)# 容量、storageClassName 留到 overlay 中定义(环境差异化)resources:requests:storage: 5Gi  # 基础容量(可被覆盖)
1.2 基础 Pod 配置(pod-base.yaml)

定义 Pod 与 PVC 的绑定关系(通用挂载路径、容器镜像):

# base/pod-base.yaml
apiVersion: v1
kind: Pod
metadata:name: app-pod  # 所有环境共用的 Pod 名称
spec:containers:- name: app-containerimage: nginx:alpine  # 通用镜像volumeMounts:- name: app-storagemountPath: /data  # 通用容器内挂载路径volumes:- name: app-storagepersistentVolumeClaim:claimName: app-storage-pvc  # 引用基础 PVC 名称(与 pvc-base.yaml 一致)
1.3 基础 kustomization.yaml

聚合基础资源,声明需要管理的 PV/PVC/Pod:

# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization# 声明基础资源(PVC + Pod)
resources:- pvc-base.yaml- pod-base.yaml

步骤 2:编写环境覆盖配置(overlays 目录)

每个环境通过「补丁文件」覆盖基础配置的差异化字段,无需修改基础文件。

2.1 开发环境(overlays/dev)

开发环境用小容量(5Gi)、NFS 动态存储(StorageClass 为 nfs-sc):

  • 补丁文件(patch-pvc.yaml):覆盖容量和存储类

    # overlays/dev/patch-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:name: app-storage-pvc  # 必须与基础 PVC 名称一致(目标补丁对象)
    spec:resources:requests:storage: 5Gi  # 开发环境容量(小容量)storageClassName: "nfs-sc"  # 开发环境存储类(NFS 动态供给)
    
  • 开发环境 kustomization.yaml:引用基础目录和补丁

    # overlays/dev/kustomization.yaml
    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    

引用基础配置(继承 base 中的所有资源)

bases:

  • ../../base # 相对路径指向 base 目录

应用环境差异化补丁(覆盖 PVC 的容量和存储类)

patches:

  • path: patch-pvc.yaml # 指向当前目录的补丁文件

#### 2.2 测试环境(overlays/test)
测试环境用中等容量(10Gi)、同样使用 NFS 动态存储:
- 补丁文件(patch-pvc.yaml):仅修改容量```yaml# overlays/test/patch-pvc.yamlapiVersion: v1kind: PersistentVolumeClaimmetadata:name: app-storage-pvcspec:resources:requests:storage: 10Gi  # 测试环境容量(中等容量)storageClassName: "nfs-sc"  # 同开发环境的 NFS 存储类
  • 测试环境 kustomization.yaml:与开发环境结构一致,仅补丁内容不同
    # overlays/test/kustomization.yaml
    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    

bases:

  • ../../base

patches:

  • path: patch-pvc.yaml

plaintext


#### 2.3 生产环境(overlays/prod)
生产环境用大容量(20Gi)、Ceph 存储(静态 PV,管理员手动创建):
- 生产环境专属 PV(pv-prod.yaml):管理员提前创建的 Ceph 后端 PV```yaml# overlays/prod/pv-prod.yamlapiVersion: v1kind: PersistentVolumemetadata:name: prod-ceph-pv  # 生产环境专属 PV 名称spec:capacity:storage: 20Gi  # 生产环境容量(大容量)accessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retain  # 生产环境保留数据(手动回收)storageClassName: "ceph-sc"  # 生产环境存储类(Ceph)cephfs:  # Ceph 存储后端配置(根据实际集群调整)monitors:- 192.168.1.200:6789- 192.168.1.201:6789path: /prod/app-storageuser: adminsecretRef:name: ceph-admin-secret  # Ceph 认证密钥(需提前创建)
  • 生产环境 PVC 补丁(patch-pvc.yaml):匹配 PV 的容量和存储类

    yaml

    # overlays/prod/patch-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:name: app-storage-pvc
    spec:resources:requests:storage: 20Gi  # 与 PV 容量一致storageClassName: "ceph-sc"  # 与 PV 存储类一致(静态绑定)
    
  • 生产环境 kustomization.yaml:不仅引用基础配置,还添加专属 PV 资源

    yaml

    # overlays/prod/kustomization.yaml
    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    

引用基础配置

bases:

  • ../../base

添加生产环境专属资源(PV)

resources:

  • pv-prod.yaml # 生产环境需要手动创建的 PV

应用 PVC 差异化补丁

patches:

  • path: patch-pvc.yaml
### 步骤3:应用 Kustomize 配置(部署到不同环境)
Kustomize 无需提前构建,可直接通过 `kubectl apply -k` 部署指定环境的配置(自动合并基础配置和补丁)。#### 3.1 部署开发环境
```bash
# 切换到开发环境 overlay 目录,或直接指定路径
kubectl apply -k overlays/dev# 验证资源(PVC 容量5Gi,存储类nfs-sc;Pod 正常运行)
kubectl get pvc app-storage-pvc
kubectl get pod app-pod
kubectl get pv  # 动态供给会自动创建 PV(名称含 nfs-sc-app-storage-pvc-xxx)
3.2 部署测试环境
kubectl apply -k overlays/test# 验证(PVC 容量10Gi,存储类nfs-sc)
kubectl get pvc app-storage-pvc
3.3 部署生产环境
# 生产环境需先确保 Ceph 密钥存在(提前创建)
kubectl apply -f ceph-admin-secret.yaml# 部署生产环境资源(自动创建 PV + 合并 PVC 补丁 + 部署 Pod)
kubectl apply -k overlays/prod# 验证(PV 为 prod-ceph-pv,PVC 绑定成功)
kubectl get pv prod-ceph-pv
kubectl get pvc app-storage-pvc

步骤 4:查看 / 调试 Kustomize 合并结果

如果想提前确认基础配置和补丁的合并效果,可使用 kubectl kustomize 命令输出最终配置(不部署):

# 查看开发环境最终配置(合并 base 和 dev 补丁)
kubectl kustomize overlays/dev# 查看生产环境最终配置(合并 base + prod PV + prod 补丁)
kubectl kustomize overlays/prod

四、进阶用法:优化 PV/PVC 管理效率

1. 变量替换(避免硬编码)

通过 Kustomize 的 configMapGenerator 或 secretGenerator 管理存储后端地址、密钥等变量,避免在配置中硬编码:

# base/kustomization.yaml 中添加变量
configMapGenerator:- name: storage-configliterals:- NFS_SERVER=192.168.1.100  # NFS 服务器地址(可在 overlay 中覆盖)

在 PV 中引用变量(需结合 patchesJson6902 或 Helm 模板,Kustomize 原生不支持直接引用,推荐用补丁覆盖)。

2. 批量管理多个 PV/PVC

如果需要管理多个存储资源(如应用需要数据存储 + 日志存储),可在 base 目录中添加多个 PVC,在 overlay 中分别补丁:

base/
├── pvc-data.yaml  # 数据存储 PVC
├── pvc-log.yaml   # 日志存储 PVC
└── kustomization.yaml  # 聚合两个 PVC

3. 环境隔离(通过命名空间)

在 overlay 中指定命名空间,实现不同环境的资源隔离:

# overlays/dev/kustomization.yaml
namespace: dev-namespace  # 开发环境命名空间
bases:- ../../base
patches:- path: patch-pvc.yaml
http://www.dtcms.com/a/578065.html

相关文章:

  • 成都网站平面设计吴桥网站
  • Adobe Photoshop CS6 Lite:PS极端简化版,压缩后大小仅50M,Photoshop精简版
  • 做新闻类网站还有市场吗莱芜最好的网站建设公司
  • 电力变压器绕组变形多物理场耦合建模与在线监测技术
  • WLAN_频段配置
  • 网站策划书的撰写流程是什么福州网站建设 网站设计 网站制作
  • 进程控制核心(含进程地址空间)
  • 【OpenGL学习】第2课:用OpenGL创建第一个窗口
  • Redis单线程还是多线程?
  • 做网站现在用什么语言网站做优化的好处
  • 做网站需要什么知识wdcp 快速迁移网站
  • 《uni-app 长列表优化:虚拟列表(vue-virtual-scroller)解决 1000+ 数据渲染卡顿》(附虚拟列表封装与多端适配)
  • uniapp在app中如何将json以文件格式存到本地(vue3)
  • uniapp开源ERP多仓库管理系统
  • Qt GUI 程序中进度条的完整指南
  • 网站添加广告源码wordpress和druid
  • 推出 JxBrowser MCP 服务器
  • Etcd详解(raft算法保证强一致性)
  • 东莞网站建设对比建筑模板有几种
  • AIShareTxt入门:快速准确高效的为金融决策智能体提供股票技术指标上下文
  • 赋能智慧监管:视频汇聚平台EasyCVR助力智慧电梯监控智能化监管
  • 【银行测试】对公渠道转账+网银转账+对私转账功能测试点(汇总)
  • 2013年建设工程发布网站字形分析网站
  • 高端网站制作系统百度指数怎么看城市
  • 网站搜索排名查询余姚物流做网站
  • langchain agent的中间件
  • Mysql中隔离级别可重复读解决不可重复读的底层原理是什么?
  • MySQL的DATE_FORMAT函数介绍
  • 涞水县建设局网站电子商务网站建设哪本教材比较适合中等专业学校用
  • 建阳网站建设wordpress手机验证码注册