tec*_*242 7 kubernetes kustomize gitops argocd
我有一个我认为常见的用例,但我真的很难找到解决方案:
我想Kustomize在我们的部署中重用补丁中的变量。具体来说,我们使用提交 ID 来引用图像标签(用例 A)和与部署相关的 k8s 作业(用例 B)。
我们使用的设置中,对于每个 ArgoCD 应用程序,我们都有一个/base/文件夹/overlays/[environment-name],并且该基础用kustomization.yaml.
一个非常简单的用法 -/overlays/[environment-name]我们有一个kustomization.yaml使用:
images:
- name: our-aws-repo-url
newName: our-aws-repo-url
newTag: commit-id
Run Code Online (Sandbox Code Playgroud)
工作起来就像一个魅力,因为我们可以将其重新用于部署本身及其相关作业,所有这些都只需一个提交引用。
问题:
我们使用 N 个作业来进行 0 停机部署的迁移,其中我们运行运行迁移的 alembic 容器,并且我们有一个waitforit initContainer监听作业完成的容器,即当迁移成功时才能进行部署。
现在的问题是,我需要触摸一个服务覆盖层中的 4 个文件来修补各处的 id(我们用它来识别作业):
- image: groundnuty/k8s-wait-for:v1.4
imagePullPolicy: IfNotPresent
args:
- "job"
- "job-commit-id"
Run Code Online (Sandbox Code Playgroud)
apiVersion: batch/v1
kind: Job
metadata:
name: job-commit-id
Run Code Online (Sandbox Code Playgroud)
我认为应该可行的是:
commit-id并且apiVersion: batch/v1
kind: Job
metadata:
name: job-${commit-id}
Run Code Online (Sandbox Code Playgroud)
- image: groundnuty/k8s-wait-for:v1.4
imagePullPolicy: IfNotPresent
args:
- "job"
- "job-${commit-id}"
Run Code Online (Sandbox Code Playgroud)
images:
- name: our-aws-repo-url
newName: our-aws-repo-url
newTag: ${commit-id}
Run Code Online (Sandbox Code Playgroud)
目标:当开发人员为发布做 PR 时,他们应该只触及对提交 ID 的一个引用,以防止拼写错误等(也更容易审查,而不是在 N 个地方检查提交 ID)
警告:我确信还有另一种方法可以代替作业进行迁移,但这通常是常见的事情:如何在 kustomize 中重用变量。
我知道我可以在 kustomize 中引用 ENV 变量,但我想在清单中重用变量。
但我想在清单中重用一个变量。
这不是您通常使用 Kustomize 的方式。使用 Kustomize 时,事情都是声明式且明确的,这是一件好事。
当开发人员为发布做 PR 时,他们应该只触及对提交 ID 的一个引用,以防止拼写错误等(也更容易审查,而不是在 N 个地方检查提交 ID)
是和否。
在我看来,四个地方的变化不应该被视为一个问题。问题在于需要人工来更新四个地方。
解决人类辛劳的方法通常是自动化。通过在自动化管道(例如 Jenkins - 或 shellscript)中使用yq,您可以自动执行清单更新以采用单个参数 - 在您拥有可用的 git“提交 id”后,可以选择直接为每个构建自动执行此操作。管道需要运行四个yq命令来更新四个 Yaml 字段。请参阅分配操作和github 操作管道示例。不需要其他变量。
| 归档时间: |
|
| 查看次数: |
11813 次 |
| 最近记录: |