Развертывание приложения Spring Boot Application в Службе Azure Kubernetes

Примечание.

Для приложений Spring Boot рекомендуется использовать Azure Spring Apps. Однако вы по-прежнему можете использовать Служба Azure Kubernetes в качестве назначения. Дополнительные сведения см. в статье "Выбор подходящих служб Azure для приложений Java".

В этом учебнике представлены пошаговые инструкции по объединению Kubernetes и Docker для разработки и развертывания приложения Spring Boot в Microsoft Azure. В частности, Spring Boot используется для разработки приложений, Kubernetes — для развертывания контейнеров, а Служба Azure Kubernetes (AKS) — для размещения приложений.

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

Необходимые компоненты

Примечание.

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

Создание веб-приложения Spring Boot в Docker

Ниже представлены инструкции по созданию веб-приложения Spring Boot и его локальному тестированию.

  1. Откройте командную строку и создайте локальный каталог для размещения приложения, после чего перейдите в этот каталог, например:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    -- или --

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Клонируйте пример проекта Spring Boot on Docker Getting Started в каталог.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Перейдите в каталог готового проекта.

    cd gs-spring-boot-docker
    cd complete
    
  4. Используйте Maven для создания и запуска примера приложения.

    mvn package spring-boot:run
    
  5. Чтобы протестировать веб-приложение, перейдите по адресу http://localhost:8080 или введите такую команду curl:

    curl http://localhost:8080
    
  6. Должно появиться следующее сообщение: Hello Docker World.

    Локальный просмотр образца приложения

Создание реестра контейнеров Azure с помощью Azure CLI

  1. Откройте командную строку.

  2. Войдите в свою учетную запись Azure.

    az login
    
  3. Выберите подписку Azure:

    az account set -s <YourSubscriptionID>
    
  4. Создайте группу ресурсов Azure, используемых в этом руководстве.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. Создайте частный реестр контейнеров Azure в группе ресурсов. Позднее в руководстве пример принудительно отправляется в этот реестр как образ Docker. Замените wingtiptoysregistry уникальным именем для реестра.

    az acr create --resource-group wingtiptoys-kubernetes --location eastus \
     --name wingtiptoysregistry --sku Basic
    

Принудительная отправка приложения в реестр контейнеров с использованием Jib

  1. Войдите в Реестр контейнеров с помощью Azure CLI.

    # set the default name for Azure Container Registry, otherwise you need to specify the name in "az acr login"
    az config set defaults.acr=wingtiptoysregistry
    az acr login
    
  2. Откройте файл pom.xml с помощью текстового редактора, например Visual Studio Code.

    code pom.xml
    
  3. Обновите коллекцию <properties> в файле pom.xml, добавив имя для своего реестра в Реестре контейнеров Azure и последнюю версию jib-maven-plugin.

    <properties>
       <!-- Note: If your ACR name contains upper case characters, be sure to convert them to lower case characters. -->
       <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix>
       <jib-maven-plugin.version>2.5.2</jib-maven-plugin.version>
       <java.version>1.8</java.version>
    </properties>
    
  4. Обновите коллекцию <plugins> в файле pom.xml, чтобы элемент <plugin> содержал запись jib-maven-plugin, как показано в следующем примере. Обратите внимание, что мы используем базовый образ из Реестра контейнеров Майкрософт (MCR): mcr.microsoft.com/openjdk/jdk:11-ubuntu, который содержит официально поддерживаемый пакет JDK для Azure. Другие базовые образы MCR с официально поддерживаемыми пакетами JDK см. в разделе "Установка Microsoft Build of OpenJDK.".

    <plugin>
      <artifactId>jib-maven-plugin</artifactId>
      <groupId>com.google.cloud.tools</groupId>
      <version>${jib-maven-plugin.version}</version>
      <configuration>
         <from>
             <image>mcr.microsoft.com/openjdk/jdk:11-ubuntu</image>
         </from>
         <to>
             <image>${docker.image.prefix}/gs-spring-boot-docker</image>
         </to>
      </configuration>
    </plugin>
    
  5. Перейдите в каталог завершенного проекта для приложения Spring Boot и выполните указанную ниже команду для создания образа и его отправки в реестр:

    az acr login && mvn compile jib:build
    

Примечание.

Из-за проблем безопасности Azure Cli и Реестр контейнеров Azure учетные данные, созданные az acr login в течение 1 часа, действительны. Если вы видите ошибку 401 Несанкционированного доступа , выполните az acr login --name <your registry name> команду еще раз, чтобы повторно выполнить проверку подлинности. Если вы видите ошибку времени ожидания чтения, можно попробовать увеличить время ожидания с mvn -Djib.httpTimeout=7200000 jib:dockerBuildпомощью или -Djib.httpTimeout=0 для бесконечного времени ожидания.

Создание в Службе контейнеров Azure кластера Kubernetes с помощью Azure CLI

  1. Создайте кластер Kubernetes в Службе Azure Kubernetes. Следующая команда отвечает за создание кластера kubernetes в группе ресурсов wingtiptoys-kubernetes с именем кластера wingtiptoys-akscluster, присоединенным реестром службы "Реестр контейнеров Azure" (ACR) wingtiptoysregistry и префиксом DNS wingtiptoys-kubernetes:

    az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \
     --attach-acr wingtiptoysregistry \
     --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys
    

    Выполнение этой команды может занять некоторое время.

  2. Установите kubectl с использованием Azure CLI. Пользователи Linux могут добавить к этой команде префикс sudo, так как она развертывает интерфейс командной строки Kubernetes в /usr/local/bin.

    az aks install-cli
    
  3. Скачайте сведения о конфигурации кластера, чтобы управлять им из веб-интерфейса Kubernetes и kubectl.

    az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
    

Развертывание образа в кластере Kubernetes

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

Развертывание с помощью kubectl

  1. Откройте командную строку.

  2. Запустите контейнер в кластере Kubernetes с помощью команды kubectl run. Присвойте приложению имя службы в Kubernetes и полное имя образа. Например:

    kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
    

    В этой команде:

    • Имя контейнера gs-spring-boot-docker указано сразу после команды run.

    • Параметр --image указывает объединенное имя сервера входа и образа как wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest.

  3. Предоставьте кластер Kubernetes извне с помощью команды kubectl expose. Укажите имя службы, общедоступный TCP-порт, используемый для доступа к приложению, и внутренний целевой порт, прослушиваемый приложением. Например:

    kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
    

    В этой команде:

    • Имя контейнера gs-spring-boot-docker указано сразу после команды expose pod.

    • Параметр --type указывает, что кластер использует подсистему балансировки нагрузки.

    • Параметр --port указывает общедоступный TCP-порт 80. Через этот порт вы осуществляете доступ к приложению.

    • Параметр --target-port указывает общедоступный TCP-порт 8080. Через этот порт подсистема балансировки нагрузки переадресовывает запросы к приложению.

  4. После развертывания приложения в кластере подайте запрос на внешний IP-адрес и откройте его в своем веб-браузере:

    kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
    

    Просмотр примера приложения в Azure

Развертывание с помощью представления ресурсов Kubernetes

  1. Выберите Добавить из любого представления ресурсов (пространство имен, рабочие нагрузки, службы, входящий трафик, хранилище или конфигурация).

    Представление ресурсов Kubernetes.

  2. Вставьте следующий код YAML:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gs-spring-boot-docker
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gs-spring-boot-docker
      template:
        metadata:
          labels:
            app: gs-spring-boot-docker
        spec:
          containers:
          - name: gs-spring-boot-docker
            image: wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
    
  3. Выберите Добавить в нижней части редактора YAML, чтобы развернуть приложение.

    Представление ресурсов Kubernetes, добавление ресурса.

    После развертывания Deployment, как показано выше, нажмите кнопку "Добавить " в нижней части редактора YAML, чтобы развернуть Service с помощью следующего YAML:

    apiVersion: v1
    kind: Service
    metadata:
      name: gs-spring-boot-docker
    spec:
      type: LoadBalancer
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: gs-spring-boot-docker
    
  4. После добавления файла YAML в средстве просмотра ресурсов вы увидите свое приложение Spring Boot. Внешняя служба включает связанный внешний IP-адрес, что позволяет легко просматривать приложение в браузере.

    Представление ресурсов Kubernetes, список служб.

    Представление ресурсов Kubernetes, список служб, выделенные внешние конечные точки.

  5. Выберите Внешний IP-адрес. Затем вы увидите приложение Spring Boot, работающее в Azure.

    Просмотр примера приложения в Azure

Следующие шаги

Дополнительные сведения о Spring и Azure см. в центре документации об использовании Spring в Azure.

См. также

Дополнительные сведения об использовании Spring Boot в Azure см. в следующей статье:

Дополнительные сведения об использовании Java в Azure см. в статьях Azure для разработчиков Java и Working with Azure DevOps and Java (Работа с Azure DevOps и Java).

Дополнительные сведения о развертывании приложения Java в кластере Kubernetes с помощью Visual Studio Code см. в руководствах по Java для Visual Studio Code.

Дополнительные сведения о примере проекта Spring Boot в Docker см. в разделе Spring Boot on Docker Getting Started.

По следующим ссылкам представлены дополнительные сведения о создании приложений Spring Boot:

  • Дополнительные сведения о создании простого приложения Spring Boot см. на странице Spring Initializr по адресу https://start.spring.io/.

По следующим ссылкам представлены дополнительные сведения об использовании Kubernetes с Azure:

Дополнительные сведения об использовании интерфейса командной строки Kubernetes доступны в руководстве пользователя kubectl по адресу https://kubernetes.io/docs/reference/kubectl/.

На сайте Kubernetes содержится несколько статей, посвященных использованию образов в частных реестрах:

Дополнительные примеры использования пользовательских образов Docker в Azure см. в разделе Применение пользовательского образа Docker для веб-приложения Azure на платформе Linux.

Дополнительные сведения об итеративном выполнении и отладке контейнеров непосредственно в Службе Azure Kubernetes (AKS) с помощью Azure Dev Spaces см. в разделе Начало работы в Azure Dev Spaces с использованием Java.