Руководство. Подготовка приложения для Azure Kubernetes Service (AKS)

Tip

Короткий ответ: используйте Kompose для быстрого формирования шаблонов, Move2Kube для более широкой модернизации, Docker Compose Bridge , если вы используете Docker Desktop и Podman для экспорта из запущенных контейнеров или модулей pod. Затем упакуйте результаты с использованием Helm или Kustomize и итеративно дорабатывайте их с помощью Skaffold или Tilt.

Лучшие инструменты: Kompose, Move2Kube, Docker Compose Bridge, Podman, Helm, Kustomize, Skaffold, Tilt и AI-вспомогательные преобразования.

В этом руководстве описано, как подготовить многоконтейнерное приложение для использования в Kubernetes. Вы можете использовать это руководство, независимо от того, начинаете ли вы с нового примера приложения или адаптируете концепции Docker Compose для приложения, которое планируется перенести на Azure Kubernetes Service (AKS). Вы используете существующие средства разработки, такие как Docker Compose, для локальной сборки и тестирования приложения. Вы узнаете, как:

  • Клонирование примера источника приложения из GitHub.
  • Создайте образ контейнера из примера источника приложения.
  • Протестируйте многоконтейнерное приложение в локальной среде Docker.

Important

Начать с нуля? Используйте это руководство для подготовки и тестирования примера приложения для AKS. Уже используется Docker Compose? См. документацию Kubernetes о миграции Docker Compose в Kubernetes и обзор миграции AKS для получения более общих рекомендаций по планированию.

После завершения следующее приложение запускается в локальной среде разработки:

Screenshot, на котором отображается приложение Azure Store Front App, запущенное локально в локальном веб-браузере.

В последующих руководствах вы отправляете образ контейнера в Реестр контейнеров Azure (ACR), а затем развертываете его в кластере AKS.

Перед тем как начать

В этом руководстве предполагается базовое понимание основных понятий Docker, таких как контейнеры, образы контейнеров и docker команды. Основные сведения о контейнерах см. в статье "Начало работы с Docker".

Для работы с этим руководством вам потребуется локальная среда разработки Docker под управлением контейнеров Linux. Docker предоставляет пакеты, которые настраивают Docker в системе Mac, Windows или Linux.

Заметка

Azure Cloud Shell не включает компоненты Docker, необходимые для выполнения каждого шага в этих руководствах. Поэтому рекомендуется использовать полную среду разработки Docker.


Получение кода приложения

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

Скриншот примера архитектуры Azure Store.

  • Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
  • Сервис продукта: отображает информацию о продукте.
  • Служба заказов: помещает заказы.
  • RabbitMQ: очередь сообщений для очереди заказов.
  1. Создайте каталог на компьютере и переключитесь в этот каталог в сеансе терминала, например Bash. В этом примере используется каталог с именем demorepo , но вы можете использовать любое нужное имя.

    mkdir demorepo
    cd demorepo
    
  2. Используйте git , чтобы клонировать пример приложения в среду разработки.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  3. Перейдите в клонированные каталоги.

    cd aks-store-demo
    

Просмотр файла Docker Compose

В этом руководстве создается пример приложения, который использует файл YAML docker-compose-quickstart из клонированного репозитория.

В следующей таблице перечислены ключи по умолчанию из примера файла Compose, чтобы быстро увидеть, какие службы, порты и зависимости используются в руководстве:

Service Исходный материал Открытый порт Параметры ключа
RabbitMQ rabbitmq:4.3.2-management-alpine изображение 15672, 5672 Имя пользователя usernameпо умолчанию, пароль password
Служба заказа src/order-service 3000 Подключается к RabbitMQ через порт 5672 и использует очередь orders
Служба продуктов src/product-service 3002 Использует AI_SERVICE_URL=http://ai-service:5001/
Витрина магазина src/store-front 8080 Вызывает сервис продуктов на 3002 и сервис заказов на 3000
services:
  rabbitmq:
    image: rabbitmq:4.3.2-management-alpine
    container_name: 'rabbitmq'
    restart: always
    environment:
      - "RABBITMQ_DEFAULT_USER=username"
      - "RABBITMQ_DEFAULT_PASS=password"
    ports:
      - 15672:15672
      - 5672:5672
    healthcheck:
      test: ["CMD", "rabbitmqctl", "status"]
      interval: 30s
      timeout: 10s
      retries: 5
    networks:
      - backend_services
  order-service:
    build: src/order-service
    container_name: 'order-service'
    restart: always
    ports:
      - 3000:3000
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://order-service:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - ORDER_QUEUE_HOSTNAME=rabbitmq
      - ORDER_QUEUE_PORT=5672
      - ORDER_QUEUE_USERNAME=username
      - ORDER_QUEUE_PASSWORD=password
      - ORDER_QUEUE_NAME=orders
    networks:
      - backend_services
    depends_on:
      rabbitmq:
        condition: service_healthy
  product-service:
    build: src/product-service
    container_name: 'product-service'
    restart: always
    ports:
      - 3002:3002
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://product-service:3002/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - AI_SERVICE_URL=http://ai-service:5001/
    networks:
      - backend_services
  store-front:
    build: src/store-front
    container_name: 'store-front'
    restart: always
    ports:
      - 8080:8080
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://store-front:80/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - VUE_APP_PRODUCT_SERVICE_URL=http://product-service:3002/
      - VUE_APP_ORDER_SERVICE_URL=http://order-service:3000/
    networks:
      - backend_services
    depends_on:
      - product-service
      - order-service
networks:
  backend_services:
    driver: bridge

Создание образов контейнеров и запуск приложения

С помощью Docker Compose можно автоматизировать создание образов контейнеров и развертывание многоконтейнерных приложений.

Перед выполнением следующих команд убедитесь, что Docker работает в режиме контейнера Linux.

  1. В корневом каталоге клонированного aks-store-demo репозитория создайте образ контейнера, скачайте образ RabbitMQ и запустите приложение с помощью docker compose команды:

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. Просмотр созданных образов с помощью docker images команды.

    docker images
    

    В следующем сжатом примере выходных данных показаны созданные образы:

    REPOSITORY                        TAG                          IMAGE ID
    aks-store-demo-product-service    latest                       72f5cd7e6b84
    aks-store-demo-order-service      latest                       54ad5de546f9
    aks-store-demo-store-front        latest                       1125f85632ae
    ...
    
  3. Просмотрите запущенные контейнеры с помощью docker ps команды.

    docker ps
    

    В следующем сжатом примере выходных данных показаны четыре запущенных контейнера:

    CONTAINER ID        IMAGE
    f27fe74cfd0a        aks-store-demo-product-service
    df1eaa137885        aks-store-demo-order-service
    b3ce9e496e96        aks-store-demo-store-front
    31df28627ffa        rabbitmq:4.3.2-management-alpine
    

Локальное тестирование приложения

Чтобы увидеть запущенное приложение, перейдите http://localhost:8080 в локальный веб-браузер. Пример загрузки приложения, как показано в следующем примере:

Screenshot, показывающий приложение Azure Store Front App, открытое в локальном браузере.

На этой странице можно просмотреть продукты, добавить их в корзину, а затем разместить заказ.

Перенос собственных файлов Compose

Если у вас уже есть приложение, определенное в файле Docker Compose, это руководство можно использовать в качестве ссылки для локальной проверки, а затем преобразовать существующую конфигурацию Compose в манифесты Kubernetes. Используйте такие средства, как Kompose, Move2Kube, Docker Compose Bridge или Podman , чтобы преобразовать определения Docker Compose в ресурсы Kubernetes. Полный полный путь преобразования см. в документации Kubernetes по переносу Docker Compose в Kubernetes и обзор миграции AKS, если вы также переходите из другого рабочего процесса оркестратора или модернизации.

Выбор средства преобразования

Используйте эту таблицу, если требуется быстрое сравнение наиболее распространенных параметров Compose to Kubernetes.

инструмент Сводка по одной строке
Kompose Быстрый каркас Compose-to-Kubernetes; запустите kompose convert; потребуется ручная очистка для хранилищ и проверок.
Move2Kube Более широкий процесс модернизации; требует запуска move2kube plan -s ./path && move2kube transform; более громоздкий, чем однофайловые конвертеры.
Docker Compose Bridge Путь преобразования, ориентированный на компьютер Docker; run docker compose bridge convert -o ./k8s/; дополнительные сведения о поддержке см. в документации Docker.
Podman Экспорт YAML из запущенных контейнеров или подов; запустите podman kube generate mypod > k8s.yaml; лучше всего подходит для рабочих сценариев на основе Podman.
Helm Манифесты шаблонов и пакетов для повторных развертываний; запустите helm create mychart; лучше всего после преобразования.
Kustomize Наложите изменения для конкретной среды; запустите kubectl apply -k .; лучше всего после преобразования.
Skaffold Создайте внутренний цикл разработки Kubernetes; запустите skaffold init; не является прямым конвертером.
Наклон Разработка локальной среды Kubernetes в реальном времени; выполнение tilt up; требуется рабочий процесс, ориентированный на Kubernetes.
Преобразование с помощью ИИ Создавайте манифесты или сравнивайте их с помощью ИИ, а затем проверяйте результат перед развертыванием.

Какой инструмент следует выбрать?

  • Если вы хотите быстро подтвердить концепцию или начальные манифесты, используйте Kompose.
  • Если вы используете Docker Desktop и хотите использовать собственный путь Docker, используйте Docker Compose Bridge.
  • Если у вас более масштабный проект по миграции или модернизации, охватывающий несколько сервисов, используйте Move2Kube.
  • Если вы хотите экспортировать из запущенных контейнеров или модулей pod, используйте Podman.
  • Если у вас уже есть манифесты и требуется упаковка или наложение, используйте Helm или Kustomize.
  • Если вам нужен локальный цикл разработки Kubernetes после преобразования, используйте skaffold или Tilt.
  • Если вам нужны черновики манифестов или пояснений по миграции, воспользуйтесь помощью ИИ и проверьте результат в отношении официального руководства Kubernetes и AKS.

Другие средства, которые следует учитывать:

  • 8gwifi.org Конвертер YAML для Kubernetes: Полезен для быстрых онлайн-экспериментов с небольшими файлами Compose.
  • Okteto: полезно, если требуется цикл разработки в облаке или удаленной среде Kubernetes для команд приложений.
  • Devtron: полезен, если после конвертации вам нужна платформа для организации процессов развертывания в Kubernetes.
  • Portainer: подходит, если вам нужен графический интерфейс для управления контейнерами и Kubernetes.

Преобразуйте свои файлы Compose

Используйте следующие команды, которые можно скопировать в качестве отправной точки:

kompose convert
move2kube plan -s ./path && move2kube transform
docker compose bridge convert -o ./k8s/
podman kube generate mypod > k8s.yaml
skaffold init

Пример преобразования Kompose

Средство Kompose с открытым исходным кодом преобразует общие параметры Docker Compose в объекты Kubernetes, такие как развертывания и службы.

  1. В Windows установите Kompose со следующей командой:

    curl -L https://github.com/kubernetes/kompose/releases/latest/download/kompose-windows-amd64.exe -o kompose.exe
    

    Дополнительные параметры установки см. в инструкциях по установке Kompose.

  2. Запустите Kompose из каталога, содержащего docker-compose.yml файл.

    kompose convert
    
  3. Перед развертыванием в AKS просмотрите созданные файлы YAML Kubernetes.

Преобразование с помощью ИИ

Вы можете использовать помощник по искусственному интеллекту для разработки манифестов Kubernetes, сравнения параметров Compose с эквивалентами Kubernetes или объяснить, почему преобразование нуждается в ручном изменении.

Универсальный пример запроса:

Convert this docker-compose.yml into production-ready Kubernetes manifests. Use Apps/v1, move secrets to Kubernetes Secret objects, map local volumes to PersistentVolumeClaims, and add readiness and liveness probes for the web service.

Пример запроса, предназначенного для AKS:

Convert this docker-compose.yml into AKS-ready Kubernetes manifests. Target an AKS cluster, push images to Azure Container Registry, use Apps/v1 objects, move secrets to Kubernetes Secret objects, map local volumes to Azure Files or Azure Disks-backed PersistentVolumeClaims, and add readiness and liveness probes for the web service.

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

Обработка распространенных проблем с переводом

Как обрабатываются тома?

Compose volumes часто требует постоянные тома Kubernetes и класс хранения. В AKS замените монтирования, доступные только локально, на службы, такие как Azure Disks или Файлы Azure.

Что заменяет depends_on?

Compose depends_on не обеспечивает готовность во время выполнения в Kubernetes. Замените это проверками готовности, проверками запуска или логикой init-контейнера, если это необходимо.

Как обрабатывать секреты и значения среды?

Значения переменных среды в Compose часто становятся ресурсами Kubernetes ConfigMap или Secret, либо интеграциями с Azure Key Vault.

Что происходит с портами и входящим трафиком?

ports Compose сопоставляется с объектами Kubernetes Service, а иногда и с ресурсами ingress или Gateway API в зависимости от способа публикации приложения.

Как выполняются проверки работоспособности?

Параметры Compose healthcheck обычно преобразуются в проверки работоспособности и готовности Kubernetes.

Что происходит с сетями Compose?

Сети Compose обычно сопоставляются с механизмом обнаружения служб Kubernetes через Services и кластерный DNS, а не через пользовательские мостовые сети.

Как протестировать локально с помощью Kubernetes?

После преобразования разверните сгенерированные манифесты в локальной среде Kubernetes, такой как kind или minikube, а затем используйте Skaffold или Tilt, если вам нужен более быстрый цикл правки, сборки и развертывания.

Примените корректировки, относящиеся к AKS после преобразования

Kompose дает вам отправную точку, но обычно необходимо внести изменения вручную для AKS:

  • Обновите ссылки на образы, чтобы они указывали на Реестр контейнеров Azure (ACR).
  • Замените локальное хранилище и привязывает подключения к постоянному хранилищу, например дискам Azure или Файлы Azure в зависимости от потребностей рабочей нагрузки.
  • Замените секреты Compose или значения, относящиеся к среде, с помощью Kubernetes Secret, ConfigMaps или интеграции Azure Key Vault.
  • Просмотрите параметры сети и экспозиции, например LoadBalancerконфигурацию входящего трафика или шлюза, в зависимости от способа публикации приложения в AKS.
  • Проверьте, должны ли компоненты с состоянием оставаться в Deployment или переходить на такие шаблоны, как StatefulSet, если вам требуется стабильная идентичность или стабильные характеристики хранилища.
  • Проверьте запросы ресурсов, пробы и все предположения о порядке запуска, поскольку особенности поведения Compose, такие как depends_on, не переносятся напрямую на поведение Kubernetes во время выполнения.

Рабочий процесс после преобразования

  1. Преобразуйте файл Compose с помощью средства, например Kompose, Move2Kube, Docker Compose Bridge, Podman или черновика, проверенного ИИ.
  2. Просмотрите и закрепите манифесты, исправляя хранилище, секреты, экспозицию службы, пробы и ссылки на изображения.
  3. Упакуйте манифесты с помощью Helm или накладывайте изменения, специфичные для среды, с помощью Kustomize.
  4. Отправьте образы в реестр, например ACR, а затем разверните их с помощью GitOps, CI/CD или прямых рабочих процессов kubectl.

Пример последовательности: kompose convert просмотр манифестов —> отправка изображений в ACR —> обновление ссылок на изображения или>>kubectl apply.helm install

Очистите ресурсы

Если вы последовали за рабочим процессом Docker Compose, можно остановить и удалить запущенные контейнеры. Не удаляйте образы контейнеров, потому что они понадобятся вам в следующем руководстве. Если вы использовали рабочий процесс Azure Developer CLI, используйте azd down вместо docker compose down.

Остановите и удалите экземпляры контейнеров и ресурсы с помощью docker compose down команды.

docker compose down

команды командной строки разработчика Azure

При использовании azd отсутствуют зависимости образов контейнера, требующие ручного вмешательства. azd обрабатывает подготовку, развертывание и очистку приложений и кластеров с помощью azd up команд и azd down команд, аналогичных Docker.

Вы можете настроить шаги подготовки для использования Terraform или Bicep перед развертыванием кластера в разделе infra раздела azure.yaml. По умолчанию этот проект использует Terraform:

infra:
  provider: terraform
  path: infra/terraform

Если вы хотите заменить текущего поставщика на Bicep, обновите файл azure.yaml следующим образом:

infra:
  provider: bicep
  path: infra/bicep

Дальнейшие шаги

Azure CLI (Интерфейс командной строки для Azure)

В этом руководстве вы создали пример приложения, создали образы контейнеров для приложения, а затем протестировали приложение. Вы узнали, как:

  • Клонирование примера источника приложения из GitHub.
  • Создайте образ контейнера из примера источника приложения.
  • Протестируйте многоконтейнерное приложение в локальной среде Docker.

В следующем руководстве описано, как хранить образы контейнеров в ACR.

Azure Developer CLI (Интерфейс командной строки для разработчиков Azure)

В этом руководстве вы клонировали пример приложения с помощью azd. Вы узнали, как:

  • Клонируйте пример шаблона azd из GitHub.
  • Посмотрите, где образы контейнеров используются из исходного кода примерного приложения.

В следующем руководстве вы узнаете, как создать кластер с помощью azd клонированного шаблона.