[英]How to delete completed kubernetes pod?
我在 kubernetes 中有一堆已完成(成功或不成功)的 pod,我想清理kubectl get pods
的輸出。 這是我在運行kubectl get pods
時看到的:
NAME READY STATUS RESTARTS AGE
intent-insights-aws-org-73-ingest-391c9384 0/1 ImagePullBackOff 0 8d
intent-postgres-f6dfcddcc-5qwl7 1/1 Running 0 23h
redis-scheduler-dev-master-0 1/1 Running 0 10h
redis-scheduler-dev-metrics-85b45bbcc7-ch24g 1/1 Running 0 6d
redis-scheduler-dev-slave-74c7cbb557-dmvfg 1/1 Running 0 10h
redis-scheduler-dev-slave-74c7cbb557-jhqwx 1/1 Running 0 5d
scheduler-5f48b845b6-d5p4s 2/2 Running 0 36m
snapshot-169-5af87b54 0/1 Completed 0 20m
snapshot-169-8705f77c 0/1 Completed 0 1h
snapshot-169-be6f4774 0/1 Completed 0 1h
snapshot-169-ce9a8946 0/1 Completed 0 1h
snapshot-169-d3099b06 0/1 ImagePullBackOff 0 24m
snapshot-204-50714c88 0/1 Completed 0 21m
snapshot-204-7c86df5a 0/1 Completed 0 1h
snapshot-204-87f35e36 0/1 ImagePullBackOff 0 26m
snapshot-204-b3a4c292 0/1 Completed 0 1h
snapshot-204-c3d90db6 0/1 Completed 0 1h
snapshot-245-3c9a7226 0/1 ImagePullBackOff 0 28m
snapshot-245-45a907a0 0/1 Completed 0 21m
snapshot-245-71911b06 0/1 Completed 0 1h
snapshot-245-a8f5dd5e 0/1 Completed 0 1h
snapshot-245-b9132236 0/1 Completed 0 1h
snapshot-76-1e515338 0/1 Completed 0 22m
snapshot-76-4a7d9a30 0/1 Completed 0 1h
snapshot-76-9e168c9e 0/1 Completed 0 1h
snapshot-76-ae510372 0/1 Completed 0 1h
snapshot-76-f166eb18 0/1 ImagePullBackOff 0 30m
train-169-65f88cec 0/1 Error 0 20m
train-169-9c92f72a 0/1 Error 0 1h
train-169-c935fc84 0/1 Error 0 1h
train-169-d9593f80 0/1 Error 0 1h
train-204-70729e42 0/1 Error 0 20m
train-204-9203be3e 0/1 Error 0 1h
train-204-d3f2337c 0/1 Error 0 1h
train-204-e41a3e88 0/1 Error 0 1h
train-245-7b65d1f2 0/1 Error 0 19m
train-245-a7510d5a 0/1 Error 0 1h
train-245-debf763e 0/1 Error 0 1h
train-245-eec1908e 0/1 Error 0 1h
train-76-86381784 0/1 Completed 0 19m
train-76-b1fdc202 0/1 Error 0 1h
train-76-e972af06 0/1 Error 0 1h
train-76-f993c8d8 0/1 Completed 0 1h
webserver-7fc9c69f4d-mnrjj 2/2 Running 0 36m
worker-6997bf76bd-kvjx4 2/2 Running 0 25m
worker-6997bf76bd-prxbg 2/2 Running 0 36m
我想擺脫像train-204-d3f2337c
這樣的豆莢。 我怎樣才能做到這一點?
現在,您可以更輕松地執行此操作。
您可以通過以下方式列出所有已完成的 pod:
kubectl get pod --field-selector=status.phase==Succeeded
通過以下方式刪除所有已完成的 pod:
kubectl delete pod --field-selector=status.phase==Succeeded
並通過以下方式刪除所有錯誤的 pod:
kubectl delete pod --field-selector=status.phase==Failed
如果這個 pods 是由 CronJob 創建的,你可以使用spec.failedJobsHistoryLimit
和spec.successfulJobsHistoryLimit
例子:
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-cron-job
spec:
schedule: "*/10 * * * *"
failedJobsHistoryLimit: 1
successfulJobsHistoryLimit: 3
jobTemplate:
spec:
template:
...
你可以通過兩種方式做到這一點。
$ kubectl delete pod $(kubectl get pods | grep Completed | awk '{print $1}')
或者
$ kubectl get pods | grep Completed | awk '{print $1}' | xargs kubectl delete pod
兩種解決方案都可以完成這項工作。
如果您想刪除未運行的 pod,可以使用一個命令完成
kubectl get pods --field-selector=status.phase!=Running
更新了刪除 pod 的命令
kubectl delete pods --field-selector=status.phase!=Running
正如前面提到的答案,您可以使用以下命令:
kubectl delete pod --field-selector=status.phase=={{phase}}
要刪除某個“階段”中的 pod,仍然缺少的是對存在哪些階段的快速總結,因此“pod 階段”的有效值為:
待定、運行、成功、失敗、未知
在這種特定情況下刪除“錯誤”豆莢:
kubectl delete pod --field-selector=status.phase==Failed
這是一個單一的襯墊,它將刪除所有不處於Running
或Pending
狀態的 pod(請注意,如果一個 pod 名稱中有Running
或Pending
,它不會被這個襯墊刪除):
kubectl get pods --no-headers=true |grep -v "Running" | grep -v "Pending" | sed -E 's/([a-z0-9-]+).*/\1/g' | xargs kubectl delete pod
這是一個解釋:
Running
的 podPending
的 podxargs
按名稱刪除每個 pod 請注意,這並不能說明所有 pod 狀態。 例如,如果一個 pod 處於ContainerCreating
狀態,那么這個 liner 也會刪除該 pod。
干得好:
kubectl get pods --all-namespaces |grep -i completed|awk '{print "kubectl delete pod "$2" -n "$1}'|bash
您可以用 CrashLoopBackOff 或任何其他狀態替換完成...
您可以通過以下方式列出所有已完成的 pod:
kubectl get pod --field-selector=status.phase==Succeeded
並通過以下方式刪除所有已完成的 pod:
kubectl 刪除 pod --field-selector=status.phase==Succeeded
我認為pjincz 很好地處理了您關於手動刪除已完成的 pod 的問題。
但是,我在這里突然介紹了 Kubernetes 的一個新功能,它可以代表您自動刪除完成的 pod。 您應該只定義一個時間來自動清理已完成的作業,如下所示:
apiVersion: batch/v1
kind: Job
metadata:
name: remove-after-ttl
spec:
ttlSecondsAfterFinished: 86400
template:
...
這是一個刪除所有已終止、已完成、出錯等的 pod 的命令。
kubectl delete pods --field-selector status.phase=Failed -A --ignore-not-found=true
如果您使用的是搶占式 GKE 節點,您經常會看到這些 pod 掛在周圍。
這是我設置清理的自動化解決方案: https ://stackoverflow.com/a/72872547/4185100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.