You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多版本应用创建通用Kustomize配置以复用资源?

Kustomize多版本配置复用实现方案

核心思路

把所有版本共用的资源(如Deployment、Service)和补丁放到base目录集中管理,每个版本的特有配置(如镜像标签、版本专属补丁)放在独立的overlays子目录下,通过Kustomize的resources字段让每个版本的配置继承base的通用内容,彻底消除重复代码。

调整后的目录结构

app-deploy/
├── base/
│   ├── kustomization.yaml
│   ├── deployment.yaml
│   ├── service.yaml
│   └── common-patches.yaml
└── overlays/
    ├── v1.0.0/
    │   ├── kustomization.yaml
    │   └── v1.0.0-specific-patch.yaml
    └── v1.1.5/
        ├── kustomization.yaml
        └── v1.1.5-specific-patch.yaml

关键文件配置示例

base目录通用配置

base/kustomization.yaml 集中定义所有版本共用的资源和补丁:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

# 通用资源清单
resources:
  - deployment.yaml
  - service.yaml

# 所有版本共用的补丁
patchesStrategicMerge:
  - common-patches.yaml

base/deployment.yaml 编写通用的Deployment模板(不要包含版本相关的镜像标签):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app-image:latest  # 用占位标签,后续在overlay中替换
        ports:
        - containerPort: 8080

版本专属配置(以v1.0.0为例)

overlays/v1.0.0/kustomization.yaml 继承base并添加版本特有内容:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

# 引用base目录的通用配置
resources:
  - ../../base

# 版本v1.0.0专属补丁(如调整资源配额、环境变量)
patchesStrategicMerge:
  - v1.0.0-specific-patch.yaml

# 替换镜像标签为当前版本
images:
  - name: my-app-image
    newTag: v1.0.0

overlays/v1.0.0/v1.0.0-specific-patch.yaml 编写该版本独有的配置修改:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      containers:
      - name: my-app
        env:
        - name: APP_VERSION
          value: "v1.0.0"

v1.1.5版本的配置只需修改images字段的newTag为v1.1.5,并编写对应的专属补丁即可。

构建与部署命令

构建指定版本的配置:

kustomize build overlays/v1.0.0

直接部署到集群:

kubectl apply -k overlays/v1.0.0

常见错误排查

  1. 路径引用错误:确保overlay中resources指向base的相对路径正确(如../../base,根据实际目录层级调整)
  2. 资源定义冲突:避免base和overlay中出现同名同类型的完整资源定义,overlay只需要写补丁或字段修改内容
  3. 版本兼容问题:确保使用的Kustomize版本支持patchesStrategicMerge(v1beta1版本API已稳定,大部分主流版本都支持)

内容的提问来源于stack exchange,提问作者Shubham Dixit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:03:14