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

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

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

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

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 из клонированного репозитория.

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 можно автоматизировать создание образов контейнеров и развертывание многоконтейнерных приложений.

  1. Создайте образ контейнера, скачайте образ 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, открытое в локальном браузере.

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

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

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

Остановите и удалите экземпляры контейнеров и ресурсы с помощью 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 клонированного шаблона.