Представление и сравнение Dev-инструментов для Kubernetes

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

Оглавление

Skaffold

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


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


apiVersion: skaffold/v2beta15
kind: Config

build:
  artifacts:
    - image: my-app
      context: ./app
      docker:
        dockerfile: Dockerfile

deploy:
  kubectl:
    manifests:
      - k8s/deployment.yaml
      - k8s/service.yaml

Преимущества


У Skaffold модульная архитектура, которая позволяет выбирать инструменты, соответствующие конкретным потребностям CI/CD. Благодаря возможностям управления образами он может автоматически создавать теги образов. Кроме того, плагин Google Cloud Code использует Skaffold для бесшовного локального и удаленного рабочего процесса разработки Kubernetes с несколькими популярными IDE.


Ограничения


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

Tilt

Tilt — это инструмент, который расширяет возможности разработчика Kubernetes. Tilt использует Tiltfile для конфигурации, написанный на диалекте Python Starlark. Tiltfile определяет, как приложение должно быть создано, развернуто и управляемо. Вы можете изучить справочник по API Tilt здесь. Вот пример Tiltfile:


# Sample Tiltfile

# Define the Docker build for the application
docker_build(
    './app',
    dockerfile='Dockerfile',
    image='my-app'
)

# Define the Kubernetes deployment manifests
k8s_yaml('k8s/deployment.yaml')
k8s_yaml('k8s/service.yaml')

При запуске Tilt с этим Tiltfile он создаст образ Docker на основе указанного Dockerfile и развернет приложение в кластере Kubernetes, используя предоставленные манифесты Kubernetes. Tilt также будет следить за изменениями в исходном коде и автоматически запускать пересборки и повторные развертывания.


Преимущества


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


Ограничения


Внедрение Tilt может потребовать дополнительного обучения, особенно для разработчиков, незнакомых с диалектом Starlark Python. Также нет той же гибкости и обширной языковой поддержки, как и других инструментов с YAML.

Telepresence

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


Чтобы начать отладку приложения с помощью Telepresence:


  1. сначала необходимо подключить локальную среду разработки к удаленному кластеру с помощью telepresence connect команды.
  2. затем вы можете начать перехват трафика с помощью telepresence intercept. Например, если хотите перехватить локально запущенную службу с именем order-service, используйте команду command telepresence intercept order-service --port 8080 .

После активации перехвата весь трафик, предназначенный для удаленной службы, будет направлен на ваш локально запущенный экземпляр. Вы можете использовать curl для отправки запросов на удаленную службу. Telepresence перенаправит эти запросы на вашу локальную службу.


Преимущества


  • Telepresence доказывает свою ценность, облегчая возможности удаленной разработки с того же ноутбука, используя минимальные ресурсы.
  • Инструмент устраняет необходимость в настройке и запуске отдельного локального кластера Kubernetes, такого как minikube или Docker Desktop.
  • Особенно полезен при работе с распределенными системами и архитектурами микросервисов.

Ограничения


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

Okteto

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


# Sample okteto.yaml

# Define the development environment
environment:
  name: my-dev-env
  namespace: my-namespace
  image: my-app:latest

# Specify the services to sync with the remote cluster
sync:
  - local_path: ./app
    remote_path: /app

# Specify the services to forward ports for local access
port_forwarding:
  - service: my-app
    local_port: 8080
    remote_port: 80

okteto.yaml используется для определения среды разработки и того, как локальные файлы и порты должны синхронизироваться и перенаправляться в удаленный кластер Kubernetes.


При запуске okteto up с этим okteto.yaml Okteto создаст среду разработки в определенном пространстве имен и развернет образ Docker my-app на удаленном кластере. Он также синхронизирует локальный каталог ./app с каталогом /app на кластере, гарантируя, что любые изменения, сделанные локально, немедленно отразятся на удаленном кластере. Указанная в файле переадресация портов позволяет вам получить доступ к службе my-app, запущенной в кластере, как если бы она была запущена локально на порту 8080.


Преимущества


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


Ограничения


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

Garden

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


Чтобы интегрировать Garden.io в свой проект, запустите настройку, выполнив следующую команду:


garden init

После этого вы можете настроить свой проект, добавив следующий пример в файл garden.yml. Этот файл определяет службы, задачи, тесты и многое другое:


services:
  web:
    build: .
    ports:
      - target: 3000
        published: 3000
        protocol: tcp

После настройки Garden.io запустите его, перейдя в каталог вашего проекта и выполнив команду garden start. Далее инструмент инициирует проект, генерируя контейнеры для каждой службы, указанной в garden.yml. Чтобы включить тестирование в настройку Garden, добавьте раздел tests в ваш garden.yml.


tests:
  my-tests:
    service: web
    command: mvn test

Команда garden test запустит тестовые наборы. Наконец, вы можете выполнить развертывание на разных облачных провайдерах и кластерах Kubernetes, добавив раздел целевой среды в свой garden.yml.


target:
  name: my-kubernetes-cluster
  provider: kubernetes

Здесь мы указываем, что целевая среда — это кластер Kubernetes с именем my-kubernetes-cluster.


Для инициирования развертывания выполните команду garden deploy. Более того, garden deploy автоматизирует развертывание приложений в указанной среде разработки Kubernetes, обрабатывая такие задачи, как создание образа, оркестровка Kubernetes и синхронизация, а также предоставляет бесшовную среду для разработки и тестирования.


Преимущества


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


Ограничения


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

Заключение

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


  • Skaffold и Tilt преуспевают в автоматизации и итеративной разработке,
  • Telepresence и Okteto обеспечивают бесперебойное взаимодействие с удаленными кластерами.
  • Garden предоставляет комплексную среду разработки.
Ответим на все вопросы по переносу, сборке, оркестрации и развертывании.
Настроим ваш Kubernetes