是否可以根据创建时间或年龄删除kubernetes中的POD?示例:我想删除所有超过1天的POD。这些POD是孤立的,因此不会创建新的POD。
anauzrmj1#
此命令将删除所有超过一天的POD:
kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}} {{.metadata.creationTimestamp}}{{"\n"}}{{end}}' | awk '$2 <= "'$(date -d 'yesterday' -Ins --utc | sed 's/+0000/Z/')'" { print $1 }' | xargs --no-run-if-empty kubectl delete pod
此命令将删除所有超过4小时的POD:
kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}} {{.metadata.creationTimestamp}}{{"\n"}}{{end}}' | awk '$2 <= "'$(date -d'now-4 hours' -Ins --utc | sed 's/+0000/Z/')'" { print $1 }' | xargs --no-run-if-empty kubectl delete pod
tmb3ates2#
对于awk,我们可以直接在AGE($5,第5列)列上执行正则表达式[0-9]+d,然后打印相应的NAME($1,第一列)列
awk
AGE
[0-9]+d
NAME
kubectl delete pod $(kubectl get pod | awk 'match($5,/[0-9]+d/) {print $1}')
先测试一下,看看匹配的是什么:
kubectl get pod | awk 'match($5,/[0-9]+d/) {print $0}'
$0表示所有列
$0
ki0zmccv3#
您可以添加一个liveness probe来跟踪pod存活的时间,并在它长到一定时间时将其杀死。
pbossiut4#
修改为在Mac上工作:
# try the gnu versions: gxargs brew install findutils coreutils kubectl get pods -o go-template -n gui2 --template '{{range .items}}{{.metadata.name}} {{.metadata.creationTimestamp}}{{"\n"}}{{end}}' | awk '$2 <= "'$(gdate -d '21 days ago' -Ins --utc | sed 's/+0000/Z/')'" { print $1 }' | gxargs --no-run-if-empty kubectl delete pod
7qhs6swi5#
下面是使用kubectl、jq和xargs的替代答案。它可以在Mac上本地运行,但我也在运行debian-slim的Kubernetes cronjob中使用它,所以我认为它可以在Mac和Linux上运行。时间以秒为单位设置(此处86400 s表示1天)。
kubectl
jq
xargs
kubectl get pod -o json | jq -r --argjson timestamp 86400 '.items[] | select (.metadata.creationTimestamp | sub("\\..*";"Z") | sub("\\s";"T") | fromdate < now - $timestamp).metadata.name' | xargs -r -L1 kubectl delete pod ;
dbf7pr2w6#
下面是上面dansl1982的答案的一个变体,它将删除所有命名空间中具有特定标签的所有pod。
kubectl get pods -A -l app=my-api -o go-template --template '{{range .items}}{{.metadata.namespace}} {{.metadata.name}} {{.metadata.creationTimestamp}}{{"\n"}}{{end}}' | awk '$3 <= "'$(date -d'now-4 hours' -Ins --utc | sed 's/+0000/Z/')'" { print $1 " " $2 }' | xargs -L 1 --no-run-if-empty kubectl delete pod -n $1 $2
vohkndzv7#
这里是另一个答案,当get pods和.metadata.creationTimestamp过滤器显示自定义字段
get pods
.metadata.creationTimestamp
kubectl delete pod -n foo $(kubectl get pods -n foo --field-selector=status.phase=Failed -o=custom-columns=NAME:.metadata.name,AGE:.metadata.creationTimestamp --no-headers=true --sort-by=.metadata.creationTimestamp | awk '$2 <= "'$(gdate -d '10 days ago' -Ins | sed 's/+0000/Z/')'" { print $1 }')
基于上述命令,-o=custom-columns=NAME:已用于自定义列。
-o=custom-columns=NAME:
7条答案
按热度按时间anauzrmj1#
此命令将删除所有超过一天的POD:
此命令将删除所有超过4小时的POD:
tmb3ates2#
对于
awk
,我们可以直接在AGE
($5,第5列)列上执行正则表达式[0-9]+d
,然后打印相应的NAME
($1,第一列)列先测试一下,看看匹配的是什么:
$0
表示所有列ki0zmccv3#
您可以添加一个liveness probe来跟踪pod存活的时间,并在它长到一定时间时将其杀死。
pbossiut4#
修改为在Mac上工作:
7qhs6swi5#
下面是使用
kubectl
、jq
和xargs
的替代答案。它可以在Mac上本地运行,但我也在运行debian-slim的Kubernetes cronjob中使用它,所以我认为它可以在Mac和Linux上运行。
时间以秒为单位设置(此处86400 s表示1天)。
dbf7pr2w6#
下面是上面dansl1982的答案的一个变体,它将删除所有命名空间中具有特定标签的所有pod。
vohkndzv7#
这里是另一个答案,当
get pods
和.metadata.creationTimestamp
过滤器显示自定义字段基于上述命令,
-o=custom-columns=NAME:
已用于自定义列。