Diseño y desarrollo de aplicaciones en contenedor con Docker y Microsoft Azure Parte 6
Compilación de aplicaciones ASP.NET Core implementadas como contenedores de Linux en un orquestador de AKS/Kubernetes
Azure Kubernetes Service (AKS) es un servicio de orquestaciones de Kubernetes administrado de Azure que simplifica la implementación y la administración de contenedores.
Estas son las características principales de AKS:
- Plano de control hospedado en Azure
- Actualizaciones automatizadas
- Recuperación automática
- Escalado configurable por el usuario
- Experiencia de usuario más sencilla para desarrolladores y operadores de clúster.
En los ejemplos siguientes se examina la creación de una aplicación de ASP.NET Core 5.0 que se ejecuta en Linux y se implementa en un clúster de AKS en Azure, mientras que el desarrollo se realiza con Visual Studio 2019, versión 16.8.
Creación del proyecto de ASP.NET Core con Visual Studio 2019
ASP.NET Core es una plataforma de desarrollo de uso general de cuyo mantenimiento se encargan Microsoft y la comunidad .NET en GitHub. Es multiplataforma, admite Windows, macOS y Linux y puede usarse en escenarios de dispositivo, nube, IoT e incrustados.
En este ejemplo se usan un par de proyectos simples basados en plantillas de Visual Studio, por lo que no necesita muchos conocimientos adicionales para crear el ejemplo. Solo tiene que crear el proyecto con una plantilla estándar que incluya todos los elementos para ejecutar un proyecto pequeño con una API REST y una aplicación web con Razor Pages, mediante la tecnología ASP.NET Core 5.0.
.
Para crear el proyecto de ejemplo en Visual Studio, seleccione Archivo > Nuevo > Proyecto, seleccione el tipo de proyecto Web y luego la plantilla Aplicación web ASP.NET Core. También puede buscar la plantilla si la necesita.
Luego escriba el nombre y la ubicación de la aplicación como se muestra en la siguiente imagen.
Compruebe que ha seleccionado ASP.NET Core 5.0 como marco. .NET 5 está incluido en la última versión de Visual Studio 2019, y se instala y configura automáticamente al instalar Visual Studio.
Observe que la compatibilidad con Docker no está habilitada ahora. Lo hará en el paso siguiente después de la creación del proyecto.
Para mostrar que puede "aplicar Docker" al proyecto en cualquier momento, se va a agregar compatibilidad con Docker ahora. Haga clic con el botón derecho en el nodo del proyecto en el Explorador de soluciones y seleccione Agregar > Compatibilidad con Docker en el menú contextual.
Para acabar de agregar compatibilidad con Docker, puede elegir Windows o Linux. En este caso, seleccione Linux.
Imagen 4-39. Selección de contenedores de Linux
Con estos sencillos pasos, ya tiene la aplicación de ASP.NET Core 5.0 en ejecución en un contenedor de Linux.
De forma similar, también puede agregar un proyecto WebApp muy sencillo (figura 4-40) para usar el punto de conexión de la API web, aunque los detalles no se tratan aquí.
Después, agregue compatibilidad con el orquestador al proyecto WebApi como se muestra a continuación, en la imagen 4-40.
Imagen 4-40. Incorporación de compatibilidad con el orquestador al proyecto WebApi.
Al seleccionar la opción Docker Compose, que es correcta para el desarrollo local, Visual Studio agrega el proyecto docker-compose, con los archivos de docker-compose, como se muestra en la imagen 4-41.
Los archivos iniciales agregados son similares a estos:
docker-compose.yml
docker-compose.override.yml
Para que la aplicación se ejecute con Docker Compose, solo tiene que realizar algunos ajustes en docker-compose.override.yml
Ahora puede ejecutar la aplicación con la tecla F5, mediante el botón Reproducir, o bien la tecla Ctrl+F5 al seleccionar el proyecto docker-compose, como se muestra en la imagen 4-42.
Al ejecutar la aplicación docker-compose como se ha explicado, se consigue:
- Compilar las imágenes y crear los contenedores según el archivo docker-compose.
- Abrir el explorador en la dirección configurada en el cuadro de diálogo "Propiedades" del proyecto docker-compose.
- Abrir la ventana Contenedor (en Visual Studio 2019, versión 16.4 y posteriores).
- Compatibilidad del depurador con todos los proyectos de la solución, como se muestra en las siguientes imágenes.
Explorador abierto:
Ventana Contenedores:
La ventana Contenedores permite ver los contenedores en ejecución, examinar las imágenes disponibles, ver variables de entorno, registros y asignaciones de puertos, inspeccionar el sistema de archivos, adjuntar un depurador o abrir una ventana de terminal dentro del entorno del contenedor.
Como puede ver, la integración entre Visual Studio 2019 y Docker está totalmente orientada a la productividad del desarrollador.
Por supuesto, también puede enumerar las imágenes mediante el comando docker images. Debería ver las imágenes webapi y webapp con las etiquetas dev creadas por la implementación automática del proyecto con Visual Studio 2019.
Registro de la solución en una instancia de Azure Container Registry (ACR)
Puede cargar las imágenes en Azure Container Registry (ACR), pero también puede usar Docker Hub o cualquier otro registro de modo que las imágenes puedan implementarse en el clúster de AKS desde ese registro.
Creación de una instancia de ACR
Ejecute el siguiente comando desde az cli:
Creación de la imagen en modo de versión
Ahora va a crear la imagen en modo Versión (listo para producción). Para ello, cambie a Versión, como se muestra en la imagen 4-46, y ejecute la aplicación como antes.
Si ejecuta el comando docker images, ve que se crean dos imágenes, una para el modo debug (desarrollo) y otra para el modo release (más reciente).
Creación de una nueva etiqueta para la imagen
Es preciso etiquetar cada imagen de contenedor con el nombre loginServer del registro. Esta etiqueta se usa para el enrutamiento al insertar imágenes de contenedor en un registro de imágenes.
Para ver el nombre loginServer desde Azure Portal, tome la información de Azure Container Registry.
También puede ejecutar el comando siguiente:
az acr list --resource-group <resource-group-name> --query "[].{acrLoginServer:loginServer}" --output table
En ambos casos, obtendrá el nombre. En nuestro ejemplo, se trata de exploredocker.azurecr.io.
Ahora puede etiquetar la imagen. Para ello, tome la imagen más reciente (la imagen de versión) con este comando:
Después de ejecutar el comando docker tag, muestre las imágenes con el comando docker images. Debería ver la imagen con la nueva etiqueta.
Inserción de la imagen en Azure ACR
Inicie sesión en Azure Container Registry.
Inserte la imagen en Azure ACR con el comando siguiente:
Este comando tarda un poco en cargar las imágenes, pero proporciona información durante el proceso. En la imagen siguiente puede ver la salida de una imagen completada y otra en curso.
Para implementar la aplicación de varios contenedores en el clúster de AKS, necesita algunos archivos .yaml de manifiesto que tengan la mayoría de las propiedades tomadas de los archivos docker-compose.yml y docker-compose.override.yml.
deploy-webapi.yml
deploy-webapp.yml
Ya está casi listo para implementar con kubectl, pero primero debe obtener las credenciales del clúster de AKS con este comando:
También debe permitir que el clúster de AKS extraiga imágenes de la instancia de ACR con este comando:
az aks update --name explore-docker-aks --resource-group explore-docker-aks-rg --attach-acr exploredocker
El comando anterior puede tardar un par de minutos en terminar. Luego use el comando kubectl apply para iniciar las implementaciones; entonces, kubectl get all indica los objetos del clúster.
Tiene que esperar un rato para que el equilibrador de carga obtenga la dirección IP externa al consultar con kubectl get services y, luego, la aplicación debe estar disponible en esa dirección, como se muestra en la siguiente imagen:
Una vez finalizada la implementación, puede acceder a la interfaz de usuario web de Kubernetes con un proxy local, mediante un túnel SSH.
En primer lugar, debe crear un elemento ClusterRoleBinding con el siguiente comando:
kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
Y luego este comando para iniciar el proxy:
Se debe abrir una ventana del explorador en http://127.0.0.1:8001 con una vista similar a esta:
Ya tiene la aplicación ASP.NET Core en ejecución en contenedores de Linux e implementada en un clúster de AKS en Azure.