Skip to content

Latest commit

 

History

History
155 lines (96 loc) · 10.9 KB

HOWTO.rus.md

File metadata and controls

155 lines (96 loc) · 10.9 KB

Предварительная подготовка

Для запуска на MacOS требуется установить следующее ПО

brew cask install virtualbox

brew cask install vagrant

brew install ansible

Копируем проект с репозитория

git clone https://github.com/andrewnazarov/nomad-playground.git

Описание

Виртуальное окружение, созданное для тестирования управления контейнерами с ипользованием инструментов Hashicorp: Vagrant - для поднятия песочницы на локальной машине, Consul - для регистрации сервисов , Nomad - для управления Docker-контейнерами. Осуществлять provisioning будем с помощью Ansible.

В Vagrantfile сконфигурировано поднятие на локальной машине трех вирутальных машин.

  • Одна из них является Nomad-сервером/Consul-сервером. Рекомендуется их объединять в кластер из минимум 3-х машин. В продакшен среде желательно разделить роли Nomad и Consul сервера. Серверов можно делать любое количество, но для них будут отличаться настройки Nomad и Consul - провизионинг дополнительных серверов пока не реализован для упрощения картины, но это совсем не трудно.
  • Две другие вирутальные машины - наши рабочие ноды с Docker на борту (на все серверы ставится Docker и Docker-compose, последнее не обязательно). Нод можно делать любое количество, сколько позволяют ресурсы локальной машины.

На все сервера также устанавливается Dnsmasq, который дает возможность использовать данные машины как dns-резолверы, позволяющие юзать доменные имена Consul'а для доступа к сервисам или для общения между сервисами. Сервис, поднятый с помощью Nomad, регистрируется в Consul под доменным именем <имя_сервиса>.service.consul. Ноды регистрируются в Consul под именами <имя_сервера>.node.consul.

Также Consul осуществляет мониторинг доступности сервисов и дает возможность запускать кастомные проверки.

Среди сервисов у нас есть

  • tomcat для выполнения Java-приложения. В нашем случае я просто кладу в каталог tomcat готовый артефакт - простейшую страничку, собранную в war-файл. По идее, данный артифакт, а ещё лучше готовый контейнер должны быть результатом успешной CI/CD цепочки. Из контейнера наружу смотрит порт 8080.
  • mongodb. Из контейнера наружу смотрит порт 27017
  • cadvisor, системный сервис(при запуске задачи которого Nomad гарантированно развертывет его на каждой ноде), может использоваться дополнительно для мониторинга нод, наружу смотрит порт 8080.
  • microbot, простой и легкий сервис, взятый тут(https://github.com/dontrebootme/docker-microbot), с помощью которого я могу показать работу с Nomad - т.к. ресрсы моей системы очень ограничены, то мастабировать mongodb или tomcat мне проблематично.
  • fabio, системный сервис, представляющий собой классный прокси-сервер и load balancer, отлично работающий из коробки с Consul.

Все сервисы(кроме Fabio, который использует драйвер raw-exec) будут контейнеризированы, Nomad будет использовать драйвер docker.

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

Nomad позволяет деплоить новые версии сервисов или масштабировать без простоя в обслуживании и осуществлять rolling updates или blue/gren deployment.

Под виртуальные машины выделено по умолчанию довольно мало оперативной памяти. Желательно выделить больше, все зависит от возможностей локальной машины. Для этого в Vagrantfile достаточно отредактировать параметр v.memory.

Запуск

vagrant up

Некоторое время необходимо для поднятия вирутальных машин и устанавки на них необходимого программного обеспечения. Для настройки портов на нодах можно легко воспользоваться моей ролью ролью ansible-common или geerlingguy.firewall. Для этого необходимо всего лишь git clone <репозиторий с ролью> (или установить стороннюю роль через ansible-galaxy) и подключить её в файле site.yml(сейчас там закомметировано)

Итак, спустя некоторое время после vagrant up мы будем иметь 3 работающих вируальных машины, что можно проверить с помощью

vagrant status

Заходим по ssh на Nomad-сервер, всю работу будем выполнять с него.

vagrant ssh nomad-server1

Можно проверить, что на всех нодах работает Consul

consul members

а также то, что настроен Nomad, отображаются сведения о сервере и нодах

nomad server-members

nomad nodes-status

Переходим в папку, которая пробрасывается с локальной машины в вируталку

cd /vagrant

В этой папке лежат преднастроенные jobs для Nomad. Это файлики с расширением .nomad. Среди них есть системные jobs (fabio, cadvisor), при запуске такого job Nomad будет устанавливать их на каждую ноду, где есть Nomad агент.

Желательно, прежде чем деплоить новые сервисы, запустить на нодах задачу деплоя прокси-сервера Fabio

nomad run fabio.nomad

Статус развертывания можно смотреть с помощью

nomad status fabio

nomad alloc-status <alloc_ID>

Последняя команда также выводит информацию о потреблиемых ресурсах.

Если возникнут проблемы при инсталляции, то Nomad автоматически будет пытаться заново установить требуемое. Для Fabio мы резервируем два статических порта 9998 - для просмотра и изменения таблицы редиректора, 9999 - для проксирования.

То, что сервис зарегистрирован в Consul, а также состояние сервисов и нод, можно проверить через web-интерфейс. С локальной машины заходим в браузере:

http://10.100.200.11:8500 (можно использовать ip-адрес любого из виртуальных серверов)

Можно не ждать конца установки Fabio(но для обращения к сервисам он нам будет нужен).

Запускаем задачу по развертыванию сервиса

nomad run microbot.nomad

Параметром count = 2 задается количество инстансов сервиса, которые будут развернуты. Все они регистрируются в Consul. Контейнер вовне открывает порт обозначенный тут

port_map { http = 80 }

В Consul сервисы регистрируются с динамическими портами.

Для увеличения количества сервисов мы можем отредактировать параметр count = 7 и Nomad в дальнейшем сам распределит дополнительные 5 инстансов по серверам без перерыва в обслуживании.

nomad plan microbot.nomad

покажет изменения и отобразит номер с которым надо делать nomad run

nomad run -check-index <index> microbot.nomad

В нашей песочнице для обращения к сервису с локальной машины, нужно в качестве dns-сервера локальной машины прописать ip-адрес любой виртуальной машины. После чего через браузер

http://microbot.service.consul:9999

При обновлении страницы можно обратить внимание, что изменяется буквенно-цифровой код - это ID котейнера.

Для запуска приложения на tomcat можно выполнить.

nomad run tomcat.nomad

После поднятия сервиса обратиться к нему можно из браузера

http://tomcat.service.consul:9999

Если сделать nomad init, то Nomad создаст job файлик с сервисом redis по умолчанию. Можно вносить изменения в конфигурацию и запускать его описанным выше способом.