Skip to content
This repository has been archived by the owner on Nov 15, 2021. It is now read-only.

kubernetes

wolf1996 edited this page May 21, 2018 · 5 revisions

Kubernetes

Для управления сервисами используем kubernetes.

Сервис

Для выкладки сервиса.

  1. Собираем и стартуем сервис (kubernetes service), c которым позже ассоциируются сервисы вашего приложения.
  2. Собираем image с версией. (про версионирование ниже)
  3. Создаём pod для инстанса сервиса.

Версионирование

Версионирование сейчас представлено достаточно топорно. В идеале, дальше убрать версионирование и перейти на image digest, однако я не нашёл способа посчитать его локально (без pull образа) и документация kubernetes пока не сильно богата на этот счёт. Поэтому на данный момент добавляется файлик VERSION с числом, которое инкрементируется make-ом. можно также собрать образ без инкрементации версии, но возникнут проблемы связанные с kubernetes. Версия была добавлена для более простого и "правильного" обновления образов на подах. Т.к. тэг latest для применяемых изображений - не лучшая практика. Также у нас появляется возможность обновить текущий образ на поде, просто указав новую версию для него, что также реализовано в make.

Несколько технических деталей.

  1. mongo\rabbit устанавливаются через helm. Команды также добавлены в makefile/
  2. у нас есть service-discovery реализованый через dns. т.е. каждый созданный kubernetes servive доступен по собственному имени. (mongo и rabbit в том числе)

Makefile

Каждый сервис может полностью управляться из собственного 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 ноду. Minikube позволяет использовать kubernetes у вас на машине. ВАЖНОЕ ЗАМЕЧАНИЕ У Minikube свой docker service и перед работай с ним, надо переключиться на этот сервис командой

eval $(minikube docker-env)

из make-ов это переключение было выпилено и оставлено только в комментариях к главному makefile. Т.е. если вы что либо хотите сделать с кластером minikube вы должны сначала выполнить эту команду eval $(minikube docker-env).