-
Notifications
You must be signed in to change notification settings - Fork 0
kubernetes
Для управления сервисами используем kubernetes.
- Собираем и стартуем сервис (kubernetes service), c которым позже ассоциируются сервисы вашего приложения.
- Собираем image с версией. (про версионирование ниже)
- Создаём pod для инстанса сервиса.
Версионирование сейчас представлено достаточно топорно. В идеале, дальше убрать версионирование и перейти на image digest, однако я не нашёл способа посчитать его локально (без pull образа) и документация kubernetes пока не сильно богата на этот счёт. Поэтому на данный момент добавляется файлик VERSION с числом, которое инкрементируется make-ом. можно также собрать образ без инкрементации версии, но возникнут проблемы связанные с kubernetes. Версия была добавлена для более простого и "правильного" обновления образов на подах. Т.к. тэг latest для применяемых изображений - не лучшая практика. Также у нас появляется возможность обновить текущий образ на поде, просто указав новую версию для него, что также реализовано в make.
- mongo\rabbit устанавливаются через helm. Команды также добавлены в makefile/
- у нас есть service-discovery реализованый через dns. т.е. каждый созданный kubernetes servive доступен по собственному имени. (mongo и rabbit в том числе)
Каждый сервис может полностью управляться из собственного makefile. Makefile сделаны однотипно
start: # запуск "наживую" в virtualenv на машине
start_4_docker: # команда запуска для docker без virtualenv
stop: # остановка сервиса
build: # сборка зависимостей (protobuf ) и т.д.
docker_stop: # остановка контейнера докер
docker_container_remove: # удаление контейнера докер
docker_run_container: # запуск контейнера докер
docker_build: # сборка контейнера докер с инкрементом версии
docker_build_curr: # сборка контейнера докер без инкремента версии
docker_run: # остановка текущего контейнера и запуск нового
kubernetes_service: # создание сервиса kubernetes
kubernetes_deployment: # создание kubernetes deploiment (pod)
kubernetes_deployment_remove: # удаление kubernetes deploiment (pod)
kubernetes_service_remove: # удаление сервиса kubernetes
version_file_increment: # инкрементимм счётчик версий
kubernetes_buildnload: # собираем новый образ с инкрементом счётчика и запускаем его на pod
kubernetes_update_image: # выкатить текущую версию image на kubernetes
Для локальных машин, можно использовать Minikube ноду. Minikube позволяет использовать kubernetes у вас на машине. ВАЖНОЕ ЗАМЕЧАНИЕ У Minikube свой docker service и перед работай с ним, надо переключиться на этот сервис командой
eval $(minikube docker-env)
из make-ов это переключение было выпилено и оставлено только в комментариях к главному makefile. Т.е. если вы что либо хотите сделать с кластером minikube вы должны сначала выполнить эту команду eval $(minikube docker-env)
.