Deploy Spring Boot application to Azure Kubernetes Service

Observação

Para aplicações Spring Boot, use Azure Container Apps. No entanto, você ainda pode usar o Serviço Kubernetes do Azure como destino. Para obter mais informações, consulte Escolher os serviços do Azure certos para seus aplicativos Java.

Este tutorial mostra-lhe como usar Kubernetes e Docker para desenvolver e implementar uma aplicação Spring Boot para Microsoft Azure. Mais especificamente, você usa Spring Boot para desenvolvimento de aplicativos, Kubernetes para implantação de contêiner e do Serviço Kubernetes do Azure (AKS) para hospedar seu aplicativo.

Kubernetes e Docker são soluções de código aberto que ajudam os desenvolvedores a automatizar a implantação, o dimensionamento e o gerenciamento de seus aplicativos executados em contêineres.

Pré-requisitos

Observação

Devido aos requisitos de virtualização deste tutorial, não pode seguir os passos deste artigo numa máquina virtual. Deve usar um computador físico com funcionalidades de virtualização ativadas.

Criar o aplicativo Web Spring Boot no Docker Getting Started

As etapas a seguir o orientam na criação de um aplicativo Web Spring Boot e no teste local.

  1. Abra um prompt de comandos e crie um diretório local para armazenar a sua aplicação, e mude para esse diretório; por exemplo:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    -- ou --

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Clone o Spring Boot no Docker Getting Started projeto de exemplo no diretório.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Altere o diretório para o projeto concluído.

    cd gs-spring-boot-docker
    cd complete
    
  4. Use o Maven para criar e executar o aplicativo de exemplo.

    mvn package spring-boot:run
    
  5. Teste o aplicativo Web navegando até http://localhost:8080ou com o seguinte comando curl:

    curl http://localhost:8080
    
  6. Vê a seguinte mensagem exibida: Olá Docker World

    Navegar aplicação de exemplo localmente

Criar um Registro de Contêiner do Azure usando a CLI do Azure

  1. Abra um prompt de comando.

  2. Inicie sessão na sua conta do Azure:

    az login
    
  3. Selecione a sua subscrição Azure:

    az account set -s <YourSubscriptionID>
    
  4. Crie um grupo de recursos para os recursos do Azure usados neste tutorial.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. Crie um registro de contêiner privado do Azure no grupo de recursos. O tutorial envia o aplicativo de exemplo como uma imagem do Docker para este registro em etapas posteriores. Substitua wingtiptoysregistry por um nome exclusivo para o seu registo.

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

Envie seu aplicativo para o registro de contêiner via Jib

  1. Inicie sessão no seu Azure Container Registry a partir do CLI do Azure.

    # 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. Abra o ficheiropom.xml com um editor de texto, como Visual Studio Code.

    code pom.xml
    
  3. Atualize a configuração <properties> no ficheiro pom.xml com o nome do registo do seu Azure Container Registry e a versão mais recente de 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. Atualize a coleção <plugins> no arquivo pom.xml para que o elemento <plugin> contenha uma entrada para o jib-maven-plugin, conforme mostrado no exemplo a seguir. Use uma imagem base do Microsoft Container Registry (MCR): mcr.microsoft.com/openjdk/jdk:11-ubuntu, que contém um JDK oficialmente suportado para Azure. Para outras imagens de base MCR com JDKs oficialmente suportados, consulte Instalar o Microsoft Build do 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. Vá ao diretório do projeto concluído da sua aplicação Spring Boot e execute o seguinte comando para construir a imagem e enviá-la para o registo:

    az acr login && mvn compile jib:build
    

Observação

Por razões de segurança, a credencial que cria ao usar az acr login é válida por uma hora. Se detetar um 401 Unauthorized erro, execute novamente o az acr login --name <your registry name> comando para voltar a autenticar. Se vires um Read timed out erro, tenta aumentar os tempos mortos com mvn -Djib.httpTimeout=7200000 jib:dockerBuild, ou usa -Djib.httpTimeout=0 para um tempo final infinito.

Crie um cluster Kubernetes no AKS usando a CLI do Azure

  1. Crie um cluster Kubernetes no Serviço Kubernetes do Azure. O comando seguinte cria um cluster Kubernetes no wingtiptoys-kubernetes grupo de recursos, com wingtiptoys-akscluster como nome do cluster, com Azure Container Registry (ACR) wingtiptoysregistry anexado, e wingtiptoys-kubernetes como prefixo DNS:

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

    Esse comando pode demorar um pouco para ser concluído.

  2. Instale kubectl usando a CLI do Azure. Os utilizadores Linux podem precisar de prefixar este comando com sudo , pois implementa a CLI Kubernetes para /usr/local/bin.

    az aks install-cli
    
  3. Baixe as informações de configuração do cluster para que você possa gerenciar seu cluster a partir da interface da Web do Kubernetes e kubectl.

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

Implantar a imagem no cluster do Kubernetes

Este tutorial implementa a aplicação usando kubectl, e depois pode explorar a implementação através da interface web do Kubernetes.

Implantar com kubectl

  1. Abra um prompt de comando.

  2. Execute seu contêiner no cluster do Kubernetes usando o comando kubectl run. Dê um nome de serviço para seu aplicativo no Kubernetes e o nome completo da imagem. Por exemplo:

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

    Neste comando:

    • Especifica o nome gs-spring-boot-docker do contentor imediatamente após o run comando.

    • O --image parâmetro especifica o nome combinado do servidor de login e da imagem como wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest.

  3. Exponha seu cluster Kubernetes externamente usando o comando kubectl expose. Especifique o nome do serviço, a porta TCP voltada para o público usada para acessar o aplicativo e a porta de destino interna na qual seu aplicativo escuta. Por exemplo:

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

    Neste comando:

    • Especifica o nome gs-spring-boot-docker do contentor imediatamente após o expose pod comando.

    • O parâmetro --type especifica que o cluster usa o balanceador de carga.

    • O parâmetro --port especifica a porta TCP voltada para o público de 80. Você acessa o aplicativo nesta porta.

    • O parâmetro --target-port especifica a porta TCP interna de 8080. O balanceador de carga encaminha solicitações para seu aplicativo nessa porta.

  4. Depois de implantar a aplicação no cluster, consulte o endereço IP externo e abra-o no seu navegador web:

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

Procurar Aplicação de Exemplo no Azure

Implantar através da visualização de recursos do Kubernetes

  1. Selecione Adicionar em qualquer uma das exibições de recursos (Namespace, Cargas de trabalho, Serviços e ingressos, Armazenamento ou Configuração).

    visualização de recursos do Kubernetes.

  2. Cole no YAML seguinte.

    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. Selecione Adicionar na parte inferior do editor YAML para implantar o aplicativo.

    visualização de recursos do Kubernetes, adicione recurso.

    Após implementar o Deployment, tal como no passo anterior, selecione Adicionar na parte inferior do editor YAML para implementar Service usando o seguinte 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. Depois de adicionares o ficheiro YAML, o visualizador de recursos mostra a tua aplicação Spring Boot. O serviço externo inclui um endereço IP externo vinculado para que você possa visualizar facilmente o aplicativo em seu navegador.

    visualização de recursos do Kubernetes, lista de serviços.

    visualização de recursos do Kubernetes, lista de serviços, endereços externos destacados.

  5. Selecione IP externo. Vês a tua aplicação Spring Boot a correr no Azure.

    Procurar Aplicação de Exemplo no Azure

Próximos passos

Para saber mais sobre o Spring e o Azure, continue para o centro de documentação do Spring on Azure.

Ver também

Para obter mais informações sobre como usar o Spring Boot no Azure, consulte o seguinte artigo:

Para obter mais informações sobre como usar o Azure com Java, consulte o Azure for Java Developers e o Trabalhando com o Azure DevOps e o Java.

Para obter mais informações sobre como implantar um aplicativo Java no Kubernetes com o Visual Studio Code, consulte Visual Studio Code Java Tutorials.

Para obter mais informações sobre o projeto de exemplo Spring Boot no Docker, consulte Spring Boot on Docker Getting Started.

Os seguintes links fornecem mais informações sobre como criar aplicações Spring Boot:

  • Para obter mais informações sobre como criar um aplicativo Spring Boot simples, consulte o Spring Initializr em https://start.spring.io/.

Os links seguintes fornecem mais informações sobre a utilização do Kubernetes com o Azure:

Para mais informações sobre a utilização da interface de linha de comandos do Kubernetes, consulte o guia do utilizador do kubectl em https://kubernetes.io/docs/reference/kubectl/.

O site Kubernetes tem vários artigos que discutem o uso de imagens em registros privados:

Para mais exemplos de como usar imagens Docker personalizadas com Azure, consulte Usar uma imagem Docker personalizada para Azure Web App no Linux.

Para mais informações sobre como executar e depurar iterativamente contentores diretamente no Azure Kubernetes Service (AKS) com o Azure Dev Spaces, consulte Introdução ao Azure Dev Spaces com Java.