每次更新部署时,都会向长列表添加一个新的副本集。老房子要打扫吗?
删除旧的副本集是 Deployment 对象的一部分,但它是可选的。您可以设置 .spec.revisionHistoryLimit来告诉 Deployment 要保留多少个旧的复制集。
.spec.revisionHistoryLimit
以下是 YAML 的一个例子:
apiVersion: apps/v1 kind: Deployment # ... spec: # ... revisionHistoryLimit: 0 # Default to 10 if not specified # ...
如果你想手动清理它,你可以只是粘贴到你的控制台
kubectl delete $(kubectl get all | grep replicaset.apps | grep "0 0 0" | cut -d' ' -f 1)
这只是由于 kubectl get all显示资源的方式而起作用。这是一个廉价的解决方案,但也不是什么大问题。
kubectl get all
看看 乔 · 伊夫斯的解决方案,它与 乔 · 伊夫斯的解决方案类似,但对语法的依赖性较小(至少忽略了空格)
以上是对 Kevin 文章的修改,因为我还不能发表评论
AWK 让我们忽略了间距!
kubectl delete $(kubectl get all | grep replicaset.apps | awk '{if ($2 + $3 + $4 == 0) print $1}')
在 k8s v1.19.6中,我不得不修改 Joe Eaves 的命令如下:
kubectl -n <namespace> delete rs $(kubectl -n <namespace> get rs | awk '{if ($2 + $3 + $4 == 0) print $1}' | grep -v 'NAME')
这里有一种不使用 AWK 的方法,只使用 kubectl 和内置的 jsonpath 功能:
kubectl delete replicaset $(kubectl get replicaset -o jsonpath='{ .items[?(@.spec.replicas==0)].metadata.name }')
这应该更加稳定,因为它直接处理副本计数,而不是尝试解析可能发生变化的 kubectl的输出。
kubectl
一条捷径:
kubectl delete rs $(kubectl get rs | grep "0 0 0" | cut -d' ' -f 1)
我这样做:
kubectl get replicasets.apps -n namespace | awk '{if ($2 + $3 + $4 == 0) print $1}' | xargs kubectl delete replicasets.apps -n namespace
首先获取所有的复制集,然后用条件解析它,然后删除它。
使用 awk 和 xargs 删除 来自所有命名空间的所有副本集的一行程序:
kubectl get replicaset --all-namespaces -o=jsonpath='{range .items[?(@.spec.replicas==0)]}{.metadata.name}{"\t"}{.metadata.namespace}{"\n"}{end}' | awk '{print $1 " --namespace=" $2}' | xargs -n 2 -d '\n' bash -c 'kubectl delete replicaset $0 $1'