簡體   English   中英

如何刪除已完成的 Kubernetes pod?

[英]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.failedJobsHistoryLimitspec.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

這是一個單一的襯墊,它將刪除所有不處於RunningPending狀態的 pod(請注意,如果一個 pod 名稱中有RunningPending ,它不會被這個襯墊刪除):

kubectl get pods --no-headers=true |grep -v "Running" | grep -v "Pending" | sed -E 's/([a-z0-9-]+).*/\1/g' | xargs kubectl delete pod

這是一個解釋:

  1. 獲取沒有任何標題的所有 pod
  2. 過濾掉正在Running的 pod
  3. 過濾掉Pending的 pod
  4. 使用 sed 正則表達式提取 pod 的名稱
  5. 使用xargs按名稱刪除每個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM