我们有一个带有子图依赖项的舵图。现在,在最新版本中,决定使用不同的子图(相同的组件),但来自不同的“供应商”(例如 Bitnami)。
问题是,当我们在集群上运行 helm update 时,安装成功了,但旧的 subchart 组件没有自动删除,我们必须“手动”运行
kubectl delete
。
这会产生很多 Ops 问题,因为它不太适合我们的 GitOps 方法。
有一种方法可以在进行 helm 升级时自动删除所有以前的子图组件吗?
这似乎是正常情况,尤其是在今天,有很多图表由不同公司(如 Bitnami、Quay ecc)托管,而没有遇到锁定。
您可以使用 Helm Conditions 轻松指定应安装哪些依赖项。
我创建了一个示例来说明它是如何工作的。
我在
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.enabled
和 values.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
已安装。