【问题标题】:Cronjob of existing Pod现有 Pod 的 Cronjob
【发布时间】:2017-06-29 00:35:43
【问题描述】:

我有一个在 Openshift 3 上运行的 django 应用程序。我需要定期运行某些 manage.py 命令。在 Openshift 2 中我使用了 Cron 齿轮,现在在 Openshift 3 中我想使用 CronJob pod 类型。

我想为 cronjob 创建一个 pod,使用与 django 应用程序相同的源,但不公开它。

例如:

W1 - Django 应用程序 D1 - Postgres 数据库

M1 - 用于 manage.py 作业的 django 应用程序,作为 cronjob pod 运行。

感谢任何帮助。

【问题讨论】:

  • 刚试过 v3.6-alpha2 和同样的错误:(

标签: openshift openshift-origin openshift-enterprise


【解决方案1】:

您想使用计划的作业。

请注意,此时(OpenShift 3.5),您必须使用batch/v2alpha1 作为 API 版本。请注意显示旧版本标签的过时文档。

我不确定的是,当您使用 S2I 构建器构建应用程序并且想要使用相同的图像时,如何轻松引用与现有图像流相关联的图像。用于此的基本 Kubernetes 对象希望您从镜像注册表中引用镜像。因此,您需要通过查看图像流并手动复制图像注册表 IP 和图像详细信息来解决这个问题。


更新 1

见:

有关如何从 OpenShift 3.6 开始自动解析图像流名称的详细信息。该机制在 3.6 中仍处于 alpha 状态,但确实有效。

【讨论】:

  • 对,格雷厄姆,我如何获得与 OS2 中相同的功能一般意义上的工作。
  • 当您说“但这在一般意义上不起作用”时,您的意思感到困惑,以及您试图复制的 OS2 功能具体是什么。除了参考图像的问题外,计划的作业应该能够做同样的事情。如果您不想使用已经创建的应用程序中的图像,请使用oc new-build 设置特殊图像的构建。
  • 格雷厄姆,感谢您一直对此感兴趣。基本上,我只需要每天运行一些 django manage.py 命令,而我最终想要的是在另一个 pod 中使用的 OS3 生成的图像的副本。除非我对生成的图像使用整个 IP+路径+令牌,否则我找不到在 YAML 中引用它的简单方法,这似乎不是正确的方法,因为它非常特定于环境。理想情况下,如果我有一个名为 project/mydjangoapp:latest 的图像,我最多想指定它,但不能
  • 格雷厄姆,所以我比以前更接近了。有没有办法在 YAML 中不通过 IP 来引用本地注册表?我认为我遇到的问题是当我通过 /:latest 指定我的图像时,它试图从 Docker 中提取。
  • 所以,今天取得了重大进展,弄清楚如何实现 Cron 作业 JSON 文件,然后必须弄清楚它需要一个 APP_SCRIPT 变量,然后让 S2I 创建的图像使用这些参数运行它奏效了!我现在有一个 cron 作业,它运行并执行 python manage.py 并退出。很简单,但它做了我想要的。现在我正在尝试将作业部分集成到模板中我可以在创建时知道图像的名称
【解决方案2】:

我已经让它在 YAML 中指定图像名称,但随后尝试让它作为模板的一部分工作,但在尝试在此服务器上使用批处理/v1 版本时遇到错误

无法创建 cron 作业“djangomanage”。此服务器不支持种类 CronJob 的 API 版本 batch/v1。

我的模板代码是

  - apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: djangomanage
    spec:
      schedule: "*/5 * * * *"  
      jobTemplate:             
        spec:
          template:
            spec:
              containers:
              - name: djangomanage
                image: '${NAME}:latest'
                env:
                  - name: APP_SCRIPT
                    value: "/opt/app-root/src/cron.sh"
              restartPolicy: Never

CRON.SH

python /opt/app-root/src/manage.py 

【讨论】:

  • 尝试更改apiVersion。在您使用的集群中,它可能仍被标记为 beta 功能。见blog.openshift.com/openshift-jobs
  • @GrahamDumpleton 在这一点上,格雷厄姆,我没有看到通过模板导入这个 cronjob 的方法。我已经尝试了所有我知道的方法,但每次它都会抱怨 API / jobtype 版本。如果你能弄清楚这一点,那就太好了。我应该在源项目上提交问题吗?
  • 今天给我机会玩一下。不幸的是,实施大部分工作内容的人有几周的假期,我不能纠缠他们。
  • @GrahamDumpleton 明白了,非常感谢你。我认为它可能是操作系统 django 示例应用程序的重要部分,因为 cron 和 manage.py 扩展被大量使用。再次感谢
  • 所以需要使用batch/v2alpha1,如kubernetes.io/docs/concepts/workloads/controllers/cron-jobs所示,至少是正确的版本标签。
【解决方案3】:

你需要用这个更新第 1 行:

- apiVersion: batch/v1beta1

见以下链接: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#cronjob-v1beta1-batch

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 2021-06-16
    • 2019-07-15
    • 2021-05-16
    • 2020-05-18
    • 2021-11-08
    • 2021-12-08
    • 2019-07-31
    • 2021-07-19
    相关资源
    最近更新 更多