Kubernetes - 批量删除所有工作

时间:2017-04-28 08:10:23

标签: kubernetes kubectl

我可以删除正在运行的custer中的所有作业

kubectl delete jobs --all 

然而,作业被一个接一个地删除,这是非常缓慢的(约200个工作,我有时间写这个问题,甚至没有完成)。

有更快的方法吗?

11 个答案:

答案 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

创建在脚本后面使用的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

答案 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)

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

答案 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)