AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1117060
Accepted
RogerFC
RogerFC
Asked: 2022-12-02 09:34:52 +0800 CST2022-12-02 09:34:52 +0800 CST 2022-12-02 09:34:52 +0800 CST

如何在 Kustomization 文件中编辑补丁项以使用 Helm 执行 gitop(并避免补丁堆积)

  • 772

我正在寻找一种更好的方法来使用 GitOps 更新在 HelmRelease 中定义的 docker 图像,因为我当前的方法会产生噪音。

在将 Helm 引入我使用 GitOps 管理的集群后,我发现了一些关于如何正确声明要在集群中使用的新 docker 映像构建的困难。

在部署中,我可以使用简单的 Kustomization 资源来替换图像元素,例如:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace

resources:
- namespace.yaml
- my-deployment.yaml

images:
- name: my/image
  newName: my/image
  newTag: updated-tag

对于每个新版本,我只需修改文件

kustomize edit set image my/image=my/image:updated-tag

现在使用 Helm 我不能使用相同的技巧,因为我需要更新spec.values.imageHelmRelease 中的标签,而 Kustomize 似乎没有它的简写形式。所以选择是创建一个补丁:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace

resources:
- namespace.yaml
- my-helm-release.yaml

patches:
- patch: '[{"op": "replace", "path": "/spec/values/image", "value": "my/image:updated-tag"}]'
  target:
    kind: HelmRelease
    name: my-helm-release
    namespace: my-namespace

通过使用类似的命令:

kustomize edit add patch \
    --kind HelmRelease \
    --name my-helm-release \
    --namespace my-namespace --patch "[{\"op\": \"replace\", \"path\": \"/spec/values/image\", \"value\": \"my/image:updated-tag\"}]"

(不要介意引用的报价,请耐心等待)

多次运行此命令时会出现问题。虽然kustomize edit set image覆盖了以前的值,但在后一种情况下,一个新patch的附加到列表中,带有more-updated-tag.

patches:
- patch: '[{"op": "replace", "path": "/spec/values/image", "value": "my/image:updated-tag"}]'
  target:
    kind: HelmRelease
    name: my-helm-release
    namespace: my-namespace
- patch: '[{"op": "replace", "path": "/spec/values/image", "value": "my/image:more-updated-tag"}]'
  target:
    kind: HelmRelease
    name: my-helm-release
    namespace: my-namespace

我怎样才能避免这种重复并为我的文件添加越来越多的噪音?

谢谢!

helm
  • 1 1 个回答
  • 40 Views

1 个回答

  • Voted
  1. Best Answer
    ricosega
    2022-12-20T14:32:13+08:002022-12-20T14:32:13+08:00

    找到了一种更简洁的方法来使用yq。

    yq -ei '.spec.values.image.tag = "YOURTAG"' yourfile.yaml
    
    • 1

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve