我可以删除正在运行的custer中的所有作业
kubectl delete jobs --all
然而,作业被一个接一个地删除,这是非常缓慢的(约200个工作,我有时间写这个问题,甚至没有完成)。
有更快的方法吗?
答案 0 :(得分:10)
如果您正在使用CronJob
并且那些正在迅速堆积,您可以通过配置documentation中所述的作业历史记录限制,让kubernetes自动删除它们。从版本1.6开始,这是有效的。
...
spec:
...
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
答案 1 :(得分:6)
我有一个删除脚本,删除速度要快得多:
$ 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
$ 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
答案 2 :(得分:6)
为此bash命令设置别名要容易一些:
kubectl delete jobs `kubectl get jobs -o custom-columns=:.metadata.name`
答案 3 :(得分:2)
我使用这个脚本,它速度很快,但它可以丢弃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 :(得分:2)
对我来说最好的方法是(对于一天之前完成的工作):
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}'
用于一天以上的工作
-P
个并行进程
它比kubectl delete jobs --all
更快,带有进度条,您可以在某些作业仍在运行时使用它。
答案 5 :(得分:1)
使用GNU并行进行并行化
parallel --jobs=5 "echo {}; kubectl delete jobs {} -n core-services;" ::: $(kubectl get job -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}' -n core-services)
答案 6 :(得分:1)
kubectl get jobs -o custom-columns=:.metadata.name | grep 特定* | xargs kubectl 删除作业
kubectl get jobs -o custom-columns=:.metadata.name 为您提供作业名称列表 |然后你可以用正则表达式 grep 特定的你需要的 |然后xargs使用输出从列表中一一删除。
答案 7 :(得分:0)
可能没有其他方法可以同时删除所有工作,因为即使kubectl delete jobs
也一次查询一个工作,Norbert van Nobelen建议可能会得到更快的结果,但它会赚得多差。
答案 8 :(得分:0)
kubectl delete jobs --all --cascade=false
速度很快,但不会删除关联资源(例如Pod)
答案 9 :(得分:0)
Kubectl批量(krew上的批量操作)插件可能对您有用,它为您提供了对选定资源的批量操作。 这是删除作业的命令 'kubectl批量作业删除'
您可以在中查看详细信息 https://github.com/emreodabas/kubectl-plugins/blob/master/README.md#kubectl-bulk-aka-bulk-action
答案 10 :(得分:0)
这对我来说真的很好:
kubectl delete jobs $(kubectl get jobs -o custom-columns=:.metadata.name)