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
- Uma subscrição do Azure. Se ainda não tiver uma subscrição do Azure, pode ativar os seus benefícios de subscritor do MSDN ou inscrever-se numa conta gratuita do Azure.
- A Interface de Linha de Comandos (CLI) do Azure.
- Um Java Development Kit (JDK) suportado. Para obter mais informações sobre os JDKs disponíveis para uso ao desenvolver no Azure, consulte Suporte a Java no Azure e Azure Stack.
- A ferramenta de compilação Maven da Apache (versão 3).
- Um cliente Git.
- Um cliente Docker.
- O programa auxiliar de credenciais do Docker do ACR.
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.
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
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
Mude o diretório para o projeto concluído.
cd gs-spring-boot-docker cd complete
Utilize o Maven para criar e executar o exemplo de aplicação.
mvn package spring-boot:run
Teste a aplicação Web ao navegar para
http://localhost:8080
ou com o seguinte comandocurl
:curl http://localhost:8080
Você verá a seguinte mensagem exibida: Hello Docker World
Criar um registo de contentor do Azure com a CLI do Azure
Abra uma linha de comandos.
Inicie sessão na sua conta do Azure:
az login
Selecione a sua Subscrição do Azure:
az account set -s <YourSubscriptionID>
Crie um grupo de recursos para os recursos do Azure utilizados neste tutorial.
az group create --name=wingtiptoys-kubernetes --location=eastus
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
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
Abra o arquivo pom.xml com um editor de texto, por exemplo , Visual Studio Code.
code pom.xml
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>
Atualize a coleção
<plugins>
no ficheiro pom.xml de modo a que o elemento<plugin>
contenha uma entrada parajib-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>
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:dockerBuild
o , ou -Djib.httpTimeout=0
para um tempo limite infinito.
Criar um cluster do Kubernetes no AKS com a CLI do Azure
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.
Instale
kubectl
com a CLI do Azure. Os utilizadores de Linux podem ter de acrescentar o prefixosudo
a este comando, uma vez que o mesmo implementa a CLI do Kubernetes em/usr/local/bin
.az aks install-cli
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 kubectl
o e, em seguida, permite que você explore a implantação por meio da interface da Web do Kubernetes.
Implementar com kubectl
Abra uma linha de comandos.
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 comandorun
O parâmetro
--image
especifica o nome combinado do servidor de início de sessão e da imagem comowingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
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 comandoexpose 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.
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}'
Implantar com a visualização de recursos do Kubernetes
Selecione Adicionar em qualquer uma das exibições de recursos (Namespace, Cargas de trabalho, Serviços e entradas, Armazenamento ou Configuração).
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
Selecione Adicionar na parte inferior do editor YAML para implantar o aplicativo.
Depois de implantar o
Deployment
, como acima, selecione Adicionar na parte inferior do editor YAML para implantarService
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
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.
Selecione IP externo. Em seguida, você verá seu aplicativo Spring Boot em execuçã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:
- Configuring Service Accounts for Pods (Configurar contas de serviço para pods)
- Namespaces (Espaços de nomes)
- Pulling an Image from a Private Registry (Solicitar uma imagem de um registo privado)
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