Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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 для получения более общих рекомендаций по планированию.
После завершения следующее приложение запускается в локальной среде разработки:
В последующих руководствах вы отправляете образ контейнера в Реестр контейнеров Azure (ACR), а затем развертываете его в кластере AKS.
Перед тем как начать
В этом руководстве предполагается базовое понимание основных понятий Docker, таких как контейнеры, образы контейнеров и docker команды. Основные сведения о контейнерах см. в статье "Начало работы с Docker".
Для работы с этим руководством вам потребуется локальная среда разработки Docker под управлением контейнеров Linux. Docker предоставляет пакеты, которые настраивают Docker в системе Mac, Windows или Linux.
Заметка
Azure Cloud Shell не включает компоненты Docker, необходимые для выполнения каждого шага в этих руководствах. Поэтому рекомендуется использовать полную среду разработки Docker.
Получение кода приложения
В этом руководстве используется примерное приложение, которое является основным приложением для витрины магазина и включает следующие развертывания и службы Kubernetes:
- Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
- Сервис продукта: отображает информацию о продукте.
- Служба заказов: помещает заказы.
- RabbitMQ: очередь сообщений для очереди заказов.
Создайте каталог на компьютере и переключитесь в этот каталог в сеансе терминала, например Bash. В этом примере используется каталог с именем demorepo , но вы можете использовать любое нужное имя.
mkdir demorepo cd demorepoИспользуйте git , чтобы клонировать пример приложения в среду разработки.
git clone https://github.com/Azure-Samples/aks-store-demo.gitПерейдите в клонированные каталоги.
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.
В корневом каталоге клонированного
aks-store-demoрепозитория создайте образ контейнера, скачайте образ RabbitMQ и запустите приложение с помощьюdocker composeкоманды:docker compose -f docker-compose-quickstart.yml up -dПросмотр созданных образов с помощью
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 ...Просмотрите запущенные контейнеры с помощью
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 в локальный веб-браузер. Пример загрузки приложения, как показано в следующем примере:
На этой странице можно просмотреть продукты, добавить их в корзину, а затем разместить заказ.
Перенос собственных файлов 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, такие как развертывания и службы.
В Windows установите Kompose со следующей командой:
curl -L https://github.com/kubernetes/kompose/releases/latest/download/kompose-windows-amd64.exe -o kompose.exeДополнительные параметры установки см. в инструкциях по установке Kompose.
Запустите Kompose из каталога, содержащего
docker-compose.ymlфайл.kompose convertПеред развертыванием в 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 во время выполнения.
Рабочий процесс после преобразования
- Преобразуйте файл Compose с помощью средства, например Kompose, Move2Kube, Docker Compose Bridge, Podman или черновика, проверенного ИИ.
- Просмотрите и закрепите манифесты, исправляя хранилище, секреты, экспозицию службы, пробы и ссылки на изображения.
- Упакуйте манифесты с помощью Helm или накладывайте изменения, специфичные для среды, с помощью Kustomize.
- Отправьте образы в реестр, например 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 клонированного шаблона.