Kubernetes pod отдых

Можно ли сказать Kubernetes, чтобы он просто выбросил мой текущий под и воссоздавал его заново каждые 48 часов? Есть ли какой-нибудь планировщик в Google Cloud Kubernetes? Или я могу просто так настроить свое развертывание? У меня есть приложение Node.js в контейнере с Docker, работающим внутри кластера Kubernetes на Google Cloud Platform. Заранее спасибо!

Зачем вам это нужно? Что происходит через 48 часов?

mbuechmann 10.09.2018 10:27

во-первых, если с вашим приложением что-то происходит каждые 48 часов, вам необходимо выяснить причину проблемы.

Konstantin Vustin 10.09.2018 12:26

Эй, @mbuechmann, эй, Константин, действительно, иногда моя капсула приземляется в странное состояние. Расследование продолжается, но пока будет работать механизм отдыха.

Nick Ponomar 11.09.2018 11:19
1
3
236
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы пробовали CronJobs?

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: your_app_name
            image: your_image
            args:
            - your
            - args
          restartPolicy: OnFailure

Это официальная документация Kubernetes под cron вакансии.

Также, вот редактор выражения расписания cron, который может быть полезен: crontab.guru.

Это просто копия официального документа. CronJobs только кажутся связанными, но это не дает реального решения заявленной проблемы.

mbuechmann 10.09.2018 10:32
Ответ принят как подходящий

Истинный «способ Kubernetes» решить эту проблему - это разработать ReadinessProbe / LivenessProbe для развертывания / statefulset / pod вашего приложения. Как только ваш Pod упадет, правильные датчики справятся с этим, и ваш Pod будет воссоздан полностью автоматически.

P.S: вы тот, кто знает ваше приложение лучше, чем кто-либо. Попытайтесь решить «проблемы каждые 48 часов», а затем проведите правильные исследования. Удачи!

Ссылка: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

Спасибо, @Konstantin! Это действительно элегантное решение!

Nick Ponomar 11.09.2018 11:17

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

  1. Выйдите из приложения node через 48 часов, то есть выйдите из кода, грязный способ, но это самый простой.
  2. Создайте cronjob, который запускается через 48 часов, и удалите все модули, созданные в рамках вашего развертывания.

Cronjob - не самое лучшее решение. Cronjob запускает любую задачу внутри нового модуля. Теперь этот модуль должен получить доступ к мастеру kubernetes, чтобы перезапустить другой модуль. Это должно быть возможно, но теперь вы должны обеспечить доступ из определенного модуля к мастеру со всеми последствиями для безопасности.

mbuechmann 11.09.2018 09:45

добавление разрешений не является такой большой проблемой, и если у вас отключен Rbac, не нужно указывать разрешения, просто отправляйте команды из одного модуля в другой без каких-либо ошибок. Я уже делаю это в проекте.

Talha Irfan 11.09.2018 09:57

А если у вас не включен rbac? Имейте в виду, что все эти решения являются обходным решением другой проблемы. Хотя второе решение может работать, оно добавляет много накладных расходов на всю вашу оркестровку. Ваше первое решение намного лучше. Обходной путь остается там, где возникла исходная проблема. Это программное решение программной проблемы.

mbuechmann 12.09.2018 09:47

ну да, поэтому я добавил оба решения в обзор.

Talha Irfan 12.09.2018 11:57

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