什么是运行预定作业的最佳方法

问题描述 投票:0回答:1

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

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

您是否有更好的解决方案?

谢谢

cron jobs
1个回答
1
投票

您的问题有多个方面,有几种解决方法,我将向您简要介绍从何开始。

Pythonic-way

您可以部署芹菜工人,该工人将处理计划的工作。您可以查看有关如何在python中执行操作的celery文档: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

© www.soinside.com 2019 - 2024. All rights reserved.