我认为这是一个常见的用例,但我真的很难找到一个解决方案:
我想在我们部署的Kustomize补丁中重用一个变量。具体来说,我们使用提交ID来引用映像标记(用例A)和与部署相关的k8s作业(用例B)。
我们使用一个设置,对于每个ArgoCD应用程序,我们都有一个/base/文件夹和/overlays/[environment-name],这个基础是用kustomization.yaml修补的。
用例A:
一个非常简单的用法--在/overlays/[environment-name]中,我们有一个kustomization.yaml,它使用:
images:
- name: our-aws-repo-url
newName: our-aws-repo-url
newTag: commit-id工作像一个魅力,因为我们可以重复使用这两个部署本身,以及它的相关乔布斯,所有与一个提交参考。
用例B:
问题是:
例如,我们使用N个作业来进行0停机部署的迁移,其中我们运行运行迁移的alembic容器,并且我们有一个waitforit initContainer,它侦听作业是否完成,也就是迁移成功的时候,以便进行部署。
现在的问题是,我需要触摸一个服务覆盖中的4个文件,以便在任何地方修补id (我们使用它来识别作业):
- image: groundnuty/k8s-wait-for:v1.4
imagePullPolicy: IfNotPresent
args:
- "job"
- "job-commit-id"apiVersion: batch/v1
kind: Job
metadata:
name: job-commit-id相反,我认为应该做到的是:
commit-id中定义变量kustomization.yaml和apiVersion: batch/v1
kind: Job
metadata:
name: job-${commit-id}- image: groundnuty/k8s-wait-for:v1.4
imagePullPolicy: IfNotPresent
args:
- "job"
- "job-${commit-id}"images:
- name: our-aws-repo-url
newName: our-aws-repo-url
newTag: ${commit-id}目标:当开发人员为发行版做PRs时,他们应该只对提交ID进行一次引用,以防止输入等等(也更容易检查,而不是在N个地方检查提交ID )
警告:我相信还有另一种方法可以代替乔布斯进行迁移,但这通常是一件很常见的事情:如何在kustomize中重用变量。
我知道我可以在kustomize中引用ENV变量,但是我希望在清单中重用一个变量。
发布于 2021-09-28 16:50:52
但是我想在清单中重用一个变量。
这不是你通常使用Kustomize的方式。这是一件好事,事情是声明性和明确的工作时,库斯托米泽。
当开发人员为发行版执行PRs时,他们应该只对提交ID进行一次引用,以防止键入等等(也更容易检查,而不是在N个地方检查提交ID )。
是和不是。
在我看来,四个地方的变化不应被视为一个问题。有人类的辛勤工作来更新四个地方是问题。
人类劳动的解决方案通常是自动化。通过在自动管道中使用yq (例如Jenkins -或外壳脚本),您可以将清单更新自动化以接受单个参数--这可以在git "commit id“可用之后直接为每个构建自动完成。该管道需要运行四个yq-commands来更新四个Yaml字段。例如见分配操作和github操作-管道示例。不需要其他变量。
https://stackoverflow.com/questions/69364581
复制相似问题