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

使用Kustomization更新Deployment镜像版本时遇报错及镜像未更新问题

Kustomize部署问题排查与解决

1. 初始error: no objects passed to apply错误原因

Kustomize是基于已有资源进行定制的工具,必须在Kustomization.yaml中通过resources字段指定要处理的原始资源文件。你最初的配置缺少这个字段,导致kubectl无法识别要操作的对象,因此报错。

2. 镜像版本未更新的核心问题

你的Deployment中镜像字段的写法不符合规范:

image: <image>0.0.1

这种写法没有用冒号分隔镜像名和标签,Kustomize会把<image>0.0.1当作完整的镜像名称,而你在Kustomization.yaml中指定的images.name是<image>,两者无法匹配,所以镜像替换规则完全不生效。

3. Patch操作的潜在问题

你当前的patch使用path: /spec/template/spec/containers/0/env/0加add操作,这会在env数组的第0个位置插入新变量,直接覆盖原来的databse_url环境变量,这大概率不是你想要的效果。


修正后的配置

第一步:修正Deployment.yaml的镜像字段

把镜像名和标签用冒号分隔,符合Docker镜像的标准写法:

apiVersion: v1
kind: Namespace
metadata:
  name: booking

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: booking-deployment
  namespace: booking
  labels:
    app: booking-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: booking-app
  template:
    metadata:
      labels:
        app: booking-app
    spec:
      containers:
       - name: booking-pod
         # 修正:用冒号分隔镜像名与标签
         image: <image>:0.0.1
         ports:
          - containerPort: 8080
         env:
          - name: databse_url
            value: <db_url>
          - name: databse_username
            value: <db_username>
          - name: databse_password
            value: <db_password>

第二步:修正Kustomization.yaml

添加resources字段指定原始资源,同时调整patch路径避免覆盖原有环境变量:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
# 指定要处理的原始资源文件
resources:
  - Deployment.yaml

patches:
  - target:
      kind: Deployment
      name: booking-deployment
    patch: |-
      - op: add
        # 使用/-/表示在env数组末尾添加新元素,不会覆盖原有变量
        path: /spec/template/spec/containers/0/env/-
        value:
          name: coupon_service_url
          value: <url_to_coupon_service>

images:
- name: <image>
  newName: docker.io/<username>/<image>
  newTag: 0.0.9

验证与部署

  1. 先执行kubectl kustomize .查看生成的YAML,确认镜像版本和环境变量是否符合预期
  2. 执行kubectl apply -k .应用配置
  3. 检查Pod镜像是否更新:kubectl get pods -n booking -o jsonpath='{.items[0].spec.containers[0].image}'

内容的提问来源于stack exchange,提问作者Rushikesh Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:42:28