1

我需要删除集群上超过 14 天的部署。如果我运行:

oc get deploy --sort-by=.metadata.creationTimestamp | grep wml-os-rt-hybrid | awk '{ print $1 "\t\t" $6;}'

它给了我这些部署的列表和它们的年龄:

wml-os-rt-hybrid0.1-gz3vczfc        15d
wml-os-rt-hybrid0.1-fj167pbt        8d
wml-os-rt-hybrid0.1-bdzkqi7z        7d
wml-os-rt-hybrid0.1-g4hclw4v        7d
wml-os-rt-hybrid0.1-j6x9tzt6        7d
wml-os-rt-hybrid0.1-qplkkilw        4d
wml-os-rt-hybrid0.1-sadgz9cz        6h

我对此是全新的,无法弄清楚我需要添加什么,以便它还会删除任何早于 14d 的部署,在这种情况下,它只是一个部署,但在其他集群中它将是数百个。目前我手动删除它查看列表并通过运行删除任何早于 14 天的内容(使用上面的示例):

oc delete deployment wml-os-rt-hybrid0.1-gz3vczfc

这是我试图找到关于如何自动化的答案的部分

4

1 回答 1

2

要列出所有超过 14 天的条目,请尝试:

oc get deploy --sort-by=.metadata.creationTimestamp | awk '/wml-os-rt-hybrid/ && $6+0>14 { print $1 "\t\t" $6;}'

要删除这些部署:

oc get deploy --sort-by=.metadata.creationTimestamp | awk '/wml-os-rt-hybrid/ && $6+0>14 { system("oc delete deployment "$1);}'

在这里,/wml-os-rt-hybrid/ && $6+0>14选择 (a) 包含wml-os-rt-hybrid且 (b) 具有大于 14 的第六个字段的所有行。然后我们可以像在第一个命令中那样打印,或者像在第二个命令中那样运行系统命令。

我们在将其与 14 比较之前添加零$6。我们这样做是因为它告诉awk$6其视为一个数字,以便比较是数字而不是词法。

请注意,awk 命令消除了对grep进程的需要。这使得生成的命令更高效(创建的进程更少)和更简洁。

于 2020-07-17T18:49:00.113 回答