Implementación de una aplicación de Spring Boot en Azure Kubernetes Service
Nota:
Para las aplicaciones de Spring Boot, se recomienda usar Azure Spring Apps. Sin embargo, todavía puede optar por usar Azure Kubernetes Service como destino. Para más información, consulte Elección de los servicios de Azure adecuados para las aplicaciones Java.
En este tutorial se muestra cómo combinar Kubernetes y Docker para desarrollar e implementar una aplicación de Spring Boot en Microsoft Azure. Concretamente, Spring Boot se usa para el desarrollo de aplicaciones, Kubernetes para la implementación de contenedores y Azure Kubernetes Service (AKS) para hospedar la aplicación.
Kubernetes y Docker son soluciones de código abierto que ayudan a los desarrolladores a automatizar la implementación, el escalado y la administración de sus aplicaciones que se ejecutan en contenedores.
Requisitos previos
- Una suscripción de Azure. Si todavía no la tiene, puede activar sus ventajas como suscriptor de MSDN o registrarse para obtener una cuenta de Azure gratuita.
- La Interfaz de la línea de comandos (CLI) de Azure.
- Un kit de desarrollo de Java (JDK) admitido Para más información sobre los JDK disponibles para desarrollar en Azure, consulte Compatibilidad con Java en Azure y Azure Stack.
- La herramienta de compilación Maven de Apache (versión 3).
- Un cliente Git.
- Un cliente de Docker.
- El asistente de credenciales de Docker de ACR.
Nota:
Dados los requisitos de virtualización de este tutorial, los pasos que se describen en este artículo no se pueden seguir en una máquina virtual; es preciso usar un equipo físico con características de virtualización habilitadas.
Creación de la aplicación web Spring Boot on Docker Getting Started
Los siguientes pasos le guían a través de la creación de una aplicación web Spring Boot y la realización de pruebas de la misma de forma local.
Abra el símbolo del sistema, cree un directorio local para alojar la aplicación y cambie a dicho directorio, por ejemplo:
mkdir C:\SpringBoot cd C:\SpringBoot
-- o --
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBoot
Clone el proyecto de ejemplo Spring Boot on Docker Getting Started en el directorio.
git clone https://github.com/spring-guides/gs-spring-boot-docker.git
Cambie de directorio al del proyecto completado.
cd gs-spring-boot-docker cd complete
Utilice Maven para compilar y ejecutar la aplicación de ejemplo.
mvn package spring-boot:run
Para probar la aplicación web, vaya a
curl
o use el siguiente comandohttp://localhost:8080
:curl http://localhost:8080
Debería ver el mensaje siguiente mostrado: Hello Docker World
Creación de una instancia de Azure Container Registry mediante la CLI de Azure
Abra un símbolo del sistema.
Inicie sesión en una cuenta de Azure:
az login
Elija la suscripción de Azure:
az account set -s <YourSubscriptionID>
Cree un grupo de recursos para los recursos de Azure que se usan en este tutorial.
az group create --name=wingtiptoys-kubernetes --location=eastus
Crear una instancia de Azure Container Registry en el grupo de recursos. El tutorial inserta la aplicación de ejemplo en forma de imagen Docker en este registro en los pasos posteriores. Reemplace
wingtiptoysregistry
por un nombre único para el registro.az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
Inserción de una aplicación en el registro de contenedor mediante Jib
Inicie sesión en Azure Container Registry desde la CLI de 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 el archivo pom.xml con un editor de texto; por ejemplo , Visual Studio Code.
code pom.xml
Actualice la colección
<properties>
del archivo pom.xml con el nombre de su registro de Azure Container Registry y la última versión 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>
Actualice la colección
<plugins>
del archivo pom.xml para que el elemento<plugin>
contenga una entrada parajib-maven-plugin
, como se muestra en el ejemplo siguiente. Tenga en cuenta que se va a usar una imagen base de Microsoft Container Registry (MCR):mcr.microsoft.com/openjdk/jdk:11-ubuntu
, que contiene un JDK admitido oficialmente para Azure. Para ver otras imágenes base de MCR con JDK compatibles oficialmente, consulte Install the 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>
Vaya al directorio de proyecto completado de la aplicación de Spring Boot y ejecute el siguiente comando para crear la imagen e insertarla en el registro:
az acr login && mvn compile jib:build
Nota:
Debido a la preocupación de seguridad de la CLI de Azure y Azure Container Registry, la credencial creada por az acr login
es válida durante 1 hora. Si ve un error 401 No autorizado , puede volver a ejecutar el az acr login --name <your registry name>
comando para volver a autenticarse. Si ve un error de tiempo de espera de lectura agotado, puede intentar aumentar los tiempos de espera con mvn -Djib.httpTimeout=7200000 jib:dockerBuild
o -Djib.httpTimeout=0
para un tiempo de espera infinito.
Creación de un clúster de Kubernetes en AKS mediante la CLI de Azure
Cree un clúster de Kubernetes en Azure Kubernetes Service. El siguiente comando crea un clúster de Kubernetes en el grupo de recursos wingtiptoys-kubernetes, con wingtiptoys-akscluster como nombre de clúster, con Azure Container Registry (ACR)
wingtiptoysregistry
asociado y wingtiptoys-kubernetes como prefijo de DNS:az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ --attach-acr wingtiptoysregistry \ --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys
Esta operación puede tardar un tiempo en completarse.
Instale
kubectl
mediante la CLI de Azure. Los usuarios de Linux pueden tener anteceder este comando consudo
, ya que implementa la CLI de Kubernetes en/usr/local/bin
.az aks install-cli
Descargar la información de configuración del clúster para que pueda administrar el clúster desde la interfaz web de Kubernetes y
kubectl
.az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
Implementación de la imagen en un clúster de Kubernetes
Este tutorial implementa la aplicación mediante kubectl
y, después, le permite explorar la implementación mediante la interfaz de web de Kubernetes.
Implementación con kubectl
Abra un símbolo del sistema.
Ejecute el contenedor en el clúster de Kubernetes mediante el comando
kubectl run
. Proporcione un nombre de servicio para la aplicación en Kubernetes y el nombre de la imagen completa. Por ejemplo:kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
En este comando:
El nombre del contenedor
gs-spring-boot-docker
se especifica inmediatamente después del comandorun
El parámetro
--image
especifica la combinación de servidor de inicio de sesión y nombre de imagen comowingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
Exponga externamente el clúster Kubernetes mediante el comando
kubectl expose
. Especifique el nombre del servicio, el puerto TCP de acceso público utilizado para acceder a la aplicación y el puerto de destino interno en que escucha la aplicación. Por ejemplo:kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
En este comando:
El nombre del contenedor
gs-spring-boot-docker
se especifica inmediatamente después del comandoexpose pod
.El parámetro
--type
especifica que el clúster utiliza equilibrador de carga.El parámetro
--port
especifica el puerto TCP de acceso público, el 80. El acceso a la aplicación se realiza a través de este puerto.El parámetro
--target-port
especifica el puerto TCP interno, el 8080. El equilibrador de carga reenvía las solicitudes a la aplicación en este puerto.
Una vez que la aplicación se implementa en el clúster, consulte la dirección IP externa y ábrala en el explorador web:
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
Implementación con la vista de recursos de Kubernetes
Seleccione Agregar desde cualquiera de las vistas de recursos (espacio de nombres, cargas de trabajo, servicios y entradas, almacenamiento o configuración).
Pegue el siguiente código 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
Seleccione Agregar en la parte inferior del editor YAML para implementar la aplicación.
Después de implementar ,
Deployment
al igual que antes, seleccione Agregar en la parte inferior del editor de YAML para realizar la implementaciónService
mediante el siguiente CÓDIGO 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
Una vez agregado el archivo YAML, el visor de recursos muestra la aplicación de Spring Boot. El servicio externo incluye una dirección IP externa vinculada para que pueda ver fácilmente la aplicación en el explorador.
Seleccione Dirección IP externa. A continuación, verá la aplicación de Spring Boot que se ejecuta en Azure.
Pasos siguientes
Para más información acerca de Spring y Azure, vaya al centro de documentación de Azure.
Consulte también
Para más información acerca del uso de Spring Boot en Azure, consulte el siguiente artículo:
Para más información sobre el uso de Azure con Java, consulte Azure para desarrolladores de Java y Working with Azure DevOps and Java (Trabajo con Azure DevOps y Java).
Para más información sobre cómo implementar una aplicación Java en Kubernetes con Visual Studio Code, consulte los tutoriales de Visual Studio Code para Java.
Para más información acerca del proyecto de ejemplo Spring Boot on Docker, consulte Spring Boot on Docker Getting Started.
Los vínculos siguientes proporcionan información adicional acerca de cómo crear aplicaciones Spring Boot:
- Para más información acerca de cómo crear una sencilla aplicación de Spring Boot, consulte Spring Initializr en https://start.spring.io/.
Los vínculos siguientes proporcionan información adicional acerca del uso de Kubernetes con Azure:
Para más información acerca de cómo usar la interfaz de línea de comandos de Kubernetes, consulte la guía de usuario de kubectl en https://kubernetes.io/docs/reference/kubectl/.
El sitio web de Kubernetes tiene varios artículos que tratan el uso de imágenes en registros privados:
- Configure Service Accounts for Pods (Configurar cuentas de servicio para pods)
- Espacios de nombres
- Pull an Image from a Private Registry (Extraer una imagen de un registro privado)
Para ver más ejemplos de cómo usar imágenes de Docker personalizadas con Azure, consulte Uso de una imagen personalizada de Docker para Web App on Linux de Azure.
Para obtener más información sobre la ejecución de forma iterativa y la depuración de contenedores directamente en Azure Kubernetes Service (AKS) con Azure Dev Spaces, consulte Introducción a Azure Dev Spaces con Java.