実行中のカスター内のすべてのジョブを削除できます
kubectl delete jobs --all
しかし、ジョブは次々と削除されます(これはかなり遅いです(約200のジョブの場合、私はこの質問を書く時間があり、実行さえされていませんでした)。
より速いアプローチはありますか?
私は削除するためのスクリプトが非常に高速でした:
$ 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
このbashコマンドのエイリアスを設定する方が少し簡単です:
kubectl delete jobs `kubectl get jobs -o custom-columns=:.metadata.name`
CronJob
を使用していて、それらがすぐに蓄積されている場合は、 ドキュメント で説明されているジョブ履歴の制限を構成することで、kubernetesにそれらを自動的に削除させることができます。これはバージョン1.6以降で有効です。
...
spec:
...
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
私はこのスクリプトを使用します。高速ですが、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
私にとって最良の方法は(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
_よりも高速で、進行状況バーがあり、一部のジョブがまだ実行されているときに使用できます。
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)
Kubectlバルク(krewのバルクアクション)プラグインは便利な場合があります。これにより、選択したリソースに対する一括操作が可能になります。これは、ジョブを削除するためのコマンドです 'kubectl bulk jobs delete'
詳細は https://github.com/emreodabas/kubectl-plugins/blob/master/README.md#kubectl-bulk-aka-bulk-action で確認できます
これは私にとって本当にうまくいきます:
kubectl delete jobs $(kubectl get jobs -o custom-columns=:.metadata.name)
kubectl delete jobs --all --cascade=false
は高速ですが、ポッドなどの関連リソースは削除されません
たぶん、kubectl delete jobs
はまた、一度に1つのジョブに対してクエリを実行します。Norbertvan Nobelenが示唆するように、より高速な結果が得られる可能性がありますが、大きな違いが生じます。