库斯托米泽编辑集图像不适用于库斯托米泽多基和公共基



我使用这个例子:

├── base
│   ├── kustomization.yaml
│   └── pod.yaml
├── dev
│   └── kustomization.yaml
├── kustomization.yaml
├── production
│   └── kustomization.yaml
└── staging
└── kustomization.yaml

kustomization.yaml文件中的根目录:

resources:
- ./dev
- ./staging
- ./production

我也有图像转换器代码在dev, staging, productioncustomize .yaml:

images:
- name: my-app
newName: gcr.io/my-platform/my-app

要构建单个部署清单,我使用:

(cd dev && kustomize edit set image my-app=gcr.io/my-platform/my-app:0.0.2 && kustomize build .)

很简单!

为所有覆盖层(开发层、登台层、生产层)构建部署清单,我使用:

(kustomize edit set image my-app=gcr.io/my-platform/my-app:0.0.2 && kustomize build .)

使用包含所有资源(dev, staging, production)的根目录kustomization.yaml

它确实工作,最终构建在控制台上打印,但没有图像标签。

似乎kusotmize edit set image只更新当前目录的kustomizaion.yaml

有什么可以做的,以一种简单有效的方式处理这种情况,使最终输出包含图像标签,以及所有的部署?

测试请使用这个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先去叠加,再做位于overlays/kustomization.yaml中的transformation code。这部分完成后,图像名称为而不是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

相关内容

  • 没有找到相关文章

最新更新