Короткий ответ: Да (прокрутите, чтобы закончить, чтобы узнать, или проверить Пример репо ).
Длинный ответ: читайте вместе, чтобы узнать!
Развертывание Kubernetes кажется довольно простым: все, что вам нужно, это всего лишь куча файлов YAML, и с помощью Kubectl
(Утилита командной строки Kubernetes) Вы получите свою службу в своем кластере Kubernetes.
Хотя развертывание одной услуги — это простая задача, как вы развертываете сотни микросервисов? В Soluto у нас более 100 живых микросервисов, и это число продолжает расти — поэтому мы начали думать о перемещении рабочей нагрузки на наш кластер Kubernetes, мы столкнулись с несколькими проблемами:
Развертывание Kubernetes является сложным, и есть много движущихся частей, которые вам нужно правильно настроить: POD Autoscaler, ресурсы POD, вход и т. Д. Эти части требуют некоторого опыта с тем, как работает Kubernetes, и неправильная настройка может вызвать проблемы в производстве. В идеале у нас будет способ упростить это, чтобы разработчики могли сосредоточиться на написании своего кода и меньше беспокоиться о развертывании.
Безопасность — еще одна проблема. Все услуги в производстве должны иметь определенные вещи, такие как безопасность транспортного уровня (TLS), которые не обязательно являются сложными, но, тем не менее, должны заботиться. Мы хотели бы предварительно сконфигурировать их, чтобы любое новое развертывание было обеспечено по умолчанию.
Поиск решения
Чтобы решить эти проблемы и ускорить и облегчить процесс усыновления, мы искали способ создать шаблон для Kubernetes. То, что любой разработчик сможет использовать, и потребует лишь нескольких параметров (например, изображение Docker Сервиса), чтобы поддержать и работать в производстве.
С другой стороны, нам нужно было быть осторожным, чтобы не скрывать слишком много — разработчики должны иметь возможность понять, что происходит, чтобы они могли решать проблемы производства. Мы должны были найти правильный уровень абстракции, который облегчает развертывание в Kubernetes, не скрывая слишком много деталей.
Имея это в виду, мы начали искать решение. Попробовав несколько вещей, мы нашли Хелм Анкет Хелм является менеджером пакетов для Kubernetes. Вы можете использовать его для установки любого приложения на свой кластер, и Helm позаботится о получении всех необходимых файлов конфигурации и установке их в кластере. Helm также поддерживает обновление развертывания, откатов и многих других классных функций. Каждый пакет Helm называется «диаграммой», а диаграммы хранятся в репозитории. С рулем, установка Mongodb , например, так же просто, как Хелм установить стабильную/монгодб
Анкет
Звучит как отличное решение! Мы можем определить диаграмму для каждого типа службы — например, для всех наших веб -API, которые будут обрабатывать такие вещи, как балансировщик и TLS нагрузки — и разработчику просто необходимо указать необходимые параметры, используя файлы конфигурации Helm.
Хелм: Посмотрим, как это делается
Чтобы использовать руль, нам сначала нужно Установите это (Helm имеет два компонента-клиент Helm, работающий на вашем компьютере и Tiller, компонент на стороне сервера, работающий на вашем кластере). Затем нам нужно создать диаграмму, просто используя эту команду Helm CLI: Хелм создать веб-апи
После запуска этой команды вы заметите создание новой папки под названием «Web-API». В этой папке вы найдете все знакомые файлы конфигурации Kubernetes: развертывание, служба, вход и т. Д. Теперь пришло время немного настроить: мы можем добавить Горизонтальный POD Autoscaler , Определите ресурсы по умолчанию, которые требуется POD, и, конечно, включите TLS по умолчанию. Все очень настраивается в зависимости от Перейти шаблон механизм Таким образом, все, что мы добавляем, может быть переопределено позже разработчиком, если конфигурация по умолчанию не работает по мере необходимости.
Итак, теперь у нас есть диаграмма — но как мы можем ее потреблять? Диаграмма должна существовать в Хелм репозиторий , который в основном представляет собой сервер с несколькими zip -архивами (которые представляют собой графики в репозитории) и один индексный файл, который потребляется CLI. Вы можете вручную настроить свою репо, используя любую службу хранения, например, Blob или AWS S3, но самый простой вариант — График музея Анкет
Музей диаграммы — это репозиторий руля с CRUD API для управления вашими диаграммами. Он поддерживает базовую аутентификацию, поэтому вы можете ограничить, кто может выдвинуть новые диаграммы в ваш репозиторий руля. Хелм не предоставляет какое-либо решение музея как услуга, поэтому вам придется бросить свое собственное-но он мертвы-просто, просто используя его Docker Image .
Теперь мы можем создать конвейер CI/CD для нашей веб-диаграммы, чтобы облегчить процесс его изменения:-запустить некоторые тесты, чтобы убедиться, что новая версия не сломана. Я обсужу, как в следующем абзаце. — Упакуйте новую диаграмму, используя Helm CLI. — Толкните новый пакет к нашему экземпляру музея в таблице, используя API музея диаграммы.
Тестируя это
Теперь наш график готов к использованию разработчиками! Но подождите … как мы можем знать, что график на самом деле работает? И как мы можем убедиться, что это будет продолжать работать? Вот почему нам нужно проверить нашу диаграмму, и есть в основном две вещи, которые мы хотим проверить.
1) Мы хотим проверить наш шаблон — например, если вход должен существовать с TLS и конкретными правилами (определяемыми разработчиком), мы должны проверить сгенерированный шаблон и убедиться, что вход был создан правильно. 2) Мы хотим проверить, что файлы являются действительными конфигурациями Kubernetes и что они работают, как и ожидалось.
Тестирование первого, относительно просто — проверьте это Образец репо Чтобы увидеть, насколько это просто. Это позволяет нам проверить сгенерированные файлы Kubernetes, используя Kubetest
Анкет Это здорово, но может быть сложным и грязным, особенно когда в ваших файлах шаблонов много ветвления. Требуется лучшее решение — которое позволит нам пройти модульное тестирование для шаблонов, не генерируя файлы Kubernetes. До недавнего времени это не было проблемой, когда у нас началось много ветвления в наших шаблонах, и теперь мы ищем варианты.
Второе, что проверяет, что файлы Kubernetes действительны, немного сложнее. На данный момент в Soluto мы используем механизм версий Helm: у каждого диаграммы есть версия, и все наши услуги будут использовать последнюю стабильную версию. Когда новая версия диаграммы нажимается, мы можем проверить эту версию на определенной службе. Если это работает правильно, обновите остальные службы. Другой вариант — проверить, что с помощью minikube
, но это было слишком сложно для наших нужд.
Наконец: развертывание!
Итак, теперь у нас есть конвейер CI/CD для наших графиков Helm, и мы подготовили диаграмму Helm, которую могут использовать разработчики. Теперь, когда новый разработчик хочет развернуть новую услугу для производства, все, что им нужно сделать, это:
- Добавьте наш репозиторий в их локальный руль, используя
Helm Repo Добавить chartmuseum http://
- Создайте новый файл конфигурации Helm и укажите необходимые параметры (например, изображение Docker службы)
- Запустить
Обновление Helm-INSTALL
И вот и все — услуга жива.chartmusuem/web-api -f
И чтобы сделать это еще проще, я создал Пример репозитория Анкет Репозиторий содержит все вещи, которые я обсуждал в этом сообщении в блоге: общая диаграмма для веб -приложения, простое приложение, которое можно развернуть с помощью этой диаграммы и музея диаграммы. Проверьте это, чтобы лучше понять, что происходит — просто следуйте прохождению в репо.
Спасибо, что прочитали. Если у вас есть какие -либо вопросы, или вам нужна помощь в начале работы с рулем, не стесняйтесь обращаться либо через комментарии здесь, либо через Twitter Анкет Счастливого русла!
Первоначально опубликовано на Soluto блог
Оригинал: «https://dev.to/omerlh/can-kubernetes-deployments-be-fun-and-simple-1g4»