Cronjob существующего пода

У меня есть приложение django, работающее на Openshift 3. Мне нужно регулярно запускать определенные команды manage.py. В Openshift 2 я использовал механизм Cron, а теперь в Openshift 3 я хочу использовать тип модуля CronJob.

Я хочу создать модуль для cronjob, использовать тот же источник, что и приложение django, но не раскрывать его.

Например:

W1 — приложение Django D1 — база данных Postgres

M1 — приложение django для заданий manage.py, запускаемое как модуль cronjob.

Любая помощь приветствуется.


person YoFlynn    schedule 29.06.2017    source источник
comment
Только что попробовал v3.6-alpha2 и та же ошибка :(   -  person YoFlynn    schedule 02.07.2017


Ответы (3)


Вы хотите использовать запланированное задание.

Обратите внимание, что в настоящее время (OpenShift 3.5) вы должны использовать batch/v2alpha1 в качестве версии API. Остерегайтесь устаревшей документации с метками более старых версий.

В чем я не уверен, так это в том, как вы можете легко ссылаться на изображение, связанное с существующим потоком изображений, созданным, когда вы использовали конструктор S2I для создания своего приложения, и вы хотите использовать тот же образ. Базовый объект Kubernetes для этого ожидает, что вы сошлетесь на образ из реестра образов. Таким образом, вам нужно будет решить это, просмотрев поток изображений и скопировав IP-адрес реестра изображений и сведения об изображении вручную.


ОБНОВЛЕНИЕ 1

Видеть:

для получения подробной информации о том, как из OpenShift 3.6 вы можете автоматически разрешать имя потока изображений. Этот механизм все еще находится в альфа-статусе версии 3.6, но работает.

person Graham Dumpleton    schedule 29.06.2017
comment
Итак, Грэм, как я могу получить ту же функциональность, что и в OS2? Я смог заставить задание CronJob работать с конкретной ссылкой на внутренний реестр и токен, но в общем смысле это не сработает. - person YoFlynn; 29.06.2017
comment
Смущен тем, что вы имеете в виду, когда говорите, что это не сработает в общем смысле, а также то, что конкретно в отношении функциональности OS2 вы пытаетесь воспроизвести. За исключением проблем, связанных со ссылкой на изображение, запланированное задание должно делать то же самое. Если вы не хотите использовать образ из уже созданного приложения, используйте oc new-build для настройки сборки специального образа. - person Graham Dumpleton; 29.06.2017
comment
Грэм, спасибо за ваш постоянный интерес к этому. По сути, мне просто нужно ежедневно запускать некоторые команды django manage.py, и в конечном итоге мне нужна копия сгенерированного изображения из OS3, используемого в другом модуле. Я не нахожу простого способа сослаться на это в моем YAML, если я не использую весь IP + путь + токен для сгенерированного изображения, и это не кажется правильным способом сделать это, поскольку это очень специфично для Окружающая среда. в идеале, если бы у меня было изображение с именем project/mydjangoapp:latest, я бы хотел указать это, но не могу - person YoFlynn; 29.06.2017
comment
По-видимому, в следующей версии OpenShift (3.6) могут быть изменения, которые упростят это. Все еще пытаюсь отследить, есть ли еще документация о том, как это будет работать. - person Graham Dumpleton; 30.06.2017
comment
Грэм, так что я ближе, чем раньше. Есть ли способ сослаться на локальный реестр не по IP в YAML? Я думаю, что проблема, с которой я сталкиваюсь, заключается в том, что когда я указываю свой образ с помощью ‹Project›/‹application›: последний, он пытается извлечь из Docker. - person YoFlynn; 30.06.2017
comment
Я не уверен на 100%, какое имя вы определенно можете использовать. Попробуйте docker-registry.default.svc.cluster.local. - person Graham Dumpleton; 30.06.2017
comment
Итак, сегодня мы добились значительного прогресса, выяснили, как реализовать JSON-файл задания Cron, затем должны были выяснить, что ему нужна переменная APP_SCRIPT, а затем позволить образу, созданному S2I, работать с этими параметрами, и это сработало! Теперь у меня есть задание cron, которое запускается, выполняет python manage.py и завершается. Простой, но он делает то, что я хочу. Теперь я пытаюсь интегрировать часть работы в шаблон, могу ли я знать во время создания имя изображения - person YoFlynn; 01.07.2017

Я заставил его работать с указанием имени изображения в YAML, но затем попытался заставить его работать как часть шаблона, но столкнулся с ошибкой при попытке использовать версию batch/v1 на этом сервере.

Не удается создать задание cron «djangomanage». Версия API batch/v1 для вида CronJob не поддерживается этим сервером.

Мой код шаблона

  - 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

КРОН.Ш

python /opt/app-root/src/manage.py 
person YoFlynn    schedule 02.07.2017
comment
Попробуйте изменить файл apiVersion. В используемом вами кластере она может быть помечена как бета-функция. См. blog.openshift.com/openshift-jobs. - person Graham Dumpleton; 03.07.2017
comment
@GrahamDumpleton На данный момент, Грэм, я не вижу способа импортировать это задание cron через шаблон. Я пробовал все, что знаю, но каждый раз он жалуется на версию API/типа задания. Если вы сможете это понять, будет здорово. Должен ли я подать заявку на исходный проект? - person YoFlynn; 05.07.2017
comment
Дайте мне шанс поиграть с ним сегодня. К сожалению, человек, который реализовал большую часть работы, находится в отпуске на несколько недель, и я не могу докучать ему. - person Graham Dumpleton; 06.07.2017
comment
@GrahamDumpleton Понял, и большое спасибо за это. Я думаю, что это может быть важной частью примера приложения django для ОС, поскольку cron и расширения manage.py активно используются. Спасибо еще раз - person YoFlynn; 06.07.2017
comment
Поэтому необходимо использовать batch/v2alpha1, как показано в kubernetes.io/docs/concepts/workloads. /controllers/cron-jobs По крайней мере, это правильная метка версии. - person Graham Dumpleton; 06.07.2017
comment
Kubernetes отслеживает прогресс CronJob до возможной версии v1 в Kubernetes 1.8: github.com/kubernetes/kubernetes/ вопросы/41039 - person Graham Dumpleton; 06.07.2017
comment
Спасибо Грэм! Я посмотрю сейчас. - person YoFlynn; 06.07.2017

вам нужно обновить строку 1 следующим образом:

- apiVersion: batch/v1beta1

см. ссылку ниже: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#cronjob-v1beta1-batch

person kat    schedule 18.08.2020