Каков наилучший способ выполнить запланированное задание - PullRequest
0 голосов
/ 10 января 2020

У меня есть проект, который состоит из двух частей: первая - Flask Api, а вторая - сценарий, который должен быть запланирован. Приложение Flask обслуживается через изображение docker, которое запускается в Openshift.

Моя проблема в том, где мне запланировать второй сценарий. У меня есть доступ к Gitlab CI / CD, но это не совсем его цель. Создание образа docker и запуск его в Openshift также невозможны, поскольку он будет выполняться больше, чем необходимо, если количество модулей превышает 1. Единственный вариант, о котором я думаю, это просто использовать обычный сервер с cron.

Возможно, у вас есть лучшее решение?

Спасибо

1 Ответ

1 голос
/ 10 января 2020

Есть несколько аспектов вашего вопроса и несколько способов сделать это, я дам вам краткую информацию о том, с чего начать.

Pythoni c -way

Вы можете развернуть работника сельдерея, который будет выполнять запланированные задания. Вы можете посмотреть документацию по сельдерею о том, как это сделать, в python: https://docs.celeryproject.org/en/latest/userguide/workers.html

Вы, вероятно, можете получить gr asp о том, как расширить развертывание для поддержки сельдерея. с эта статья на dev.to , которая показывает полное развертывание сельдерея:

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-way

В Kubernetes (Openshift - это дистрибутив Kubernetes) - вы можете создать cronjob, который будет выполнять заданную задачу c по расписанию, подобную этой:

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 .

Cloud way

Вы также можете использовать безсерверную платформу, например, AWS Lambda для выполнения запланированного задания. Самое замечательное в AWS Lambda - это то, что их бесплатного уровня будет более чем достаточно для вашего варианта использования.

См. AWS пример кода здесь

...