Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
En el caso de las aplicaciones de Spring Boot, use Azure Container Apps. Pero todavía puede usar Azure Kubernetes Service como destino. Para obtener más información, consulte Elegir los servicios de Azure adecuados para las aplicaciones Java.
En este tutorial se muestra cómo usar Kubernetes y Docker para desarrollar e implementar una aplicación de Spring Boot en Microsoft Azure. Más concretamente, se usa Spring Boot para el desarrollo de aplicaciones, de 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 Azure; si aún no tiene una suscripción de Azure, active las ventajas del suscriptor de MSDN o regístrese para obtener una cuenta gratuita de Azure.
- 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:
Debido a los requisitos de virtualización de este tutorial, no puede seguir los pasos descritos en este artículo en una máquina virtual. Debe 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 un símbolo del sistema y cree un directorio local para contener la aplicación y cambie a ese directorio; por ejemplo:
mkdir C:\SpringBoot cd C:\SpringBoot-- o --
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBootClone el proyecto de ejemplo Spring Boot on Docker Getting Started en el directorio.
git clone https://github.com/spring-guides/gs-spring-boot-docker.gitCambie de directorio al del proyecto completado.
cd gs-spring-boot-docker cd completeUtilice Maven para compilar y ejecutar la aplicación de ejemplo.
mvn package spring-boot:runPara probar la aplicación web, vaya a
http://localhost:8080o use el siguiente comandocurl:curl http://localhost:8080Verá 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.
Inicio de sesión en la cuenta de Azure
az loginSeleccione la suscripción 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=eastusCrear 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
wingtiptoysregistrypor un nombre único para el registro.az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
Empuja tu aplicación al registro de contenedores mediante Jib
Inicie sesión en el Azure Container Registry desde el 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 loginAbra el archivo pom.xml con un editor de texto, como Visual Studio Code.
code pom.xmlActualiza la colección
<properties>del archivo pom.xml con el nombre del registro de tu Azure Container Registry y la última versión dejib-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. Use una imagen base de Microsoft Container Registry (MCR):mcr.microsoft.com/openjdk/jdk:11-ubuntu, que contiene un JDK compatible oficialmente para Azure. Para ver otras imágenes base de MCR con JDK compatibles oficialmente, consulte Instalación del Compilación de Microsoft de 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 Spring Boot y ejecute el siguiente comando para compilar la imagen e insertar la imagen en el registro:
az acr login && mvn compile jib:build
Nota:
Por motivos de seguridad, la credencial que crea mediante az acr login es válida durante una hora. Si ve un 401 Unauthorized error, vuelva a ejecutar el az acr login --name <your registry name> comando para volver a autenticarse. Si ve un Read timed out error, intente aumentar los tiempos de espera con mvn -Djib.httpTimeout=7200000 jib:dockerBuildo use -Djib.httpTimeout=0 para un tiempo de espera infinito.
Creación de un clúster de Kubernetes en AKS mediante el CLI de Azure
Cree un clúster de Kubernetes en Azure Kubernetes Service. El comando siguiente crea un clúster de Kubernetes en el
wingtiptoys-kubernetesgrupo de recursos, conwingtiptoys-aksclustercomo nombre de clúster, con Azure Container Registry (ACR)wingtiptoysregistryasociado ywingtiptoys-kubernetescomo prefijo DNS:az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ --attach-acr wingtiptoysregistry \ --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keysEsta operación puede tardar algún tiempo en completarse.
Instale
kubectlmediante la CLI de Azure. Es posible que los usuarios de Linux necesiten prefijar este comando,sudoya que implementa la CLI de Kubernetes en/usr/local/bin.az aks install-cliDescargar 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
Despliega la imagen en el clúster de Kubernetes
En este tutorial se implementa la aplicación mediante kubectly, a continuación, puede explorar la implementación a través de la interfaz 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. Asigne un nombre de servicio para su aplicación en Kubernetes y el nombre completo de la imagen. Por ejemplo:kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latestEn este comando:
Especifique el nombre
gs-spring-boot-dockerdel contenedor inmediatamente después delruncomando.El
--imageparámetro especifica el servidor de inicio de sesión combinado y el nombre de la 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 público utilizado para acceder a la aplicación y el puerto interno de destino en el que escucha la aplicación. Por ejemplo:kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080En este comando:
Especifique el nombre
gs-spring-boot-dockerdel contenedor inmediatamente después delexpose podcomando.El parámetro
--typeespecifica que el clúster utiliza equilibrador de carga.El parámetro
--portespecifica 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-portespecifica el puerto TCP interno, el 8080. El equilibrador de carga reenvía las solicitudes a la aplicación en este puerto.
Después de desplegar la aplicación en el clúster, consulta la dirección IP externa y ábrela en tu navegador web:
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
Desplegar 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:latestSeleccione Agregar en la parte inferior del editor YAML para implementar la aplicación.
Después de implementar el
Deployment, al igual que en el paso anterior, seleccione Agregar en la parte inferior del editor de YAML para implementarServicemediante el siguiente YAML:apiVersion: v1 kind: Service metadata: name: gs-spring-boot-docker spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: gs-spring-boot-dockerUna vez agregado el archivo YAML, el visor de recursos muestra la aplicación 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. Verá que la aplicación de Spring Boot 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 la Azure para desarrolladores de Java y el Trabajar 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 más información sobre cómo crear aplicaciones de 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 más información sobre el uso de Kubernetes con Azure:
Para obtener más información sobre el uso de 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:
- Configuración de cuentas de servicio para pods
- Espacios de nombres
- Pull an Image from a Private Registry (Extraer una imagen de un registro privado)
Para obtener más ejemplos de cómo usar imágenes personalizadas de Docker con Azure, consulte Uso de una imagen personalizada de Docker para Azure Web App en Linux.
Para obtener más información sobre cómo ejecutar y depurar contenedores de forma iterativa directamente en Azure Kubernetes Service (AKS) con Azure Dev Spaces, consulte Introducción a Azure Dev Spaces con Java.