Начиная с версии 17.12 CE Edge, Docker for Mac поставляется вместе с Kubernetes. Теперь для создания локального Kubernetes кластера нет необходимости в использовании дополнительных инструментов, таких как Minikube. В качестве эксперимента, попробуем развернуть на кластере небольшой сервис и посмотрим, что из этого получится.
На момент написания статьи, у меня установлена самая последняя версия Docker for Mac - 18.02.0.
Для эксперимента, я написал простой генератор коротких ссылок на Go - brevity. Сервис разделен на 2 части: API для генерация коротких ссылок и их обработчик. Для хранения данных используется PostgreSQL.
Чтобы развернуть его и все необходимые зависимости, нам потребуется Helm - пакетный менеджер для Kubernetes, который заметно упрощает процесс развертывания и дальнейшей поддержки различных сервисов. Для его установки мы воспользуемся Homebrew:
После установки, нам нужно будет инициализировать Helm:
Если у вас настроен доступ к нескольких Kubernetes кластерам, то вам необходимо будет переключиться на локальный:
Подготовка завершена, теперь приступаем к установке необходимых сервисов. Первым делом устанавливаем PostgreSQL:
Helm позволяет переопределять значения по-умолчанию и тем самым настроить сервис под собственные нужды. Список сервисов, которые можно установить через Helm можно найти здесь - hub.kubeapps.com.
Теперь нам нужно удостовериться, что сервис установлен и работает корректно:
Сервис не запущен из-за ошибки. Чтобы узнать подробности, достаточно выполнить следующую команду:
Kubernetes не видит директорию, хотя она на самом деле есть. Оказалось, что Docker for Mac не понимает опцию subPath
в конфигурации PostgreSQL для Kubernetes. В Minikube тоже была такая проблема, но её уже исправили.
Для решения этой проблемы, нам понадобится отредактировать Deployment
для PostgreSQL:
И удалить следующую строчку:
Теперь, если мы еще раз посмотрим на список запущенных подов, то увидим, что ошибок нет и сервис запущен:
Далее, нам нужно создать БД для brevity. Сначала зайдем в контейнер:
Внутри контейнера запускаем psql
от имени пользователя postgres
и создаем БД:
Чтобы наше приложение было доступно из кластера, нам понадобится Ingress Controller. Для этих целей отлично подойдет nginx
:
Переходим к установке brevity. Склонируем проект и запустим команду helm install
, только в качестве аргумента передадим путь к заранее подготовленному чарту (пакеты в Helm называются чартами):
Проверяем, что все сервисы запущены:
Далее попробуем сгенерировать короткую ссылку, отправив POST запрос к API brevity:
Переходим по ней, чтобы удостовериться, что все работает. Так же мы можем посмотреть логи:
Как видно из логов, сервис успешно обработал короткую ссылку и перенаправил на страницу github.com/mgrachev. На этом можно закончить наш эксперимент.
В заключение скажу, что Docker for Mac с поддержкой Kubernetes меня порадовал. Достаточно в настройках поставить всего одну галочку и в твоем распоряжение будет полностью готовый к работе кластер с Kubernetes на борту. Из минусов отмечу, что это пока нестабильная версия и могут встречаться разного рода ошибки. Но даже сейчас, он вполне пригоден для локальной разработки и тестирования.