Развертывание приложения Spring Boot в службе Azure Kubernetes
Заметка
Для приложений Spring Boot рекомендуется использовать приложения контейнеров Azure. Однако вы по-прежнему можете использовать Службу Azure Kubernetes в качестве назначения. Дополнительные сведения см. в статье Выбор нужных служб Azure для приложений Java.
В этом руководстве описывается объединение Kubernetes и Docker для разработки и развертывания приложения Spring Boot в Microsoft Azure. В частности, вы используете Spring Boot для разработки приложений, Kubernetes для развертывания контейнеров и службы Azure Kubernetes (AKS) для размещения приложения.
Kubernetes и Docker — это решения с открытым кодом, которые помогают разработчикам автоматизировать развертывание, масштабирование и управление приложениями, работающими в контейнерах.
Необходимые условия
- Подписка Azure; Если у вас еще нет подписки Azure, вы можете активировать преимущества подписчика MSDN или зарегистрироваться для бесплатной учетной записи Azure.
- Интерфейс Azure Command-Line командной строки (CLI).
- Поддерживаемый пакет средств разработки Java (JDK). Дополнительные сведения об JDK, доступных для разработки в Azure, см. в поддержке Java в Azure и Azure Stack.
- Средство сборки Apache Maven (версия 3).
- Клиент
Git. - Клиент Docker.
- Вспомогательная программа учетных данных Docker
ACR.
Заметка
Из-за требований к виртуализации этого руководства вы не можете выполнить действия, описанные в этой статье, на виртуальной машине; Необходимо использовать физический компьютер с включенными функциями виртуализации.
Создайте веб-приложение Spring Boot "Начало работы на Docker".
Ниже приведены инструкции по созданию веб-приложения Spring Boot и его локальному тестированию.
Откройте командную строку и создайте локальный каталог для хранения приложения и перейдите в этот каталог; Например:
mkdir C:\SpringBoot cd C:\SpringBoot
--или--
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBoot
Клонируйте примерный проект Spring Boot на 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 из 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 Unauthorized
, выполните команду az acr login --name <your registry name>
еще раз, чтобы повторно выполнить проверку подлинности. Если вы видите ошибку Read timed out
, попробуйте увеличить время ожидания с помощью mvn -Djib.httpTimeout=7200000 jib:dockerBuild
или -Djib.httpTimeout=0
для бесконечного времени ожидания.
Создание кластера Kubernetes в AKS с помощью Azure CLI
Создайте кластер Kubernetes в службе Azure Kubernetes. Следующая команда создает кластер Kubernetes в группе ресурсов
wingtiptoys-kubernetes
сwingtiptoys-akscluster
в качестве имени кластера с присоединенным реестром контейнеров Azurewingtiptoysregistry
(ACR) иwingtiptoys-kubernetes
в качестве префикса DNS: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 см. в следующей статье:
Дополнительные сведения об использовании Azure с Java см. в разделах Azure для разработчиков Java и "Работа с Azure DevOps и Java".
Дополнительные сведения о развертывании приложения Java в Kubernetes с помощью Visual Studio Code смотрите в руководствах по Java для Visual Studio Code.
Дополнительные сведения о примере проекта Spring Boot в Docker см. в разделе Spring Boot в 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