gpt4 book ai didi

kubernetes - 在 kustomize manifest 中创建变量

转载 作者:行者123 更新时间:2023-12-04 12:53:26 24 4
gpt4 key购买 nike

我有我认为的常见用例,但我真的很难找到解决方案:
我想重用 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监听 Job 是否完成,即当迁移成功以便部署时。
现在的问题是我需要在一个服务的覆盖层中触摸 4 个文件来修补所有位置的 id(我们用来识别作业):
  • deployment.yaml 像这样:
  • - image: groundnuty/k8s-wait-for:v1.4
    imagePullPolicy: IfNotPresent
    args:
    - "job"
    - "job-commit-id"
  • job.yaml 本身更改新部署/潜在迁移的 Job 的重新触发:
  • apiVersion: batch/v1
    kind: Job
    metadata:
    name: job-commit-id

  • kustomization.yaml 如用例 A 中所述。

  • 我认为应该可行的是:
  • 定义变量 commit-id以某种方式在 kustomization.yaml 和
  • 对于用例 A 和 B,请执行以下操作:
  • 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}
    目标:当开发者为发布做 PR 时,他们应该只接触一个提交 ID 的引用,以防止错别字等(也更容易审查而不是检查 N 个地方的提交 ID)
    警告:我确信还有另一种方法可以代替 Jobs 进行迁移,但这通常是一件常见的事情:如何在 kustomize 中重用变量。
    我知道我可以在 kustomize 中引用 ENV 变量,但我想在 list 中重用一个变量。

    最佳答案

    but I want to reuse a variable within the manifests.


    这不是您通常使用 Kustomize 的方式。在使用 Kustomize 时,事情是声明性和明确的,这是一件好事。

    when developers do PRs for releases, they should only touch one reference to the commit ID to prevent typos etc. (also easier to review instead of checking commit ID in N places)


    是和否。
    在我看来,四个地方的变化不应该被视为问题。有人力更新四个地方 是什么问题 .
    解决人的辛劳通常是 自动化 .通过使用 yq在自动化管道(例如 Jenkins - 或 shellscript)中,您是否可以自动化您的 list 更新以获取单个参数 - 在您拥有可用的 git“commit id”后,可以选择直接为每个构建自动化。管道需要运行四个 yq -commands 更新四个 Yaml 字段。见例如 assign operationgithub action - pipeline example .不需要其他变量。

    关于kubernetes - 在 kustomize manifest 中创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69364581/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com