Как начать работу с DevSpace и быстро разрабатывать приложения Kubernetes
DevSpace — это инструмент с открытым исходным кодом, который помогает разработчикам быстро развертывать облачные приложения в кластерах Kubernetes. Он абстрагирует большую часть традиционной сложности Kubernetes, чтобы вы могли вернуться к написанию кода.
DevSpace не зависит от платформы и работает с кластерами, начиная от вашей локальной машины и заканчивая популярными управляемыми общедоступными службами. Инструмент представляет собой интерфейс командной строки, который автоматизирует операции с помощью API-интерфейсов Kubernetes. Вам не нужно ничего устанавливать внутри вашего кластера, чтобы использовать DevSpace.
Современные практики разработки для Kubernetes
DevSpace привносит многие аспекты современного опыта программирования приложений в развертывания на основе Kubernetes. Он позволяет запускать среду разработки в вашем кластере с поддержкой автоматической горячей перезагрузки. Когда локальный файл изменяется, DevSpace автоматически обновляет ваши контейнеры новым содержимым.
Встроенная переадресация портов означает, что вы можете использовать localhost
для доступа к вашему развертыванию. Вам не нужно открывать порты или настраивать HTTP Ingress в кластерах разработки, предлагая улучшенный опыт разработки и большую безопасность.
DevSpace также помогает в отладке. Он поддерживает установку точек останова с помощью инструмента удаленного отладчика, предлагая проверку контейнерных приложений в облаке в режиме реального времени. Также легко просматривать журналы контейнера или запускать сеанс терминала, не запуская громоздких команд Kubectl.
Веб-интерфейс, работающий на localhost
, позволяет вам отслеживать работающее приложение и взаимодействовать с ним. Вы можете вообще выйти из своего терминала, если предпочитаете более визуальный опыт.
Установка DevSpace
DevSpace распространяется как автономный двоичный файл, который работает в системах Windows, Mac и Linux. Доступно несколько вариантов установки. Вот рекомендуемая команда для загрузки DevSpace для Linux и добавления CLI к вашему пути:
dev sudo install devspace /usr/local/bin
В качестве альтернативы вы можете использовать npm, диспетчер пакетов Node, для установки и обновления DevSpace:
npm install -g devspace
Эта команда даст вам работающее devspace
на вашем пути, если вы уже установили npm.
DevSpace использует ваш активный «KUBE_CONTEXT
» так же, как и другие инструменты экосистемы, такие как Kubectl и Helm. Задайте для KUBECONFIG
файл конфигурации, совместимый с Kubectl, определяющий ваше соединение с кластером:
export KUBECONFIG=/path/to/kubeconfig.yaml # Uses $KUBECONFIG devspace deploy
Создание проекта
Первый шаг в сборке с DevSpace — это инициализация каталога вашего проекта. Это создаст файл devspace.yaml
, содержащий конфигурацию DevSpace для вашего репозитория.
devspace init
Вам будет предложено выбрать процедуру развертывания, которую вы планируете использовать. DevSpace может работать с Kubectl, Helm или Kustomize при запуске приложения в кластере.
Предлагаемый вариант QUICKSTART
— это специальная диаграмма, которая позволяет вам определять компоненты вашего приложения, такие как внешний веб-сервер, внутренний API-сервер и базу данных, вместо того, чтобы предоставлять созданные вручную диаграммы Helm или манифесты Kubectl. Используйте это, если вы создаете систему с традиционной структурой и не хотите тратить время на создание собственных ресурсов Kubernetes.
Следуйте инструкциям, чтобы предоставить DevSpace путь к вашему Dockerfile. Вам нужно будет предоставить аутентификацию реестра и некоторую основную информацию о вашем образе, например, порт, который он прослушивает. DevSpace автоматически создаст готовую к использованию конфигурацию, которая позволит вам запустить devspace deploy
, чтобы запустить ваше приложение в Kubernetes.
Если вы не используете вариант быстрого запуска, вам нужно будет указать путь к вашим диаграммам Helm или манифестам Kubernetes. Следуйте инструкциям, чтобы создать первоначальную конфигурацию. После выхода из мастера установки вы можете продолжить добавлять дополнительные образы и развертывания, вручную редактируя файл devspace.yaml
.
Добавление изображения
Проекты DevSpace создаются из одного или нескольких образов контейнеров. Чтобы зарегистрировать изображение в своем проекте, добавьте его в ключ images
в файле devspace.yaml
:
images: app: image: example.com/example/image:latest dockerfile: ./Dockerfile build: disabled: true
Поле image
определяет имя тега изображения. Поле dockerfile
является необязательным; когда он установлен, он должен ссылаться на путь к Dockerfile образа в вашем проекте. Образы с файлами Docker будут создаваться автоматически с помощью команд devspace build
и devspace deploy
, если только build.disabled
не имеет значение true
. в конфиге образа.
Образы строятся параллельно для ускорения работы. Флаг --build-sequential
заставляет изображения собираться отдельно в том порядке, в котором они указаны. DevSpace автоматически отправит каждый образ в соответствующий реестр после завершения сборки.
Образы не перестраиваются автоматически, если только DevSpace не обнаружит изменение либо в их Dockerfile, либо в файлах в их контексте сборки. Вы можете принудительно пересобрать все сконфигурированные образы с помощью флага --force-build
.
Добавление развертывания
Вторая часть devspace.yaml
— это ваши развертывания
. Они определяют ресурсы, которые будут созданы внутри вашего кластера.
deployments: - name: "helm chart" helm: chart: name: example/example-app values: VARIABLE_OVERRIDE: "new-value" - name: "kubectl manifests" kubectl: manifests: - .kube/manifests
Этот файл определяет два отдельных развертывания, одно с использованием Helm, а другое с Kubectl. Когда вы запускаете devspace deploy
, в вашем кластере будут установлены и диаграмма Helm, и ваши манифесты Kubectl.
Повторение команды deploy
обновит ваши развертывания. DevSpace повторно развертывает только измененные компоненты, если не используется флаг --force-deploy
.
Поскольку DevSpace работает в кластерах, переход от разработки к рабочей среде — это случай изменения переменной среды KUBECONFIG
и повторного запуска devspace deploy
. Это дает вам единый согласованный механизм для управления несколькими независимыми развертываниями вашей системы.
Использование профилей
DevSpace поддерживает профили, позволяющие изменять разделы devspace.yaml
для каждой из ваших сред. Каждый именованный профиль может заменять, объединять и изменять поля в файле конфигурации.
Сами профили также определены в вашем devspace.yaml
:
images: api-server: image: example.com/api-server:latest web-server: image: example.com/web-server:latest debug: image: example.com/debug-tool:latest # ... omitted profiles: - name: production patches: - op: remove path: images.debug
Профили активируются путем передачи флага -p
или --profile
командам DevSpace. Вот как начать развертывание с помощью профиля production
, определенного выше. Развертывание не будет включать образ debug
, так как он удален одним из исправлений профиля.
devspace deploy --profile production
Использование горячей перезагрузки
Функционал горячей перезагрузки включается путем настройки синхронизации файлов:
dev: sync: - imageSelector: example.com/api-server:latest localSubPath: ./api/ containerPath: /var/www/html excludePaths: - vendor/
Добавьте ключ dev
в качестве поля верхнего уровня в файл devspace.yaml
, а затем используйте sync
для настройки горячей перезагрузки для каждого образа. . imageSelector
сопоставляет теги изображений, к которым применяется правило горячей перезагрузки. Файлы из localSubPath
в вашем рабочем каталоге будут синхронизированы с containerPath
в развернутых экземплярах контейнера.
Запустите сеанс горячей перезагрузки, запустив devspace dev
или devspace sync
. Первая команда запускает все функции среды разработки DevSpace, включая переадресацию портов и потоковую передачу журнала в реальном времени.
Горячая перезагрузка по умолчанию заменяет файлы в существующих контейнерах. Это похоже на использование томов Docker и привязку монтирования при работе с локальными экземплярами контейнеров. В некоторых сценариях вам может понадобиться запустить новое развертывание DevSpace при изменении вашей файловой системы. Это достигается с помощью отдельной опции autoReload
:
images: api: image: example.com/api-server:latest deployments: - name: api-deployment # ... omitted dev: autoReload: paths: - ./kernel/* images: - example.com/api-server:latest deployments: - api-deployment
В этом примере будет повторно развертываться api-deployment
всякий раз, когда файлы в вашем локальном каталоге kernel
изменяются. Это идеально, когда вы изменяете файлы, которые необходимо запустить в процессе сборки, чтобы сделать их полезными для ваших контейнеров.
Перенаправление порта
Переадресация портов настраивается с помощью поля dev.ports
в вашем devspace.yaml
. Также поддерживается обратная переадресация, позволяющая адресам localhost
в ваших контейнерах сопоставляться с портами на вашем локальном компьютере.
dev: ports: - imageSelector: example.com/api-server:latest forward: - port: 8080 remotePort: 80 reverseForward: - port: 9000 remote: 9000
В этом примере настраивается пересылка с localhost:8080
на вашем компьютере на порт 80 в контейнерах, на которых запущен образ example.com/api-server
. Существует также обратная переадресация, которая направляет трафик внутри контейнера на localhost:9000
обратно на порт 9000 на вашем компьютере.
Другие особенности
Помимо возможностей, описанных здесь, DevSpace также предлагает поддержку нескольких других групп функций, которые позволяют отслеживать развертывания, взаимодействовать с контейнерами и настраивать расширенные рабочие процессы разработки:
- Автоматический запуск терминала позволяет запускать сеанс удаленной оболочки при каждом запуске
devspace dev
. - Автоматическое открытие URL запускает веб-сайты и веб-приложения в вашем браузере, когда вы входите в режим разработки.
- Настраиваемое ведение журнала определяет, какие контейнеры должны отображаться в потоке журнала режима разработки.
- Пользовательские команды действуют как ярлыки для общих действий, помогая новым членам команды взаимодействовать с вашими развертываниями без необходимости изучения длительных процессов в Kubectl.
- Перехватчики запускают команды в процессе развертывания, позволяя вручную настраивать контейнеры или записывать новые развертывания в централизованную службу мониторинга.
- Пользовательский интерфейс запускается автоматически в режиме разработки с помощью
devspace dev
и может быть открыт в вашем браузере с помощьюdevspace ui
.
DevSpace также предлагает плагины, которые могут расширить функциональность системы. API-интерфейс плагина поддерживает установку с удаленных URL-адресов или локальных скриптов, а также позволяет использовать новые команды, ловушки и переменные. Разработка собственного плагина позволяет стандартизировать использование DevSpace в нескольких независимых проектах.
Развертывания в конвейерах CI/CD
DevSpace может выполнять производственное развертывание как часть конвейера CI/CD. Он предоставляет официальный образ Docker и поддерживает неинтерактивное использование, если вы включите в свои команды явные селекторы, такие как -l
для метки.
Развертывание внутри конвейера CI может выглядеть так:
echo $KUBECONFIG_CI_VARIABLE > /path/to/kubeconfig
export KUBECONFIG=/path/to/kubeconfig
devspace deploy --profile production --timeout 60 --wait --skip-build
Это развернет ваше приложение с использованием профиля production
DevSpace. Флаг --skip-build
указывает DevSpace не собирать ваши образы. Сборки обычно должны обрабатываться как отдельный этап в начале вашего конвейера.
Флаг --wait
заставляет DevSpace ожидать доступности количества подов, указанного в вашем devspace.yaml
, вместо того, чтобы завершать работу сразу после запуска команды. Это больше подходит для среды CI, где вам нужно подтверждение того, что ваша рабочая нагрузка активна. Разрешение DevSpace выйти без ожидания может означать, что ваш конвейер будет помечен как успешный, даже если есть проблема с развертыванием.
Заключение
DevSpace набирает обороты как инструмент развертывания Kubernetes, ориентированный на разработчиков, который предоставляет полезные абстракции для ключевых операций. Он уменьшает количество YAML, необходимого для запуска контейнеров в кластере, заменяя его простыми ключами конфигурации и командами терминала, которые определяют, создают и запускают образы.
Как инструмент, не зависящий от платформы и среды, DevSpace позволяет разработчикам меньше беспокоиться об уникальных характеристиках отдельных кластеров. Независимо от цели развертывания общий процесс аналогичен сборке традиционной системы на локальном компьютере. Это помогает смягчить кривую обучения Kubernetes, сопоставляя концепции с более общепонятными методами разработки.