Поиск по сайту:

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


Kubernetes стал одним из самых популярных способов запуска контейнерных рабочих нагрузок в производственной среде. Это упрощает развертывание, масштабирование и обслуживание контейнеров, на которых работает ваша служба.

Kubernetes, возможно, менее эффективен в области локальной разработки. Разработчики обычно создают и тестируют новые сервисы, используя простые контейнеры Docker, возможно, организованные в стеки с помощью Docker Compose. Запуск локального кластера Kubernetes часто рассматривается как дополнительный уровень сложности и накладных расходов.

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

Что делает среду разработки хорошей?

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

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

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

Как помогают кластеры Kubernetes для разработки

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

Использование Kubernetes в производственной среде добавляет в ваш стек новую технологию. Он приносит свои собственные концепции, лучшие практики и потенциальные несовместимости. Хотя отдельные контейнеры остаются прежними, у вас есть дополнительный уровень, обрабатывающий входящий трафик, сетевое взаимодействие между службами и периферийные задачи, такие как конфигурация и хранилище.

Запуск среды разработки в Kubernetes позволяет воспроизвести эти различия при создании решения. Кластер, работающий на вашем локальном компьютере, может по-прежнему не точно воспроизводить вашу производственную инфраструктуру, но он будет ближе к ней. Это делает тестирование более реалистичным, уменьшая количество слепых зон.

Сокращение цикла обратной связи

Kubernetes в разработке сокращает цикл обратной связи итерации. Это один из описанных выше аспектов хорошего опыта разработки.

Вы сможете лучше воспроизводить отчеты о проблемах пользователей, если в вашей тестовой среде используются те же технологии, что и в рабочей среде. Это означает, что вы можете экспериментировать, повторять и отлаживать без развертывания в реальной среде каждый раз, когда вы вносите изменения.

Эффекты каждой версии можно быстро наблюдать в локальном кластере Kubernetes, что позволяет увеличить пропускную способность. Разработчики могут быстро тестировать теории и оценивать новые решения, даже если проблема заключается в чем-то специфичном для Kubernetes, например в соединениях между сервисами. Это было бы невозможно, если бы Kubernetes был зарезервирован для производственного использования.

Сокращение разрыва с помощью операций

Использование Kubernetes в качестве инструмента разработки сокращает разрыв между проектированием и эксплуатацией. Разработчики получают непосредственный опыт работы с инструментами и концепциями, которые операционная группа использует для поддержки производственных рабочих нагрузок.

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

Настройка локальной среды Kubernetes

У вас есть несколько вариантов настройки кластера Kubernetes для разработки. Один из подходов — создать новый кластер в существующей облачной среде. Это обеспечивает наилучшую согласованность с вашей производственной инфраструктурой. Однако это может снизить эффективность, поскольку ваши операции разработки будут выполняться в удаленной среде.

Разработчики часто предпочитают запускать свой собственный кластер локально для повышения простоты использования. Такие проекты, как Minikube и MicroK8s, упрощают развертывание кластеров Kubernetes на собственном оборудовании. Например, вы можете запустить кластер MicroK8s из его Snap-пакета, выполнив одну команду:

$ sudo snap install microk8s --classic

После запуска MicroK8s вы можете взаимодействовать со своим кластером, используя встроенную версию Kubectl:

$ sudo microk8s kubectl apply -f my-pod.yaml

Вы можете обнаружить, что Kubernetes уже доступен на вашей платформе контейнеризации. Docker Desktop для Windows и Mac включает в себя встроенный кластер Kubernetes, который можно активировать в настройках приложения. Rancher Desktop — еще одна утилита, сочетающая простое управление контейнерами с интегрированным кластером Kubernetes.

Какое бы решение вы ни использовали, вы должны настроить свой кластер так, чтобы он максимально соответствовал вашей производственной среде. Постоянно используйте одну и ту же версию Kubernetes, чтобы избежать неожиданной несовместимости и несоответствия версий API.

Ограничения

Среды разработки всегда будут чем-то отличаться от производственных. Это нормально, пока несоответствия признаются и понимаются.

Когда вы используете Kubernetes во всех своих средах, вы, скорее всего, столкнетесь со следующими ограничениями:

  • Ограниченные ресурсы. Большинство кластеров разработки будут работать локально на одном компьютере. Рабочий кластер может охватывать десятки узлов и поддерживать сотни или тысячи модулей. Это может затруднить точную оценку того, насколько хорошо масштабируется ваше приложение.
  • Несоответствия в конфигурации. Когда каждый разработчик подготавливает свой собственный кластер, он может изменить настройки, которые заставят его вести себя иначе, чем в других средах. Чтобы избежать этих проблем, важно стандартизировать один дистрибутив, например Minikube или MicroK8s, и конкретную версию Kubernetes.
  • Различия между поставщиками. Локальные развертывания Kubernetes, такие как Minikube и MicroK8, имеют некоторые неотъемлемые отличия от облачных кластеров, развернутых от таких поставщиков, как Amazon EKS, Azure AKS и Google GKE. Интеграция хранилища и сети у разных поставщиков работает по-разному, поэтому вероятность несовместимости все же существует.
  • Сложность и кривая обучения. Использование Kubernetes в разработке неизбежно усложняет процесс. Несмотря на то, что мы продемонстрировали преимущества этого подхода, важно также признать нагрузку, возложенную на разработчиков, особенно на новичков в команде, когда им приходится изучать Kubernetes и быть в курсе его регулярного выпуска.

Большинство вышеперечисленных проблем можно решить, предоставив внутренний кластер разработки, которым централизованно управляет администратор DevOps. Вы можете использовать пространства имен Kubernetes и элементы управления RBAC, чтобы настроить изолированные области для работы каждого разработчика. Хотя это гарантирует стандартизацию дистрибутива, версии и доступности ресурсов Kubernetes, это может уменьшить автономию разработчиков, поскольку они больше не владеют своим кластером. Это также может создать узкие места, когда многие инженеры ожидают развертывания новых изменений внутри общего кластера.

Заключение

Использование Kubernetes в разработке позволяет тестировать программное обеспечение в среде, эквивалентной промежуточной и рабочей среде. Это может помочь вам выявлять проблемы раньше, до того, как они будут обнаружены вашими пользователями. Принятие Kubernetes в качестве инструмента разработки также позволяет инженерам ознакомиться с тем, как ваше приложение развертывается в рабочей среде.

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

Инструменты, повышающие согласованность процесса разработки программного обеспечения, приносят пользу всем участникам. Мы уже видели это в основах контейнерного движения и широкого распространения Docker. Запуск локального кластера Kubernetes позволяет вам разрабатывать ближе к рабочей среде, сокращая циклы обратной связи и улучшая сотрудничество между командами.