Поделиться через


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

Необходимые условия

Заметка

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

Создайте веб-приложение Spring Boot "Начало работы на Docker".

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

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

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    --или--

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Клонируйте примерный проект Spring Boot на 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 из 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 Unauthorized, выполните команду az acr login --name <your registry name> еще раз, чтобы повторно выполнить проверку подлинности. Если вы видите ошибку Read timed out, попробуйте увеличить время ожидания с помощью mvn -Djib.httpTimeout=7200000 jib:dockerBuildили -Djib.httpTimeout=0 для бесконечного времени ожидания.

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

  1. Создайте кластер Kubernetes в службе Azure Kubernetes. Следующая команда создает кластер Kubernetes в группе ресурсов wingtiptoys-kubernetes с wingtiptoys-akscluster в качестве имени кластера с присоединенным реестром контейнеров Azure wingtiptoysregistry (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
    

    Эта команда может занять некоторое время.

  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 см. в следующей статье:

Дополнительные сведения об использовании 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