每次更新部署时,都会将新的副本集添加到长列表中。是否应该清理旧的?
答案 0 :(得分:39)
删除旧的replicasets是Deployment对象的一部分,但它是可选的。您可以设置.spec.revisionHistoryLimit
以告知部署要保留多少旧复制副本。
答案 1 :(得分:10)
如果要手动清洁它,可以将其粘贴到控制台中
kubectl delete $(kubectl get all | grep replicaset.apps | grep "0 0 0" | cut -d' ' -f 1)
这仅因kubectl get all
显示资源的方式而起作用。这是一种廉价的解决方案,但也不是什么大问题。
答案 2 :(得分:3)
在 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')
答案 3 :(得分:3)
这是一种无需 AWK 的方法,仅使用 kubectl 和内置的 jsonpath 功能:
kubectl delete replicaset $(kubectl get replicaset -o jsonpath='{ .items[?(@.spec.replicas==0)].metadata.name }')
这应该更稳定,因为它直接处理副本计数,而不是尝试解析可能发生变化的 kubectl
的输出。
答案 4 :(得分:0)
对Kévin上面的帖子的修订,因为我还没有评论:D
AWK让我们忽略了间距!
kubectl delete $(kubectl get all | grep replicaset.apps | awk '{if ($2 + $3 + $4 == 0) print $1}')
答案 5 :(得分:0)
简单的方法:
kubectl delete rs $(kubectl get rs | grep "0 0 0" | cut -d' ' -f 1)