每次部署更新时,一个新的副本集被添加到一个长列表中。旧的副本集应该被清除吗?
up9lanfz1#
删除旧的复制集是Deployment对象的一部分,但它是可选的。您可以设置.spec.revisionHistoryLimit来告诉Deployment要保留多少旧的复制集。下面是一个YAML示例:
.spec.revisionHistoryLimit
apiVersion: apps/v1 kind: Deployment # ... spec: # ... revisionHistoryLimit: 0 # Default to 10 if not specified # ...
字符串
w8f9ii692#
这里有一种不使用AWK的方法,只使用kubectl和内置的jsonpath功能:
kubectl delete replicaset $(kubectl get replicaset -o jsonpath='{ .items[?(@.spec.replicas==0)].metadata.name }')
字符串这应该更稳定,因为它直接处理副本计数,而不是试图解析kubectl的输出(可能会发生变化)。
kubectl
b4wnujal3#
对Kévin上面的帖子进行了修改,因为我还不能发表评论:DAWK让我们忽略空格!
kubectl delete $(kubectl get all | grep replicaset.apps | awk '{if ($2 + $3 + $4 == 0) print $1}')
velaa5lx4#
如果你想手动清理它,你可以把它粘贴到你的控制台上。
kubectl delete $(kubectl get all | grep replicaset.apps | grep "0 0 0" | cut -d' ' -f 1)
字符串这只是因为kubectl get all显示资源的方式。这是一个廉价的解决方案,但它也不是一个大问题。
kubectl get all
看看Joe Eaves's solution,它与之类似,但对语法的依赖性更小(至少忽略了白色空格)
t9eec4r05#
在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')
k4ymrczo6#
使用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'
qojgxg4l7#
我是这样做的:
kubectl get replicasets.apps -n namespace | awk '{if ($2 + $3 + $4 == 0) print $1}' | xargs kubectl delete replicasets.apps -n namespace
字符串首先得到所有的复制集,然后用条件语句解析它,然后删除它。
jvidinwx8#
一条捷径:
kubectl delete rs $(kubectl get rs | grep "0 0 0" | cut -d' ' -f 1)
txu3uszq9#
只是基于**@Mike Matera**答案的一点改进,因为如果没有ReplicaSet,则会抛出错误:
kubectl get replicaset -o jsonpath='{ .items[?(@.spec.replicas==0)]}' -A | k delete -f -
9条答案
按热度按时间up9lanfz1#
删除旧的复制集是Deployment对象的一部分,但它是可选的。您可以设置
.spec.revisionHistoryLimit
来告诉Deployment要保留多少旧的复制集。下面是一个YAML示例:
字符串
w8f9ii692#
这里有一种不使用AWK的方法,只使用kubectl和内置的jsonpath功能:
字符串
这应该更稳定,因为它直接处理副本计数,而不是试图解析
kubectl
的输出(可能会发生变化)。b4wnujal3#
对Kévin上面的帖子进行了修改,因为我还不能发表评论:D
AWK让我们忽略空格!
字符串
velaa5lx4#
如果你想手动清理它,你可以把它粘贴到你的控制台上。
字符串
这只是因为
kubectl get all
显示资源的方式。这是一个廉价的解决方案,但它也不是一个大问题。编辑
看看Joe Eaves's solution,它与之类似,但对语法的依赖性更小(至少忽略了白色空格)
t9eec4r05#
在k8s v1.19.6上,我不得不修改Joe Eaves的命令,如下所示:
字符串
k4ymrczo6#
使用awk和xargs删除所有复制空间中的所有副本集的一行程序:
字符串
qojgxg4l7#
我是这样做的:
字符串
首先得到所有的复制集,然后用条件语句解析它,然后删除它。
jvidinwx8#
一条捷径:
字符串
txu3uszq9#
只是基于**@Mike Matera**答案的一点改进,因为如果没有ReplicaSet,则会抛出错误:
字符串