我试图从所有命名空间中删除超过30天的Kubernetes驱逐pod,但命令抛出错误:
Error from server(NotFound): pods (xxxxxxxxxxxxx) not found
指令:
kubectl delete pod $(kubectl get pods --all-namespaces | grep Evicted | sed 's#d$##' | awk '$6 > 30 {print $2}')"
有什么想法吗?
我试图从所有命名空间中删除超过30天的Kubernetes驱逐pod,但命令抛出错误:
Error from server(NotFound): pods (xxxxxxxxxxxxx) not found
指令:
kubectl delete pod $(kubectl get pods --all-namespaces | grep Evicted | sed 's#d$##' | awk '$6 > 30 {print $2}')"
有什么想法吗?
2条答案
按热度按时间cwtwac6a1#
这假设
date
的GNU coreutils版本和一个类似bourne的shell:单行线:
更易读的格式:
详情:
onemonthago=$(date -u -d '-1 month' +"%FT%TZ");
以与kubectl返回的相同格式获取截止时间,并将其存储在shell变量中。然后kubectl获取所有失败的pod并输出我们需要进一步步骤的列。
然后,它被传递到一个while循环,该循环将字段读入shell变量。
然后
if
语句检查pod是否被逐出或由于其他原因失败(--field-selector
不支持status.reason
字段),以及它是否超过一个月。如果它符合该条件,则将其删除。(It可能可以优化它,以收集命名空间中所有pod的列表,并一次性使用xargs将其传递给最小数量的kubectl)(两种检查可以合并,或者在shell中,或者在AWK中)(用一个精心设计的AWK脚本替换整个while可能会产生最佳性能(收集每个名称空间要删除的pos列表,并运行/从
END
模式输出删除命令)xjreopfe2#
我认为这是由于当你列出了你列出所有的吊舱和删除所有这些吊舱
但命令
kubectl delete pod
未获取要从中删除特定pod的命名空间也许你可以试着用更好的方法简化它。