Implementar uma Aplicação Spring Boot no Azure Kubernetes Service

Nota

Para aplicativos Spring Boot, recomendamos o uso do Azure Spring Apps. No entanto, você ainda pode optar por 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 orienta você pela combinação do Kubernetes e do Docker para desenvolver e implantar um aplicativo Spring Boot no Microsoft Azure. Mais especificamente, irá utilizar o Spring Boot para desenvolver aplicações, o Kubernetes para implementar contentores e o Azure Kubernetes Service (AKS) para alojar a sua aplicação.

O Kubernetes e o Docker são soluções open-source que ajudam os programadores a automatizar a implementação, o dimensionamento e a gestão das respetivas aplicações que são executadas em contentores.

Pré-requisitos

Nota

Devido aos requisitos de virtualização deste tutorial, não é possível seguir os passos apresentados neste artigo numa máquina virtual. Tem de utilizar um computador físico com as funcionalidades de virtualização ativadas.

Criar a aplicação Web "Spring Boot on Docker Getting Started" (Introdução ao Spring Boot no Docker)

Os seguintes passos guiam-no ao longo da criação de uma aplicação Web Spring Boot e do teste da mesma a nível local.

  1. Abra uma linha de comandos, crie um diretório local para incluir nele 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 exemplo de projeto Spring Boot on Docker Getting Started (Introdução ao Spring Boot no Docker) para o diretório.

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

    cd gs-spring-boot-docker
    cd complete
    
  4. Utilize o Maven para criar e executar o exemplo de aplicação.

    mvn package spring-boot:run
    
  5. Teste a aplicação Web ao navegar para http://localhost:8080 ou com o seguinte comando curl:

    curl http://localhost:8080
    
  6. Você verá a seguinte mensagem exibida: Hello Docker World

    Navegar localmente até ao exemplo de aplicação

Criar um registo de contentor do Azure com a CLI do Azure

  1. Abra uma linha de comandos.

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

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

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

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. Crie um registo de contentor do Azure privado no grupo de recursos. O tutorial emite o exemplo de aplicação sob a forma de imagem do Docker para este registo em passos posteriores. Substitua wingtiptoysregistry por um nome exclusivo para o seu registo.

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

Emitir a sua aplicação para o registo de contentor via Jib

  1. Inicie sessão no seu Azure Container Registry a partir da 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 arquivo pom.xml com um editor de texto, por exemplo , Visual Studio Code.

    code pom.xml
    
  3. Atualize a coleção <properties> no ficheiro pom.xml com o nome de 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 ficheiro pom.xml de modo a que o elemento <plugin> contenha uma entrada para jib-maven-plugin, conforme mostrado no exemplo seguinte. Tenha em atenção que estamos a utilizar uma imagem base do Microsoft Container Registry (MCR), mcr.microsoft.com/openjdk/jdk:11-ubuntu, que contém um JDK suportado oficialmente para o 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. Navegue para o diretório de projeto concluído da sua aplicação Spring Boot, execute o seguinte comando para criar a imagem e emita-a para o registo:

    az acr login && mvn compile jib:build
    

Nota

Devido à preocupação de segurança da CLI do Azure e do Registro de Contêiner do Azure, a credencial criada por az acr login é válida por 1 hora. Se você vir um erro 401 não autorizado , você pode executar o az acr login --name <your registry name> comando novamente para autenticar novamente. Se vir um erro de Leitura com tempo limite limite, pode tentar aumentar os tempos limite com mvn -Djib.httpTimeout=7200000 jib:dockerBuildo , ou -Djib.httpTimeout=0 para um tempo limite infinito.

Criar um cluster do Kubernetes no AKS com a CLI do Azure

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

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

    A conclusão deste comando poderá demorar algum tempo.

  2. Instale kubectl com a CLI do Azure. Os utilizadores de Linux podem ter de acrescentar o prefixo sudo a este comando, uma vez que o mesmo implementa a CLI do Kubernetes em /usr/local/bin.

    az aks install-cli
    
  3. Transfira as informações de configuração do cluster para conseguir gerir o seu cluster a partir da interface Web do Kubernetes e de kubectl.

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

Implementar a imagem no seu cluster do Kubernetes

Este tutorial implanta o aplicativo usando kubectlo e, em seguida, permite que você explore a implantação por meio da interface da Web do Kubernetes.

Implementar com kubectl

  1. Abra uma linha de comandos.

  2. Execute o seu contentor no cluster do Kubernetes com recurso ao comando kubectl run. Atribua um nome de serviço para a sua aplicação 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:

    • O nome de contentor gs-spring-boot-docker é especificado imediatamente após o comando run

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

  3. Exponha externamente o seu cluster do Kubernetes com recurso ao comando kubectl expose. Especifique o seu nome de serviço, a porta TCP destinada ao público que é utilizada para aceder à aplicação e a porta de destino interna que a sua aplicação escuta. Por exemplo:

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

    Neste comando:

    • O nome de contentor gs-spring-boot-docker é especificado imediatamente após o comando expose pod.

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

    • O parâmetro --port especifica a porta TCP 80 destinada ao público. É através desta porta que acede à aplicação.

    • O parâmetro --target-port especifica a porta TCP interna 8080. O balanceador de carga reencaminha pedidos para a sua aplicação nesta porta.

  4. Após a aplicação ser implementada no cluster, consulte o endereço IP externo e abra-o no seu browser:

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

    Navegar até ao exemplo de aplicação no Azure

Implantar com a visualização de recursos do Kubernetes

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

    Visualização de recursos do Kubernetes.

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

    Visualização de recursos do Kubernetes, adicionar recurso.

    Depois de implantar o Deployment, como acima, selecione Adicionar na parte inferior do editor YAML para implantar 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 que o arquivo YAML é adicionado, o visualizador de recursos mostra seu aplicativo 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, pontos de extremidade externos destacados.

  5. Selecione IP externo. Em seguida, você verá seu aplicativo Spring Boot em execução no Azure.

    Navegar até ao exemplo de aplicação no Azure

Próximos passos

Para saber mais sobre o Spring e o Azure, avance para o centro de documentação relativa ao Spring no Azure.

Consulte também

Para obter mais informações sobre como utilizar o Spring Boot no Azure, veja os seguintes artigos:

Para obter mais informações sobre a utilização do Azure com Java, veja Azure para Programadores de Java e Working with Azure DevOps and Java (Trabalhar com o Azure DevOps e Java).

Para obter mais informações sobre a implementação de uma aplicação Java no Kubernetes com Visual Studio Code, veja Tutoriais de Java do Visual Studio Code.

Para obter mais informações sobre o exemplo de projeto "Spring Boot on Docker Getting Started", veja Introdução ao Spring Boot no Docker.

As seguintes ligações fornecem informações adicionais sobre a criação de aplicações Spring Boot:

  • Para obter mais informações sobre a criação de uma aplicação Spring Boot simples, veja o Spring Initializr em https://start.spring.io/.

As seguintes ligações fornecem informações adicionais sobre a utilização do Kubernetes com o Azure:

Pode encontrar mais informações sobre a utilização da interface de linha de comandos do Kubernetes no manual do utilizador de kubectl em https://kubernetes.io/docs/reference/kubectl/.

O site do Kubernetes tem vários artigos que abordam a utilização de imagens em registos privados:

Para obter mais exemplos sobre como utilizar imagens personalizadas do Docker com o Azure, veja Utilizar uma imagem personalizada do Docker para as Aplicações Web do Azure no Linux.

Para obter mais informações sobre a execução e depuração iterativa de contentores diretamente no Azure Kubernetes Service (AKS) com os Espaços de Programador do Azure, veja Introdução aos Espaços de Programador do Azure com Java