Helm 删除所有早于某个日期、在某个日期之前更新的版本或者应用程序版本低于

Ser*_*kyi 5 kubernetes kubernetes-helm

如何删除 10 月 1 日之前的版本?我的意思是10月1日之前更新。
或者,删除应用程序版本低于 _ 的所有版本。

舵机 ls 输出:

|名称|修订|更新|状态|图表|应用程序版本|命名空间|
|我的应用程序| 8 |2019 年 9 月 27 日星期五 17:27:20|部署|myapp.85|85 |默认|

以下命令仅删除一个。

舵删除relase_name

以下也不是一个很好的解决方案

helm 删除 relase_name1 relase_name2 relase_name3

注1:我不想删除全部。这里有关于如何执行此操作的解释,Helm 删除所有版本,但我不想这样做。但是,我认为我需要使用 bash 来完成此任务。

注2:我已经阅读过文档,它并没有那么大。那里没有任何关于过滤的内容。 https://helm.sh/docs/helm/#helm-delete

注3:我已经研究过 helm 来源,我不是 100% 确定,但看起来不可能https://github.com/helm/helm/tree/master/pkg/helm

先感谢您!

eri*_*sas 7

假设 Helm 版本 3+

您可以使用jqxargs来完成此操作:

问题 1,删除最近更新的版本$TIMESTAMP(以秒为单位):

helm ls -o json | jq -r --argjson timestamp $TIMESTAMP '.[] | select (.updated | sub("\\..*";"Z") | sub("\\s";"T") | fromdate < now - $timestamp).name' | xargs -L1 helm uninstall
Run Code Online (Sandbox Code Playgroud)

sub("\\..*";"Z") | sub("\\s";"T")将 Helm 在输出中使用的日期格式转换为 ISO 8601。

问题 2,删除应用程序版本早于以下版本的版本$VERSION

helm ls -o json | jq -r --argjson version $VERSION '.[] | select(.app_version | sub("\\.[0-9]$";"") | tonumber | . < $version).name' | xargs -L1 helm uninstall
Run Code Online (Sandbox Code Playgroud)

$VERSION应该是主要或主要.次要(即22.1)。不要使用补丁号。

问题 3,要在初始部署日期之前删除版本,您必须解析helm history RELEASE每个版本的命令内容。

我不会解决这个问题,但它看起来像:

loop over helm ls
  get release name
  get first entry of helm history for that release
  pass to jq and process like the answer for question 1
Run Code Online (Sandbox Code Playgroud)

相关链接:


Ser*_*kyi 5

下面的命令对我有用,它远非完美的解决方案,但至少它帮助了我:

helm ls -d -m 25 --namespace default --short | xargs -L1 helm delete
Run Code Online (Sandbox Code Playgroud)

helm ls - 列出所有版本。
-d按日期排序。
-m要获取的最大版本数(所以我取 25)。
--namespace default - 显示特定命名空间内的版本,此选项帮助我过滤我的应用程序版本。
--short - 此选项将命令的输出限制为仅发布名称。

该解决方案并不完美,希望有人能提供更好的解决方案。