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

Как начать работу с 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, сопоставляя концепции с более общепонятными методами разработки.




Все права защищены. © Linux-Console.net • 2019-2024