【问题标题】:How can I trigger a Kubernetes Scheduled Job manually?如何手动触发 Kubernetes 计划作业?
【发布时间】:2017-03-17 01:19:22
【问题描述】:

我创建了一个Kubernetes Scheduled Job,它根据它的时间表每天运行两次。但是,我想手动触发它以进行测试。我该怎么做?

【问题讨论】:

    标签: scheduled-tasks kubernetes google-kubernetes-engine


    【解决方案1】:

    @jdf mentioned 的问题 #47538 现已关闭,现在可以这样做。可以在here 找到原始实现,但语法已更改。

    使用 kubectl v1.10.1+ 的命令是:

    kubectl create job --from=cronjob/<cronjob-name> <job-name>

    它似乎向后兼容旧集群,因为它在 v0.8.x 上对我有用。

    【讨论】:

    • 请务必检查您的 kubectl 版本,截至 2018 年 5 月 10 日,通过 Google Cloud SDK 安装的版本没有此命令可用。 gcloud components install kubectl 然后kubernetes.io/docs/tasks/tools/install-kubectl
    • 它也可以在 Openshift 中使用,甚至可以使用 3.11(只需将 kubectl 替换为 oc)。
    • .. 逆运算为:kubectl [oc] delete job <job-name>
    • 它不起作用,出现错误error: unknown object type *v1beta1.CronJob`> kubectl version Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.4", GitCommit: “b695d79d4f967c403a96986f1750a35eb75e75f1”,GitTreeState:“clean”,BuildDate:“2021-11-17T15:48:33Z”,GoVersion:“go1.16.10”,编译器:“gc”,平台:“darwin/amd64”}`
    【解决方案2】:

    您可以根据自己的 ScheduledJob 创建一个简单的作业。如果您已运行 ScheduledJob,则历史中有作业。

    kubectl get jobs
    
    NAME               DESIRED   SUCCESSFUL   AGE
    hello-1477281595   1         1            11m
    hello-1553106750   1         1            12m
    hello-1553237822   1         1            9m
    

    导出以下作业之一:

    kubectl get job hello-1477281595 -o yaml > my_job.yaml
    

    然后稍微编辑一下yaml,删除一些不必要的字段并手动运行:

    kubectl create -f my_job.yaml
    kubectl delete -f my_job.yaml
    

    【讨论】:

    • 只是关于“删除一些不必要的字段”的小补充。 Kubernetes 抱怨 *uid 字段,您可以通过此命令轻松删除它们 sed -i '/uid:.*/d' my_job.yaml
    • 历史中已经有工作的假设往往不成立。
    【解决方案3】:

    很遗憾,以上示例语法均不适用于 Google Kubernetes Engine (GCP)。此外,GKE 文档本身也是错误的。

    在 Kubernetes 1.10.6.gke-2 中,工作语法是:

    kubectl create job <your-new-job-name> --from=cronjob/<name-of-deployed-cron-job> -n <target namespace>
    

    【讨论】:

    • 很好地解决了 cron 作业弹性问题,谢谢!
    【解决方案4】:

    编辑 - 2018 年 7 月:请参阅 @pedro_sland 的 answer,因为此功能现已实施

    对于低于 v1.10.1 的旧版本 kubectl,我在下面的原始答案仍然正确

    ================================================ ==========================

    除了创建一个新工作(正如其他答案所建议的那样),目前没有办法做到这一点。现在可以在此处跟踪 kubernetes 中的功能请求:https://github.com/kubernetes/kubernetes/issues/47538

    【讨论】:

      【解决方案5】:

      在 k8s 仪表板的这个选项卡中,有一个选项可以手动触发 cron 作业

      【讨论】:

      • 太棒了!这对想要调试和玩 cronjobs 的 Minikube 用户(比如我)很有帮助:)
      【解决方案6】:

      为了方便起见,我创建了一个小型 cmd 实用程序,还可以暂停和取消暂停 cronjobs。

      https://github.com/iJanki/kubecron

      【讨论】:

        【解决方案7】:
        kubectl create job --from=cronjob/<cron-job-name> <job-name> -n <namespace>
        

        您可以随时使用kubectl delete job &lt;job-name&gt; -n &lt;namespace&gt;删除作业执行

        如果您想查看可用的玉米工作列表,请使用kubectl get cronjobs -n &lt;namespace&gt;

        【讨论】:

          【解决方案8】:

          如果您想测试作业,请从您的 Cron Job (ScheduledJob) 配置中创建一个 Job 配置并使用以下命令手动运行它:

          kubectl create -f ./job.yaml
          

          【讨论】:

            猜你喜欢
            • 2016-08-10
            • 1970-01-01
            • 2021-05-09
            • 1970-01-01
            • 2019-04-28
            • 1970-01-01
            • 2011-10-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多