dmnBrest
@dmnBrest
Salesforce for money. Python, Go, Ruby for soul.

Как запустить процесс в отдельном Pod?

Предыстория вопроса.
Долго работал c Heroku и привык к некоторым специфичным фичам. Сейчас мигрируем на Google Cloud Platform с его GKE (Kubernetes) и стал вопрос найти аналог фиги из Heroku.

Мне надо запускать некоторые процессы (python скрипты) в контексте моего приложения. На хероку это делаетс так:

heroku run bash --app my-app

Что делает Heroku, он поднимает ОТДЕЛЬНЫЙ dyno (аналог Pod) без запуска самого приложения (аналог EXEC из Dockerfile) и предоставляет доступ к командной строке. Я могу запустить все что мне угодно и после выхода этой сессии dyno убивается. Очень удобная штука когда мне надо запускать какие-то скрипты в изолированном продакшен окружении, не затрагивая уже работающие dynos с самим web приложением. Также я могу запутить такой отдельный dyno запустить скрипт как detached что позволит оставить dyno работать до окончания выполнеия скрипта и потом умереть.
heroku run:detached --size=performance-m --app my-app -- \
	python my-very-long-running-script.py


На GKE/Kubernates не могу найти аналог. Все что смог это подключиться к уже работающему Pod
такой командой

kubectl exec -it my-pod-6679fc8544-xbmhf -- bash

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

Какие возможны решения?
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
kubectl run -it some_unique_name --image youre/image:tag --restart=Never --rm -- /bin/bash

С --rm pod будет удален после отключения от терминала или завершения другой команды, какая была вызвана вместо bash. Без него будет просто остановлен - полезно если вам нужны логи в кубе после завершения работы.

Так же обратите внимание на возможности Kubernetes - Job и CronJob, как более декларативный подход.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@killla
Подними рядом точно такой же деплоймент да и всё. Обзови как-нибудь dev-deployment. Енвы точно также прокинь из того же конфигмапа/секрета.
Если надо поменяй в конфигах базу на тестовую, например.
Если надо, чтоб джанга не запускалась, переопредели в темплейте command и arg с запуска джанги на баш.
Колхозить так по полному))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы