Написать пост

Пример создания домашнего микрокластера minicube

Аватарка пользователя Катя Горина

Backend-разработчик рассказал как создать домашний микрокластер minicube на OS Windows без привлечения сторонних виртуальных машин.

Система Docker призвана решить ряд проблем, возникающих при использовании виртуальных машин, например, поглощения вычислительных ресурсов. Она прочно вошла в обиход многих разработчиков программного обеспечения, инженеров DevOps.

Появившаяся в 2008 году компания Docker (или dotCloud, как она тогда именовалась), воплотила в своей разработке лучшие моменты системы LXC (Linux Containers).

Благодаря системе Docker можно в два щелчка локально разворачивать необходимые для разработки базы данных, тестировать собственные микросервисные модули, объединять их в сеть и даже связывать сети между собой через глобальную паутину. Работать с Docker в OS Linux – одно удовольствие.

Например, команда:

Пример создания домашнего микрокластера minicube 1

создаёт рабочий контейнер базы данных MariaDB, доступ к которой можно осуществлять через порт 3306. Так же легко объединять контейнеры в сеть.

В результате мы имеем запущенный изолированный контейнер на основе скачанного образа MariaDB, работающий на определенном порте и потребляющий ровно столько ресурсов, сколько необходимо для работы БД в конкретный момент времени. Просто, удобно, продуктивно.

На сайте Docker подробно описано, как установить последнюю версию для различных операционных систем. В Linux — добавить себе нужный репозиторий с ключом, добавить пользователя в группу Docker, чтобы не дёргать каждый раз sudo, и установить контейнеризатор.

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

Разворачивать у себя локально настоящий кластер будет затратно по ресурсам и отнимет много времени на настройку и изучение принципов работы.

К счастью, есть интересное решение, описание к которому я почерпнул в книге Марко Лукши «Kubernetes in Action». Это – одноузловой кластер Minikube. Однако есть две проблемы:

  • не описано, как его устанавливать в Windows;
  • указано, что для работы микрокластера нужен VirtualBox.

Ставить виртуальную машину для использования Docker-контейнеров и кластера в OS Windows уже тянет на overhead.

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

Если «загуглить», то можно найти интересное решение. Предлагаю его рассмотреть. Я Docker-контейнеры в Windows использую теперь именно так.

Буквально пара слов об объекте исследования. Существует множество систем оркестрации контейнеров. Среди них есть система Kubernetes. Сама система довольно интересна, подробнее о ней можно почитать, например, здесь. В частности, Kubernetes предлагает одноузловой микрокластер под названием Minikube.

Чем он интересен? Тем, что позволяет разворачивать на компьютере нечто вроде продуктового кластера из одного узла, поднимать в нем контейнеры, мониторить их через встроенный Dashboard, следить за жизненным циклом, автоматически переподнимать и так далее. И всё это — в рамках локальной разработки.

Решение использовать такой одноузловый кластер, учитывая всё вышесказанное, выглядит интересно. Проведем процесс инсталляции и проверим результат.

  • Первое, что необходимо сделать — скачать стандартный инструментарий Kubernetes kubectl. Заходим по ссылке, скачиваем exe-файл. Это инструмент командной работы с нашим будущим кластером.
  • Второе — скачать инсталлятор самого Minikube по ссылке и устанавливаем.
  • Третье — запустить кластер локально.

Это не займёт много времени.

Тут стоит на минуту отвлечься и сказать несколько слов о том, как стартует кластер. Для запуска ему нужен драйвер. Драйверов он поддерживает множество (рис.1).

Пример создания домашнего микрокластера minicube 2
Рисунок 1. Поддерживаемые драйверы
Пример создания домашнего микрокластера minicube 3
Рисунок 2. Используемая OS в примере

Ни VirtualBox-VM, ни VMware-VM, ни Docker-VM не подходят, так как для них нужно устанавливать виртуальную машину. Остаётся только Hyper-V, он уже встроен в Windows. Поддержка этой технологии началась ещё с Windows 8 Pro, однако в полной мере ееёразвернули «из коробки» лишь в Windows 10 Pro и выше. В данном примере взята Windows 8.1 Pro (рис.2).

Перед запуском необходимо убедиться, что в системе активирован Hyper-V (рис.3):

Пример создания домашнего микрокластера minicube 4

В Hyper-V-менеджере создаем внешний виртуальный коммутатор на базе встроенной сетевой карты (у меня в системе их две + Wifi адаптер) (рис.4):

Пример создания домашнего микрокластера minicube 5

Коммутатор необходим микрокластеру для запуска. Стоит отметить, что в Windows 10 создавать коммутатор мне не пришлось, заработало на «default»-коммутаторе.

Кластер запускается следующей командой в PowerShall от имени администратора (рис.5):

Пример создания домашнего микрокластера minicube 6

Где: ключ –driver задает драйвер управления, –hyperv-use-external-switch принуждает использовать внешний виртуальный коммутатор, а –hyperv-external-adapter задаёт адаптер внешнего коммутатора (в данном случае это встроенная сетевая карта #2). Также на слайде виден создаваемый кластер, обозначенный в секции Virtual Machines с именем minikube.

После окончания старта у нас имеется поднятый одноузловой кластер, в котором можно проводить развёртывание (development) любых docker-контейнеров (рис.6).

Пример создания домашнего микрокластера minicube 7

На слайдах можно заметить, что при подъёме кластера выкидывается ошибка на привилегии. Это проблема Windows 8.1. В десятке подобной проблемы не наблюдается. По этой причине применен флаг игнорирования привилегий –force

Проверим, что развёрнутый кластер откликается (рис.7):

Пример создания домашнего микрокластера minicube 8

Чтобы остановить кластер, вызываем stop (рис.8):

Пример создания домашнего микрокластера minicube 9

Чтобы запустить – start (опять же с ключом –force в моем случае) (рис.9):

Пример создания домашнего микрокластера minicube 10

Создать Pod (Pod — это группа из одного или нескольких контейнеров приложения и совместно используемых ресурсов для этих контейнеров) в кластере проще простого. Необходимо сделать развёртывание (Deployment) и создать под это развёртывание сервис (Service). При необходимости можно создать переменную, например, в начале статьи была приведена команда создания контейнера MariaDB. Воспроизведём её в созданном кластере (рис.10):

Пример создания домашнего микрокластера minicube 11

Что я сделал:

  • создано развёртывание образа MariaDB с именем mariadb-server;
  • задана переменная окружения MARIADB_ROOT_PASSWORD;
  • создан сервис для прокидывания порта 3306 с именем mariadb-local и типом NodePort (есть ещё 3 типа);
  • запрошена информация о созданном Pod.

Стоит отметить, что Pod поднимается не сразу, необходима пара минут, чтобы все собралось и «взлетело» (рис.11).

Пример создания домашнего микрокластера minicube 12

Посмотрим на дашборд кластера. Он открывается в браузере по умолчанию. В нём много различной информации о том, какие Pod’ы запущены, сколько существует развёртываний и так далее (рис.12).

Пример создания домашнего микрокластера minicube 13

Убедимся, что развёрнутая база данных доступна извне для использования в разработке. Запросим информацию о развёрнутом сервисе у кластера (рис.13, 14).

Пример создания домашнего микрокластера minicube 14
Пример создания домашнего микрокластера minicube 15

Сервис наружу прокинул другой порт. Если требуется именно 3306, то нужен другой тип сервиса, например, LoadBalancer.

В итоге удалось реализовать локальный микрокластер в OS Windows без привлечения сторонних виртуальных машин. В качестве основы задействована аппаратная виртуализация на базе технологии Hyper-V, являющаяся компонентом OS Windows 8.1-10 версий Pro и выше и не требующая установки. Полученная конфигурация позволяет проводить испытания контейнеров в условиях продуктовой кластеризации, пусть и на несколько примитивном уровне.

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

Спасибо.

Следите за новыми постами
Следите за новыми постами по любимым темам
4К открытий4К показов