0

我们有一个带有子图依赖的舵图。现在,在最新版本中,决定使用不同的子图表(相同的组件),但来自不同的“供应商”(如 Bitnami)。

问题是当我们在集群上运行 helm upgrade 时,安装成功,但旧的 subchart 组件不会自动删除,我们必须“手动”运行kubectl delete

这会产生很多 Ops 问题,因为它不适合我们的 GitOps 方法。

在进行 helm 升级时,有一种方法可以自动删除所有以前的子图表组件?

这似乎是一种正常的情况,尤其是在今天,许多图表由不同的公司(如 Bitnami、Quay ecc)托管,而没有遇到锁定。

4

1 回答 1

0

您可以使用Helm 条件轻松指定应安装哪些依赖项。

我创建了一个示例来说明它是如何工作的。

我在文件中声明了两个依赖项,Chart.yaml并且我在values.yaml文件中定义了redis应该安装的文件:

$ cat test-chart/Chart.yaml                                                                                                                    
...
dependencies:
- name: redis
  version: "15.x.x"
  repository: "https://charts.bitnami.com/bitnami"
  condition: redis.enabled
- name: memcached
  version: "5.x.x"
  repository: "https://charts.bitnami.com/bitnami"
  condition: memcached.enabled

$ cat test-chart/values.yaml
...
redis:
  enabled: true
memcached:
  enabled: false

让我们安装此图表以确保仅redis安装:

$ helm install chart-1 test-chart
NAME: chart-1
LAST DEPLOYED: Wed Nov 10 11:18:44 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

$ kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
chart-1-redis-master-0     1/1     Running   0          107s
chart-1-redis-replicas-0   1/1     Running   0          107s
chart-1-redis-replicas-1   1/1     Running   0          66s
chart-1-redis-replicas-2   1/1     Running   0          32s

从上面的输出中可以看出,memcached没有按预期安装。

现在假设我们要安装memcached而不是redis. 我们需要做的就是更改文件memcached.enabled并升级版本:redis.enabledvalues.yaml

$ cat test-chart/values.yaml
...
redis:
  enabled: false
memcached:
  enabled: true

$ helm upgrade chart-1 test-chart
Release "chart-1" has been upgraded. Happy Helming!
NAME: chart-1
LAST DEPLOYED: Wed Nov 10 11:21:49 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None

$ kubectl get pods
NAME                                 READY   STATUS    RESTARTS   AGE
chart-1-memcached-86847c8c4f-nt5wv   1/1     Running   0          21s

一切似乎都很好,redis已卸载并memcached已安装。

于 2021-11-10T16:55:49.687 回答