web-dev-qa-db-ja.com

Kubernetes-すべてのジョブを一括で削除します

実行中のカスター内のすべてのジョブを削除できます

kubectl delete jobs --all 

しかし、ジョブは次々と削除されます(これはかなり遅いです(約200のジョブの場合、私はこの質問を書く時間があり、実行さえされていませんでした)。

より速いアプローチはありますか?

18
Overdrivr

私は削除するためのスクリプトが非常に高速でした:

$ cat deljobs.sh 
set -x

for j in $(kubectl get jobs -o custom-columns=:.metadata.name)
do
    kubectl delete jobs $j &
done

そして、コマンドfor i in {1..200}; do ./jobs.sh; doneを使用したスクリプトに従って使用される200個のジョブを作成するには

$ cat jobs.sh 
kubectl run memhog-$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 8 | head -n 1)  --restart=OnFailure --record --image=derekwaynecarr/memhog --command -- memhog -r100 20m
11
surajd

このbashコマンドのエイリアスを設定する方が少し簡単です:

kubectl delete jobs `kubectl get jobs -o custom-columns=:.metadata.name`
19
jaydeland

CronJobを使用していて、それらがすぐに蓄積されている場合は、 ドキュメント で説明されているジョブ履歴の制限を構成することで、kubernetesにそれらを自動的に削除させることができます。これはバージョン1.6以降で有効です。

...
  spec:
    ...
    successfulJobsHistoryLimit: 3
    failedJobsHistoryLimit: 3
11
yasc

私はこのスクリプトを使用します。高速ですが、CPU(ジョブごとのプロセス)を破壊する可能性があります。sleepパラメーターはいつでも調整できます。

#!/usr/bin/env bash

echo "Deleting all jobs (in parallel - it can trash CPU)"

kubectl get jobs --all-namespaces | sed '1d' | awk '{ print $2, "--namespace", $1 }' | while read line; do
  echo "Running with: ${line}"
  kubectl delete jobs ${line} &
  sleep 0.05
done
4
Paweł Prażak

私にとって最良の方法は(1日以上前に完了したジョブの場合)です。

kubectl get jobs | grep 1/1 | gawk 'match($0, / ([0-9]*)h/, ary) { if(ary[1]>24) print $1}' | parallel -r --bar -P 32 kubectl delete jobs

完了したジョブの場合は_grep 1/1_

gawk 'match($0, / ([0-9]*)h/, ary) { if(ary[1]>24) print $1}' 1日以上前のジョブの場合

_-P_並列プロセスの数

_kubectl delete jobs --all_よりも高速で、進行状況バーがあり、一部のジョブがまだ実行されているときに使用できます。

2
FullMoon

GNU parallelを使用して並列化

parallel --jobs=5 "echo {}; kubectl delete jobs {} -n core-services;" ::: $(kubectl get job -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}'  -n core-services)
1
Vikas Kumar

Kubectlバルク(krewのバルクアクション)プラグインは便利な場合があります。これにより、選択したリソースに対する一括操作が可能になります。これは、ジョブを削除するためのコマンドです 'kubectl bulk jobs delete'

詳細は https://github.com/emreodabas/kubectl-plugins/blob/master/README.md#kubectl-bulk-aka-bulk-action で確認できます

0
Emre Odabaş

これは私にとって本当にうまくいきます:

kubectl delete jobs $(kubectl get jobs -o custom-columns=:.metadata.name)

0
Cizer Pereira

kubectl delete jobs --all --cascade=falseは高速ですが、ポッドなどの関連リソースは削除されません

https://github.com/kubernetes/kubernetes/issues/8598

0
Maximilian

たぶん、kubectl delete jobsはまた、一度に1つのジョブに対してクエリを実行します。Norbertvan Nobelenが示唆するように、より高速な結果が得られる可能性がありますが、大きな違いが生じます。

0
Suraj Narwade