【问题标题】:How to upgrade at once multiple releases with Helm for the same chart如何使用 Helm 为同一个图表一次升级多个版本
【发布时间】:2021-10-01 21:41:26
【问题描述】:

我有多个基于使用 Helm 部署的同一个图表的应用程序。假设您使用不同的配置多次部署您的应用:

helm install myapp-01 mycharts/myapp
helm install myapp-02 mycharts/myapp
helm install myapp-03 mycharts/myapp

在我更新图表文件后,我想更新所有版本,或者可能是某个范围的版本。我设法创建了一个这样的 PoC 脚本:

helm list -f myapp -o json | jq -r '.[].name' | while read i; do helm upgrade ${i} mycharts/myapp; done

虽然这可行,但我需要做很多事情才能拥有完整的功能和错误控制。 是否有任何 CLI 工具或我可以在 CI/CD 环境中使用的东西来更新大量版本(比如数百个)?我一直在研究 Rancher 和 Autohelm,但找不到这样的功能。

【问题讨论】:

  • 使用普通的kubectlkustomize,这更容易做到。您部署的所有操作都是kubectl apply,您可以将目录作为参数传递。参见例如kubernetes.io/docs/tasks/manage-kubernetes-objects/…
  • 能否通过为每个应用设置一个覆盖文件夹来实现?
  • 数百?您远远不需要真正的部署系统。看看 argo、flux、jenkinsX 等。
  • @jmservera 是的,这是解决问题的一种方法。然后一个命令将它们全部部署kubectl apply -k
  • 感谢@Jonas,我可以使用 kustomize 来实现,现在它更易于使用且更灵活。稍后我将看看 argo 和 Flux,看看我是否可以使用其他一些工具来增强回滚。感谢您的帮助。

标签: kubernetes kubernetes-helm helm3


【解决方案1】:

感谢@Jonas 提供的提示,我设法创建了一个简单的结构来部署和更新具有相同图像库的大量 pod。

我创建了一个这样的文件夹结构:

├── kustomization.yaml
├── base
│   ├── deployment.yaml
│   ├── kustomization.yaml
│   ├── namespace.yaml
│   └── service.yaml
└── overlays
    ├── one
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── two
        ├── deployment.yaml
        └── kustomization.yaml

所以这里的主要技巧是在指向每个应用的主文件夹中有一个kustomization.yaml 文件:

resources:
- overlays/one
- overlays/two
namePrefix: winnp-

然后在base/kustomization.yaml我指向基础文件:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - service.yaml
  - deployment.yaml
  - namespace.yaml

然后在每个应用程序中,我为部署和服务使用命名空间、后缀和 commonLabels,并使用一个补丁来重命名基本命名空间:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: ns-one
nameSuffix: "-one"

commonLabels:
  app: vbserver-one

bases:
- ../../base

patchesStrategicMerge:

 - deployment.yaml

patches:
- target:
    version: v1 # apiVersion
    kind: Namespace
    name: base
  patch: |-
    - op: replace
      path: /metadata/name
      value: ns-one

现在,我可以通过一个简单的命令部署或修改所有应用:

kubectl apply -k .

所以要更新图像,我只需用新图像更改deployment.yaml 文件并再次运行命令。

我上传了我在 GitHub repo 中所做的完整示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2022-11-26
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多