Kubernetes:如何根据年龄/创建时间删除POD

dddzy1tm  于 2023-03-29  发布在  Kubernetes
关注(0)|答案(7)|浏览(186)

是否可以根据创建时间或年龄删除kubernetes中的POD?
示例:我想删除所有超过1天的POD。这些POD是孤立的,因此不会创建新的POD。

anauzrmj

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
tmb3ates

tmb3ates2#

对于awk,我们可以直接在AGE($5,第5列)列上执行正则表达式[0-9]+d,然后打印相应的NAME($1,第一列)列

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表示所有列

ki0zmccv

ki0zmccv3#

您可以添加一个liveness probe来跟踪pod存活的时间,并在它长到一定时间时将其杀死。

pbossiut

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
7qhs6swi

7qhs6swi5#

下面是使用kubectljqxargs的替代答案。
它可以在Mac上本地运行,但我也在运行debian-slim的Kubernetes cronjob中使用它,所以我认为它可以在Mac和Linux上运行。
时间以秒为单位设置(此处86400 s表示1天)。

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 ;
dbf7pr2w

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
vohkndzv

vohkndzv7#

这里是另一个答案,当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:已用于自定义列。

相关问题