kustomize 编辑集图像不适用于 kustomize 多碱基和公共碱基
kustomize edit set image doesn't work with kustomize multibases and common base
我正在使用这个 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
要构建单个部署清单,我使用:
(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 .)
它使用根目录中的 kustomization.yaml
,其中包含所有资源(开发、暂存、生产)。
它确实有效,最终版本打印在控制台上,但没有图像标签。
似乎 kusotmize edit set image
只更新当前目录的 kustomizaion.yaml
。
是否可以采取任何措施以简单有效的方式处理这种情况,以便最终输出也包含所有部署的图像标签?
花了一些时间才意识到这里发生了什么。我将逐步解释会发生什么以及它应该如何工作。
会发生什么
首先我重新创建了相同的结构:
$ 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做位于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
我正在使用这个 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
要构建单个部署清单,我使用:
(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 .)
它使用根目录中的 kustomization.yaml
,其中包含所有资源(开发、暂存、生产)。
它确实有效,最终版本打印在控制台上,但没有图像标签。
似乎 kusotmize edit set image
只更新当前目录的 kustomizaion.yaml
。
是否可以采取任何措施以简单有效的方式处理这种情况,以便最终输出也包含所有部署的图像标签?
花了一些时间才意识到这里发生了什么。我将逐步解释会发生什么以及它应该如何工作。
会发生什么
首先我重新创建了相同的结构:
$ 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做位于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