kubernetes - kustomize 编辑集图像不适用于 kustomize multibases 和 common base

标签 kubernetes kustomize

我正在使用这个 example :

├── base
│   ├── kustomization.yaml
│   └── pod.yaml
├── dev
│   └── kustomization.yaml
├── kustomization.yaml
├── production
│   └── kustomization.yaml
└── staging
    └── kustomization.yaml
并在 kustomization.yaml根目录下的文件:
resources:
- ./dev
- ./staging
- ./production
我在 dev, staging, production 中也有图像转换器代码kustomization.yaml:
images:
- name: my-app
  newName: gcr.io/my-platform/my-app

要构建单个部署 list ,我使用:
(cd dev && kustomize edit set image my-app=gcr.io/my-platform/my-app:0.0.2 && kustomize build .)
这很有效!
要为所有覆盖(开发、暂存、生产)构建部署 list ,我使用:
(kustomize edit set image my-app=gcr.io/my-platform/my-app:0.0.2 && kustomize build .)
它使用 kustomization.yaml在包含所有资源(开发、暂存、生产)的根目录中。
它确实有效,最终版本会打印在控制台上,但没有图像标签。
好像是kusotmize edit set image只更新 kustomizaion.yaml当前目录的。
有什么办法可以简单有效地处理这种情况,以便最终输出也包含所有部署的图像标签?
To test please use this repo

最佳答案

花了一些时间才意识到这里发生了什么。我将逐步解释会发生什么以及它应该如何工作。
发生什么了
首先,我重新创建了相同的结构:

$ tree
.
├── base
│   ├── kustomization.yaml
│   └── pod.yaml
├── dev
│   └── kustomization.yaml
├── kustomization.yaml
└── staging
    └── kustomization.yaml
当您为单个部署运行此命令时:
(cd dev && kustomize edit set image my-app=gcr.io/my-platform/my-app:0.0.2 && kustomize build .)
您将工作目录更改为 dev , 手动覆盖来自 gcr.io/my-platform/my-app 的图像并添加标签 0.0.2然后呈现部署。
之前添加的东西transformer code被上面的命令覆盖。您可以删除 transformer code , 运行上面的命令并得到相同的结果。运行该命令后,您会发现您的 dev/kustomization.yaml看起来像:
resources:
- ./../base
namePrefix: dev-
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: my-app
  newName: gcr.io/my-platform/my-app
  newTag: 0.0.2
然后从主目录运行此命令时会发生什么:
(kustomize edit set image my-app=gcr.io/my-platform/my-app:0.0.2 && kustomize build .)
kustomize首先转到叠加层并执行 transformation code位于overlays/kustomization.yaml .这部分完成后,图像名称为 不是 my-app , 但是 gcr.io/my-platform/my-app .
此时kustomize edit命令尝试查找名称为 my-app 的图像并且不能这样做,因此不适用 tag .
该怎么办
如果运行 kustomize edit,则需要使用转换后的图像名称在主工作目录中:
$ kustomize edit set image gcr.io/my-platform/my-app=*:0.0.4 && kustomize build .

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: my-app
  name: dev-myapp-pod
spec:
  containers:
  - image: gcr.io/my-platform/my-app:0.0.4
    name: my-app
---
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: my-app
  name: stag-myapp-pod
spec:
  containers:
  - image: gcr.io/my-platform/my-app:0.0.4
    name: my-app

关于kubernetes - kustomize 编辑集图像不适用于 kustomize multibases 和 common base,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68930658/

相关文章:

kubernetes - 从 kubernetes 连接到外部数据库集群

laravel - 使用 "envFrom"和 "configMapRef"(kustomize/kubernetes/laravel) 时,环境变量在 pod/容器中不可用

list - 如何在没有工作的情况下获得所有 Pod

docker - 将docker-compose迁移到Kubernetes

kubernetes - GKE Autopilot 默认情况下是否管理自动扩缩?

kubernetes - 如何使用 kustomize 修补 json 文件中的 configmap?

kubernetes - 将kustomize用于手动CD与tekton自动CI/CD

kubernetes - Kubernetes 需要分配真实 IP 地址吗?

kubernetes - 如何重写 namespace

当我们在资源部分下的kustomization.yaml文件中指定基本 list 文件时,Kubernetes kustomize命令给出错误