Развертывание приложения 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 — это решения с открытым кодом, которые помогают разработчикам автоматизировать развертывание и масштабирование выполняемых в контейнерах приложений, а также управление ими.
Необходимые компоненты
- Подписка Azure. Если у вас ее еще нет, вы можете активировать Преимущества для подписчиков MSDN или зарегистрироваться для получения бесплатной учетной записи Azure.
- Интерфейс командной строки Azure (CLI).
- Поддерживаемая версия Java Development Kit (JDK). Дополнительные сведения о версиях JDK, доступных для разработки в Azure, см. в статье Поддержка Java в Azure и Azure Stack.
- Средство сборки Maven (версия 3) от Apache.
- Клиент Git.
- Клиент Docker.
- Вспомогательное приложение для учетных данных ACR Docker.
Примечание.
С учетом требований виртуализации для этого руководства изложенные здесь инструкции нельзя выполнять на виртуальной машине. Необходимо использовать физический компьютер с включенными функциями виртуализации.
Создание веб-приложения Spring Boot в Docker
Ниже представлены инструкции по созданию веб-приложения Spring Boot и его локальному тестированию.
Откройте командную строку и создайте локальный каталог для размещения приложения, после чего перейдите в этот каталог, например:
mkdir C:\SpringBoot cd C:\SpringBoot
-- или --
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBoot
Клонируйте пример проекта Spring Boot on Docker Getting Started в каталог.
git clone https://github.com/spring-guides/gs-spring-boot-docker.git
Перейдите в каталог готового проекта.
cd gs-spring-boot-docker cd complete
Используйте Maven для создания и запуска примера приложения.
mvn package spring-boot:run
Чтобы протестировать веб-приложение, перейдите по адресу
http://localhost:8080
или введите такую командуcurl
:curl http://localhost:8080
Должно появиться следующее сообщение: Hello Docker World.
Создание реестра контейнеров Azure с помощью Azure CLI
Откройте командную строку.
Войдите в свою учетную запись Azure.
az login
Выберите подписку Azure:
az account set -s <YourSubscriptionID>
Создайте группу ресурсов Azure, используемых в этом руководстве.
az group create --name=wingtiptoys-kubernetes --location=eastus
Создайте частный реестр контейнеров Azure в группе ресурсов. Позднее в руководстве пример принудительно отправляется в этот реестр как образ Docker. Замените
wingtiptoysregistry
уникальным именем для реестра.az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
Принудительная отправка приложения в реестр контейнеров с использованием Jib
Войдите в Реестр контейнеров с помощью 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
Откройте файл pom.xml с помощью текстового редактора, например Visual Studio Code.
code pom.xml
Обновите коллекцию
<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>
Обновите коллекцию
<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>
Перейдите в каталог завершенного проекта для приложения 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
Создайте кластер 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
Выполнение этой команды может занять некоторое время.
Установите
kubectl
с использованием Azure CLI. Пользователи Linux могут добавить к этой команде префиксsudo
, так как она развертывает интерфейс командной строки Kubernetes в/usr/local/bin
.az aks install-cli
Скачайте сведения о конфигурации кластера, чтобы управлять им из веб-интерфейса Kubernetes и
kubectl
.az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
Развертывание образа в кластере Kubernetes
В этом учебнике с помощью kubectl
развертывается приложение, а затем предоставляется возможность изучить развертывание с помощью веб-интерфейса Kubernetes.
Развертывание с помощью kubectl
Откройте командную строку.
Запустите контейнер в кластере 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
.
Предоставьте кластер 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. Через этот порт подсистема балансировки нагрузки переадресовывает запросы к приложению.
После развертывания приложения в кластере подайте запрос на внешний IP-адрес и откройте его в своем веб-браузере:
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
Развертывание с помощью представления ресурсов Kubernetes
Выберите Добавить из любого представления ресурсов (пространство имен, рабочие нагрузки, службы, входящий трафик, хранилище или конфигурация).
Вставьте следующий код 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
Выберите Добавить в нижней части редактора YAML, чтобы развернуть приложение.
После развертывания
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
После добавления файла YAML в средстве просмотра ресурсов вы увидите свое приложение Spring Boot. Внешняя служба включает связанный внешний IP-адрес, что позволяет легко просматривать приложение в браузере.
Выберите Внешний IP-адрес. Затем вы увидите приложение Spring Boot, работающее в 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 содержится несколько статей, посвященных использованию образов в частных реестрах:
- Configure Service Accounts for Pods (Настройка учетных записей службы для модулей Pod)
- Пространства имен
- Pull an Image from a Private Registry (Извлечение образа из частного реестра)
Дополнительные примеры использования пользовательских образов Docker в Azure см. в разделе Применение пользовательского образа Docker для веб-приложения Azure на платформе Linux.
Дополнительные сведения об итеративном выполнении и отладке контейнеров непосредственно в Службе Azure Kubernetes (AKS) с помощью Azure Dev Spaces см. в разделе Начало работы в Azure Dev Spaces с использованием Java.