【发布时间】:2021-09-12 23:00:46
【问题描述】:
【问题讨论】:
标签: linux bash shell kubernetes kubectl
【问题讨论】:
标签: linux bash shell kubernetes kubectl
您可以使用 awk 根据 STATUS==RUNNING 过滤 pod 名称。下面的代码将从$NAMESPACE 命名空间中删除所有(处于运行状态的)pod。
kubectl get pod -n $NAMESPACE|awk '$3=="Running"{print $1}'
例子:
for pod in $(kubectl get pod -n $NAMESPACE |awk '$3=="Running"{print $1}'); do
kubectl delete pod -n $NAMESPACE $pod
done
或
您可以使用jsonpath,
NAMESPACE=mynamespace
for pod in $(kubectl get pod -n $NAMESPACE -o jsonpath='{.items[?(@.status.phase=="Running")].metadata.name}{"\n"}'); do
kubectl delete pod -n $NAMESPACE "$pod"
done
注意:以上代码将导致删除$NAMESPACE 变量中的所有 pod。
示例:
kubectl get pod -n mynamespace
NAME READY STATUS RESTARTS AGE
foo-mh6j7 0/1 Completed 0 5d3h
nginx 1/1 Running 2 7d10h
mongo 2/2 Running 12 57d
busybox 1/1 Running 187 61d
jsonpath 查询打印所有处于Running 状态的 pod:
kubectl get pod -n mynamespace -o jsonpath='{.items[?(@.status.phase=="Running")].metadata.name}{"\n"}'
nginx mongo busybox
虽然您没有要求ready 状态,但可以使用以下查询列出处于就绪状态的 pod。
kubectl get pod -n mynamespace -o jsonpath='{range .items[*]}{.status.containerStatuses[*].ready.true}{.metadata.name}{ "\n"}{end}'
foo-mh6j7
nginx
mongo
busybox
同样,这可以通过grep 完成:
kubectl get pod -n $NAMESPACE |grep -P '\s+([1-9]+)\/\1\s+'
注意:任何一种解决方案都不会阻止pods 重生如果它们是通过replicaset 或deployment 或statefulset 等创建的。这意味着,它们将被删除并重新生成。
【讨论】:
您可以通过以下方式过滤和删除正在运行的 pod:
kubectl delete pods -n <NAMESPACE> --field-selector=status.phase=Running
【讨论】:
这是我为完成任务而制作的一个shellscript,
i=0 && for pod in $(kubectl get pods | grep 'Running')
do
if [ `expr $i % 5` == 0 ]
then kubectl delete pod $pod
fi
i=`expr $i + 1`
done
我发现当我们循环遍历 kubectl get pods | grep 'Running' 时,每 5 个单词就是一个 pod 名称。
所以我基本上编写了脚本以从循环中获取 每 5 个单词 并执行我想要的任何命令。
不过,这感觉还是一种幼稚的方法。欢迎分享更好的。
【讨论】: