Как выполнить двоичный файл и использовать спящий модуль через некоторое время вместе в kubernetes

У меня есть вариант использования, когда мой двоичный файл «./main» должен запускаться внутри модуля и останавливаться через некоторое время (90 секунд) перед запуском нового модуля объектом cronJob.

Но меня не смущает, как добавить и сон, и запустить мой двоичный файл в фоновом режиме вместе. Пожалуйста, предложите хороший подход к этому и извините меня за неправильный синтаксис.

Докерфайл

FROM golang:alpine
WORKDIR /app
COPY main /app
RUN  apk update && apk add bash
CMD  ["./main &"]

---
cronjob.yaml

apiVersion: batch/v1
kind: CronJob
metadata:
  name: cron
  namespace: test-cron
spec:
  schedule: "*/2 * * * *"
  concurrencyPolicy: Replace
  successfulJobsHistoryLimit: 0
  failedJobsHistoryLimit: 0
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          volumes:
          - name: log
            hostPath:
                path: /data/log/test-cron/
          containers:
            - name: test-cron
              image:  test-kafka-0.5
              command: ["sleep", "90"] // By adding this, the sleep command is working but my binary is not running inside my container.

как насчет добавления двух, например: команда: ["./main", "&&", "sleep", "90"]

faizan 07.12.2022 15:39

Да пробовал CMD ./main && sleep 90 но pod не спит 90сек.

Deepak Mourya 07.12.2022 16:23

Вы хотите, чтобы main убили через 90 секунд, или что должно произойти потом? Kubernetes CronJob планирует только целые минуты; связано ли планирование cron с 90-секундным тайм-аутом или просто с тем, как вы запускаете контейнер?

David Maze 08.12.2022 12:51

@DavidMaze, да, я просто хочу запустить свой основной двоичный файл, и после этого модуль должен быть убит через 90 секунд.

Deepak Mourya 08.12.2022 19:05
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
4
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Kubernetes есть встроенная поддержка уничтожения пода по истечении крайнего срока; вам не нужно пытаться реализовать это вручную.

В вашем Dockerfile настройте свой образ для нормального запуска программы. Не пытайтесь включить какую-либо опцию «сна» или «убить» и не пытайтесь запускать программу в фоновом режиме.

CMD ["./main"]

В спецификации работы вам нужно установить поле activeDeadlineSeconds:.

apiVersion: batch/v1
kind: CronJob
spec:
  jobTemplate:
    spec:
      activeDeadlineSeconds: 90  # <-- add
      template:
        spec:
          containers:
            - name: test-cron
              image:  test-kafka-0.5
              # do not override `command:`

Идентичный вариант существует на уровне Pod. Для вашего варианта использования это не имеет особого значения, но если задание запускает несколько модулей, тогда существует разница в том, имеет ли крайний срок каждый отдельный модуль или задание в целом.

Из вопроса видно, что вы пытаетесь запускать это задание каждые две минуты и не иметь двух одновременных его копий. Предполагая, что модуль создан и запускается быстро, это должно выполнить это. Если у вас есть причина полагать, что задание будет выполняться быстрее во второй раз, и вы просто хотите перезапустить его, возможно, вам не нужна установка CronJob.

Спасибо, это сработало так, как я хотел, я гнался за командой сна, но activeDeadlineSeconds — настоящий герой здесь. :)

Deepak Mourya 09.12.2022 14:05

Другие вопросы по теме