kubernetes 更新部署时是否清理“数据集”?

nxowjjhe  于 12个月前  发布在  Kubernetes
关注(0)|答案(9)|浏览(107)

每次部署更新时,一个新的副本集被添加到一个长列表中。旧的副本集应该被清除吗?

up9lanfz

up9lanfz1#

删除旧的复制集是Deployment对象的一部分,但它是可选的。您可以设置.spec.revisionHistoryLimit来告诉Deployment要保留多少旧的复制集。
下面是一个YAML示例:

apiVersion: apps/v1
kind: Deployment
# ...
spec:
  # ...
  revisionHistoryLimit: 0 # Default to 10 if not specified
  # ...

字符串

w8f9ii69

w8f9ii692#

这里有一种不使用AWK的方法,只使用kubectl和内置的jsonpath功能:

kubectl delete replicaset $(kubectl get replicaset -o jsonpath='{ .items[?(@.spec.replicas==0)].metadata.name }')

字符串
这应该更稳定,因为它直接处理副本计数,而不是试图解析kubectl的输出(可能会发生变化)。

b4wnujal

b4wnujal3#

对Kévin上面的帖子进行了修改,因为我还不能发表评论:D
AWK让我们忽略空格!

kubectl delete $(kubectl get all | grep replicaset.apps | awk '{if ($2 + $3 + $4 == 0) print $1}')

字符串

velaa5lx

velaa5lx4#

如果你想手动清理它,你可以把它粘贴到你的控制台上。

kubectl delete $(kubectl get all | grep replicaset.apps | grep "0         0         0" | cut -d' ' -f 1)

字符串
这只是因为kubectl get all显示资源的方式。这是一个廉价的解决方案,但它也不是一个大问题。

编辑

看看Joe Eaves's solution,它与之类似,但对语法的依赖性更小(至少忽略了白色空格)

t9eec4r0

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')

字符串

k4ymrczo

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'

字符串

qojgxg4l

qojgxg4l7#

我是这样做的:

kubectl get replicasets.apps -n namespace | awk '{if ($2 + $3 + $4 == 0) print $1}' | xargs kubectl delete replicasets.apps -n namespace

字符串
首先得到所有的复制集,然后用条件语句解析它,然后删除它。

jvidinwx

jvidinwx8#

一条捷径:

kubectl delete rs $(kubectl get rs | grep "0         0         0" | cut -d' ' -f 1)

字符串

txu3uszq

txu3uszq9#

只是基于**@Mike Matera**答案的一点改进,因为如果没有ReplicaSet,则会抛出错误:

kubectl get replicaset -o jsonpath='{ .items[?(@.spec.replicas==0)]}' -A | k delete -f -

字符串

相关问题