Jay*_*kla 1 linux bash shell kubernetes kubectl
我想使用命令行自动删除每个正在运行的Pod ,而无需为每个 Pod 键入内容。kubectl delete pod <pod_name> -n <namespace>
您可以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)
| 归档时间: |
|
| 查看次数: |
6371 次 |
| 最近记录: |