如何删除 Kubernetes 命名空间中的每个 Pod

Jay*_*kla 1 linux bash shell kubernetes kubectl

以这个场景为例:

在此输入图像描述

我想使用命令行自动删除每个正在运行的Pod ,而无需为每个 Pod 键入内容。kubectl delete pod <pod_name> -n <namespace>

P..*_*... 7

您可以awk根据 pod 名称来过滤 pod 名称STATUS==RUNNING。下面的代码将从命名空间中删除所有(处于运行状态)Pod $NAMESPACE

 kubectl  get pod -n $NAMESPACE|awk '$3=="Running"{print $1}'
Run Code Online (Sandbox Code Playgroud)

例子:

for pod in $(kubectl  get pod -n $NAMESPACE |awk '$3=="Running"{print $1}'); do
    kubectl delete pod -n $NAMESPACE $pod
done
Run Code Online (Sandbox Code Playgroud)

或者

您可以使用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
Run Code Online (Sandbox Code Playgroud)

注意:上面的代码将导致删除变量中的所有 pod $NAMESPACE

例子:

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
Run Code Online (Sandbox Code Playgroud)

jsonpath查询打印所有 Pod 的Running状态:

kubectl  get pod -n mynamespace -o jsonpath='{.items[?(@.status.phase=="Running")].metadata.name}{"\n"}'
nginx mongo busybox
Run Code Online (Sandbox Code Playgroud)

虽然您没有询问ready状态,但是可以使用以下查询来列出处于就绪状态的 Pod

kubectl  get pod -n mynamespace -o jsonpath='{range .items[*]}{.status.containerStatuses[*].ready.true}{.metadata.name}{ "\n"}{end}'
foo-mh6j7
nginx
mongo
busybox
Run Code Online (Sandbox Code Playgroud)

同样,这可以通过以下方式完成grep

kubectl get pod -n $NAMESPACE |grep -P '\s+([1-9]+)\/\1\s+'
Run Code Online (Sandbox Code Playgroud)

注意:如果它们是通过或 等创建的,则任何一个解决方案都不会阻止pods重生。这意味着它们将被删除并重生。replicasetdeploymentstatefulset


小智 5

您可以通过以下方式过滤和删除正在运行的 Pod:

kubectl delete pods -n <NAMESPACE> --field-selector=status.phase=Running
Run Code Online (Sandbox Code Playgroud)