【问题标题】:Kubernetes - delete all jobs in bulkKubernetes - 批量删除所有作业
【发布时间】:2022-02-10 01:36:38
【问题描述】:

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

kubectl delete jobs --all 

但是,作业一个接一个地被删除,这非常慢(对于大约 200 个作业,我有时间写这个问题,但它甚至没有完成)。

有更快的方法吗?

【问题讨论】:

  • 您必须查询 api,从该查询创建一个列表,然后将所有命令作为后台作业运行。那应该更快(但是在测试之前你不会知道)

标签: kubernetes kubectl


【解决方案1】:

为这个 bash 命令设置别名要容易一些:

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

【讨论】:

    【解决方案2】:

    我有一个删除脚本,它的删除速度相当快:

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

    为了创建 200 个作业,请使用以下脚本和命令 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
    

    【讨论】:

    • 感谢您的回答,我会尽快尝试
    • 你可以做kubectl -n <namespace name> delete ...
    • & 和 >16k 作业它会杀死你的电脑
    • 如果要删除的作业太多,我会删除&,它确实更慢但更安全。但除此之外,这就是工作
    【解决方案3】:

    如果你正在使用CronJob,并且那些正在快速堆积,你可以通过配置documentation中描述的作业历史限制让kubernetes自动删除它们。从 1.6 版开始有效。

    ...
      spec:
        ...
        successfulJobsHistoryLimit: 3
        failedJobsHistoryLimit: 3
    

    【讨论】:

    • 谢谢!我正在“玩” cronjobs,并且已经积累了 17K+。删除所有这些是一种痛苦。经验教训:)
    • 请注意,限制有一些合理的默认值,即 3 个成功作业和 1 个失败作业。
    【解决方案4】:

    这对我来说非常有效:

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

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
    【解决方案5】:

    我使用这个脚本,它很快但它会浪费 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
    

    【讨论】:

      【解决方案6】:

      对我来说最好的方法是(对于超过一天的已完成工作):

      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 更快,有一个进度条,您可以在某些作业仍在运行时使用它。

      【讨论】:

        【解决方案7】:

        kubectl delete jobs --all --cascade=false 速度很快,但不会删除关联资源,例如 Pods

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

        【讨论】:

          【解决方案8】:

          使用 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)
          

          【讨论】:

            【解决方案9】:

            kubectl 获取工作 -o custom-columns=:.metadata.name | grep 特定* | xargs kubectl 删除作业

            kubectl get jobs -o custom-columns=:.metadata.name 为您提供作业名称列表 |然后你可以用 regexp | grep 具体你需要的然后 xargs 使用 output 从列表中一一删除。

            【讨论】:

            • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
            【解决方案10】:

            有一种更简单的方法:

            删除成功的作业:

            kubectl delete jobs --field-selector status.successful=1

            删除失败或长时间运行的作业:

            kubectl delete jobs --field-selector status.successful=0

            【讨论】:

              【解决方案11】:

              可能没有其他方法可以一次删除所有作业,因为即使kubectl delete jobs 也一次查询一项作业,Norbert van Nobelen 的建议可能会得到更快的结果,但会产生很大的不同。

              【讨论】:

                【解决方案12】:

                Kubectl bulk(krew 上的批量操作)插件可能对您有用,它为您提供对选定资源的批量操作。 这是删除作业的命令 'kubectl 批量作业删除'

                您可以在 https://github.com/emreodabas/kubectl-plugins/blob/master/README.md#kubectl-bulk-aka-bulk-action

                【讨论】:

                  猜你喜欢
                  • 2019-03-16
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-06-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-10-28
                  相关资源
                  最近更新 更多