【问题标题】:What is the best way to run a scheduled job运行计划作业的最佳方法是什么
【发布时间】:2020-01-10 16:00:58
【问题描述】:

我有一个项目,它包含两个部分:第一个是 Flask Api,第二个是应该安排的脚本。 Flask 应用程序通过在 Openshift 中运行的 docker 映像提供服务。

我的问题是我应该在哪里安排第二个脚本。我可以访问 Gitlab CI/CD,但这并不是它的真正目的。 构建一个 docker 镜像并在 Openshift 上运行它也是不可能的,因为如果 pod 超过 1 个,它将运行比需要更多的次数。 我想到的唯一选择就是使用带有 cron 的常规服务器。

你有更好的解决方案吗?

谢谢

【问题讨论】:

    标签: cron jobs


    【解决方案1】:

    你的问题有几个方面和几种方法,我会给你一些关于从哪里开始的简要信息。

    Python 方式

    您可以部署一个 celery worker 来处理预定的作业。您可以查看 celery 文档以了解如何在 python 中解决它:https://docs.celeryproject.org/en/latest/userguide/workers.html

    您可能可以从this article on dev.to 了解如何扩展您的部署以支持 celery,它显示了 celery 的完整部署:

    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      name: celery-worker
      labels:
        deployment: celery-worker
    spec:
      replicas: 1
      selector:
        matchLabels:
          pod: celery-worker
      template:
        metadata:
          labels:
            pod: celery-worker
        spec:
          containers:
            - name: celery-worker
              image: backend:11
              command: ["celery", "worker", "--app=backend.celery_app:app", "--loglevel=info"]
              env:
                - name: DJANGO_SETTINGS_MODULE
                  value: 'backend.settings.minikube'
    
                - name: SECRET_KEY
                  value: "my-secret-key"
    
                - name: POSTGRES_NAME
                  value: postgres
    
                - name: POSTGRES_USER
                  valueFrom:
                    secretKeyRef:
                      name: postgres-credentials
                      key: user
    
                - name: POSTGRES_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: postgres-credentials
                      key: password
    

    Kubernetes 方式

    在 Kubernetes 中(Openshift 是 Kubernetes 的一个发行版)——您可以创建一个 cronjob,它会按计划执行特定任务,类似于:

    kubectl run --generator=run-pod/v1 hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
    

    我从 Kubernetes docs 中提取的。

    云端方式

    您还可以使用无服务器平台,例如AWS Lambda 执行计划的作业。 AWS Lambda 很酷的一点是,它们的免费套餐对于您的用例来说绰绰有余。

    请参阅 AWS example code here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多