我有一个包含两个部分的项目:第一个是Flask Api,第二个是应该安排的脚本。Flask应用是通过在Openshift中运行的docker映像提供的。
我的问题是我应该在哪里安排第二个脚本。我可以访问Gitlab CI / CD,但这并不是真正的目的。也无法构建docker映像并在Openshift上运行它,因为如果pod大于1,它将运行超过所需次数。我唯一想到的选择就是使用带有cron的常规服务器。
您是否有更好的解决方案?
谢谢
您的问题有多个方面,有几种解决方法,我将向您简要介绍从何开始。
您可以部署芹菜工人,该工人将处理计划的工作。您可以查看有关如何在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中(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