我可以在给定图表的所有发行版上运行Helm命令吗?

时间:2018-07-23 21:01:06

标签: kubernetes kubernetes-helm

我经常跨多个名称空间安装伞形Helm图表的多个实例以进行测试。我想继续使用随机生成的名称,但是还可以在一个命令中删除同一图表的多个发行版,而无需为每个新发行版名称进行更改。

对于这样的图表:

$ helm ls
NAME                REVISION    UPDATED                     STATUS      CHART                 NAMESPACE
braided-chimp       1           Mon Jul 23 15:52:43 2018    DEPLOYED    foo-platform-0.2.1    foo-2
juiced-meerkat      1           Mon Jul  9 15:19:43 2018    DEPLOYED    postgresql-0.9.4      default
sweet-sabertooth    1           Mon Jul 23 15:52:34 2018    DEPLOYED    foo-platform-0.2.1    foo-1

我可以通过键入以下发布名称来删除foo-platform-0.2.1图表的所有发布:

$ helm delete braided-chimp sweet-sabertooth

但是每次我运行该命令时,都必须使用新的发行版名称对其进行更新。

是否可以基于图表名称在所有命名空间的所有图表的所有实例上运行列表/删除? (我在想kubectl带有-l标志所支持的内容。)

例如,我怎样才能做到这一点?

$ helm delete -l 'chart=foo-platform-0.2.1'

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试:

helm delete $(helm ls | awk '$9 ~ /SEARCH/ { print $1 }')

用您要使用的任何图表名称模式替换SEARCH

它被扔掉了一点,因为awk将在时间戳记中划定多个空格。

所以传统上用制表符分隔的内容是

1=NAME 2=REVISION 3=UPDATED 4=STATUS 5=CHART 6=NAMESPACE

成为:

1=mottled-whippet 2=1 3=Fri 4=Jul 5=20 6=13:15:45 7=2018 8=DEPLOYED 9=postgresql-0.15.0 {{ 1}}

答案 1 :(得分:1)

我想看看是否可以使用jq而不是awk达到相同的结果。

我不是jq的专家,所以可能有更简单的方法。 空试测试!

假设重击:

CHARTID=foo-platform-0.2.1
helm delete --dry-run $(helm ls --output json | jq -r ".Releases[] | select(.Chart == \"${CHARTID}\") | .Name")

在上面的示例中,我希望输出为:

release "braided-chimp" deleted
release "sweet-sabertooth" deleted