ASP.NET Core Kubernetes tutorial será cubierto en esta entrada del blog, como un seguimiento de ASP.NET Core Microservicios: Primeros pasos.

En la entrada anterior, se creó un microservicio ASP.NET Core con Couchbase utilizando docker-compose para fines de desarrollo y despliegue local. Una vez listos para la producción, los servicios suelen desplegarse en servicios gestionados de Kubernetes como AKS, EKS, GKEetc.

Este tutorial de ASP.NET Core Kubernetes contiene algunos pasos que son específicos de Azure AKS, pero la mayor parte de este material se puede aplicar a cualquier clúster Kubernetes.

ASP.NET Core Kubernetes Tutorial general

En este tutorial de ASP.NET Core Kubernetes, recorreré estos pasos:

  • Crea una imagen Docker y envíala al hub Docker
  • Crear un clúster AKS en Azure
  • Despliegue de un microservicio ASP.NET Core en AKS
  • Despliega Couchbase Server en él usando un operador Kubernetes

Además, voy a cubrir algunos temas opcionales, pero muy útiles:

  • Uso de DNS SRV para permitir que el microservicio ASP.NET Core localice su base de datos
  • Configuración del reenvío de puertos con kubectl para obtener acceso por túnel a los pods AKS
  • Visualización del panel de control de Kubernetes en AKS
  • Configuración de un servicio Load Balancer en Kubernetes para exponer el microservicio ASP.NET Core a Internet.

Requisitos previos para aprovechar al máximo este tutorial:

  • Docker instalado, algunos conocimientos básicos de Docker y Docker Hub
  • Visual Studio instalado, aunque no es estrictamente necesario.
  • Una cuenta Azure (si no tiene una, puede regístrate ahora y consigue $200 en crédito de forma gratuita). Si desea utilizar EKS, GKE, etc, todavía se puede seguir a lo largo de este tutorial, pero tendrá que sustituir algunos pasos por su cuenta.
  • kubectl (para Kubernetes) instalado

Crear imagen Docker

Los despliegues de Kubernetes utilizan imágenes de contenedores. Existen muchas opciones de registros de contenedores privados (como Registro de contenedores Azure), pero para mantener las cosas simples para este tutorial, voy a utilizar viejo llano Centro Docker.

En primer lugar, empezaré por crear una imagen Docker a partir del microservicio ASP.NET Core que creé en la entrada anterior. Desde Visual Studio, esto es tan fácil como hacer clic con el botón derecho en Dockerfile y seleccionar "Build Docker Image".

ASP.NET Core Kubernetes tutorial: Visual Studio Build Docker Image

Una vez construida la imagen, aparecerá en tu repositorio local de imágenes Docker. Puedes ver este repositorio desde la línea de comandos utilizando "docker images":

El siguiente paso es empujar esta imagen a Docker hub (por favor, revise si usted no ha utilizado Docker Hub antes). Empujé mi imagen a Docker con el comando docker push mattgroves/hellomicroservice comando. Lo más probable es que desee etiquetar sus imágenes con números de versión para asegurarse de que Kubernetes está tirando de la versión exacta que desea implementar.

Si quieres saltarte este paso, puedes usar mi imagen Docker como ejemplo: mattgroves/hellomicroservice.

Escribir archivos YAML para el despliegue

Ahora que has publicado una imagen Docker, podemos empezar a escribir los archivos YAML para un despliegue Kubernetes. Este tutorial no cubrirá todo lo que hay que saber sobre Kubernetes, pero señalará las secciones dignas de mención tanto como sea posible. Para este tutorial, habrá tres archivos YAML en total creados para estar junto con los archivos YAML que se envían con el Operador Couchbase.

Cada uno de estos archivos YAML corresponde a un recurso de Kubernetes. Kubernetes orquestará el clúster en función de los recursos que cree en el clúster.

El recurso ASP.NET Core Microservice y el recurso Couchbase Cluster darán lugar cada uno a uno o varios "vainas" que se están creando en el clúster Kubernetes. Otros tipos de recursos son "secretos" (para gestionar y almacenar información sensible) y "servicios" (para exponer un conjunto de vainas), y muchos otros.

ASP.NET Core Microservicio

Empecemos por crear un archivo YAML para el propio despliegue del microservicio ASP.NET Core:

Notas sobre hello-microservice.yaml:

  • réplicas.spec: Indica a Kubernetes cuántos pods de este servicio debe crear. Para empezar, 1 está bien, pero a medida que escale, necesitará más pods (y probablemente un LoadBalancer, que se tratará más adelante).
  • spec.template.spec.containers.image: Esto le dice a Kubernetes qué imágenes utilizar. En mi caso, mattgroves/hellomicroservice es la que se construyó anteriormente en este tutorial y se desplegó en el hub de Docker.
  • env: Definen variables de entorno para cada contenedor. En lugar de codificar estas credenciales en la imagen, estoy pasando un nombre de usuario, contraseña y ConnectionString al microservicio ASP.NET Core, al igual que se hizo en la entrada del blog anterior. Más sobre Couchbase__ConnectionString y DNS SRV más adelante.
  • También puede utilizar "service.namespace" si el clúster Couchbase vive en otro espacio de nombres.

Clúster Couchbase

A continuación, se muestra un archivo YAML para la base de datos, que utiliza el método Operador Couchbase Kubernetes:

Este archivo YAML por sí mismo no es suficiente para utilizar el Operador, pero la instalación del Operador vendrá más adelante en este tutorial. Ten en cuenta también que, aunque el patrón Operator es una forma cada vez más común y eficaz de gestionar software con estado en Kubernetes, el YAML variará en función de la base de datos que estés utilizando (es decir, este YAML solo funcionará para Couchbase Server).

Notas sobre couchbase-cluster.yaml:

  • versión.specEsto especifica que imagen de contenedor Couchbase usar. Estoy usando la versión beta2. En el momento de escribir esto, el operador sólo funciona con la versión Enterprise. Esto puede cambiar pronto.
  • spec.cluster, cubos.spec, servidores.spec: definen varias configuraciones para el cluster de Couchbase Server. Por favor consulte la documentación para obtener la lista completa de ajustes. Este archivo de ejemplo sólo cubre un puñado.

Los "secretos" de Couchbase

También he creado un recurso "secreto". Los secretos son donde la información de configuración como credenciales, contraseñas, tokens de autorización, etc, se pueden almacenar y gestionar con la propia API de Kubernetes.

Este secreto contiene las credenciales que quiero que use Couchbase (así como el microservicio ASP.NET Core). Los valores están codificados en base64 (valores reales en los comentarios). Estas credenciales de ejemplo NO son suficientes para un despliegue real: por favor, cámbialas por algo más difícil de adivinar.

Tenga en cuenta la metadata.name es "cb-hellomicroservices-auth". Consulta hello-microservice.yaml y couchbase-cluster.yaml para ver cómo se hace referencia a estos secretos.

DNS SRV

Vuelve a mirar hello-microservice.yaml. En envObserva el par nombre/valor de "Couchbase__ConnectionString" y "couchbase://cb-hellomicroservices-srv". En lugar de dar a ASP.NET Core la dirección IP o URL de los nodos de Couchbase Server, estoy utilizando una cadena de conexión para dirigirlo a un Entrada DNS SRV.

En un Cluster de Couchbase, los pods que ejecutan Couchbase tienen el potencial de cambiar sus nombres de forma regular. Por lo tanto, se recomienda utilizar DNS SRV para localizar el servicio Couchbase. Afortunadamente, el Operador Autónomo de Couchbase crea una entrada DNS SRV para nosotros automáticamente.

Pronto podremos verlo en el Dashboard de Kubernetes, pero mientras tanto, sólo ten en cuenta que será el nombre del Cluster de Couchbase más "-srv". Así que en nuestro caso, es "cb-hellomicroservices-srv".

He realizado un pequeño cambio en el microservicio ASP.NET Core desde la anterior entrada del blog: Ahora estoy usando el Couchbase.Extensions.DnsDiscovery biblioteca.

Además de añadir esta librería desde NuGet, y usar ConnectionString en lugar de Server en appsettings.json, el único otro cambio que hay que hacer es AddCouchbaseDnsDiscovery dentro del ConfigureServices método.

Así de fácil. Para más información sobre DNS SRV, consulte Registros SRV en la documentación de Kubernetes.

Despliegue en AKS

En este punto, estamos listos para desplegar en AKS. Para revisar, aquí están los ingredientes que tenemos hasta ahora:

  1. Imagen Docker de ASP.NET Core en Docker Hub
  2. Archivo YAML para la implantación de ASP.NET Core
  3. Archivo YAML para el despliegue de Couchbase Cluster
  4. Archivo YAML para los secretos de Couchbase (referenciado por 2 y 3)

Para desplegar en AKS, seguí el procedimiento Inicio rápido: Despliegue de un clúster del servicio Azure Kubernetes mediante la CLI de Azure en la documentación de Microsoft. He aquí un breve resumen de los pasos que seguí:

(Si desea utilizar su línea de comandos local, asegúrese de que dispone de azure-cli instalado. De lo contrario, puede utilizar la función Shell de Azure Cloud).

En primer lugar, inicie sesión en Azure: az login. Se le pedirá que introduzca sus credenciales en su navegador web.

Una vez que haya iniciado sesión, cree primero un "grupo de recursos". Este es un grupo de organización dentro de Azure. Especifica un centro de datos (yo usé eastus).

az group create --name helloMicroserviceGroup --location eastus

A continuación, cree un clúster AKS utilizando el grupo de recursos que acaba de crear. Hay muchas opciones para esto. Para mantener este ejercicio relativamente barato y simple, elegí crear 3 nodos usando el tamaño Standard_B2s VM. Para despliegues de producción de Couchbase, es probable que necesites/quieras tamaños más potentes.

az aks create --resource-group helloMicroserviceGroup --name helloMicroserviceAks --node-count 3 --node-vm-size Standard_B2s --enable-addons monitoring --generate-ssh-keys

Este paso tardará algún tiempo en ejecutarse. Azure tardará unos 10 minutos en configurar este clúster AKS de Kubernetes.

Una vez creado el clúster, utilice obtener-credenciales para que kubectl sepa qué clúster utilizará.

az aks get-credentials --resource-group helloMicroserviceGroup --name helloMicroserviceAks

Llegados a este punto, es hora de crear algunos recursos de Kubernetes. Los seis primeros archivos YAML pueden descargarse en "Kubernetes" couchbase.com/descargas.

A continuación, utilice los tres archivos YAML que se crearon en este tutorial:

Para ver el estado de sus pods Kubernetes, utilice kubectl get pods. Los pods de Couchbase tardarán unos minutos en estar listos.

Reenvío de puertos

En la implementación anterior, ninguna de las implementaciones de Kubernetes está realmente expuesta fuera de Kubernetes. Una forma de asegurarnos de que el microservicio funciona es utilizar la función kubectl port-forward comando. Esto creará un "túnel" localhost al pod dado.

Por ejemplo, creemos un túnel desde el puerto localhost 5000 al microservicio ASP.NET Core que se ejecuta en el puerto 80:

kubectl port-forward 5000:80

En este punto, puede acceder al microservicio utilizando http://locahost:5000 en su navegador.

Del mismo modo, puede configurar un túnel para la interfaz de usuario integrada basada en web de Couchbase Server:

kubectl port-forward cb-hellomicroservices-0000 8091:8091

Y ahora puedes acceder al cluster de Couchbase usando http://localhost:8091.

El comando port-forward puede ser útil para desarrolladores y operaciones, pero sigue leyendo para ver cómo exponer un servicio de Kubernetes a Internet.

Exponer el servicio con el equilibrador de carga

Aunque el reenvío de puertos puede darnos acceso a pods fuera del clúster Kubernetes, ¿qué ocurre cuando los pods inevitablemente se bloquean, mueren y renacen con nuevas direcciones IP, nombres de pod, etc.? Kubernetes nos permite crear "servicios" para dirigirse lógicamente a uno o varios pods.

Un servicio puede especificarse en los archivos YAML, al igual que los despliegues.

También se puede crear un servicio utilizando kubectl exponer. Por ejemplo, puedo exponer un servicio de equilibrador de carga que proporcione acceso a cuantos pods ASP.NET Core haya creado mi despliegue:

kubectl expose deployments hello-microservice-app-deployment --port=80 --type=LoadBalancer

Cuando se cree el servicio, se creará una dirección IP externa. Puede ver la información del servicio con kubectl obtener servicios.

Abra esa dirección IP en un navegador web (20.NN.NN.21 en mi ejemplo), y será la carga de acceso equilibrado a los pods en su despliegue. A medida que aumenta o disminuye la escala (es decir, cambia el número de réplicas), el servicio seguirá siendo el mismo y continuará proporcionando acceso.

Cuadro de mandos de Kubernetes

Kubernetes tiene su propio panel de control de interfaz de usuario que puede ser útil para obtener una visualización de la imagen completa sin tener que recordar un montón de comandos de líneas de comandos. Para acceder a la Cuadro de mandos de Kubernetes para AKS:

Cree un ClusterRoleBinding para el panel de control de Kubernetes para habilitar el acceso:

kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

A continuación, utilice Azure's aks browse para iniciar el cuadro de mandos:

az aks browse --resource-group helloMicroserviceGroup --name helloMicroserviceAks

Esto también debería activar automáticamente su navegador web para abrir el panel de control:

Kubernetes Dashboard on AKS

Desde el panel de control, puede ver todos los pods, servicios, secretos, nodos y mucho más.

Próximos pasos

Si has estado siguiendo AKS, no olvides eliminar el grupo de recursos cuando hayas terminado. De lo contrario, continuará ejecutándose en tu cuenta Azure y te cobrará por el tiempo de computación. Puedes eliminar todo el grupo de recursos de este tutorial con un solo comando:

az group delete --name helloMicroserviceGroup

Había un montón de terreno cubierto en este tutorial ASP.NET Core Kubernetes, pero espero que suficiente para apuntar en la dirección correcta y empezar con un "Hola, mundo" ejemplo.

Al igual que en la última entrada del blog, este tutorial de ASP.NET Core Kubernetes es producto de un par de streams de codificación en directo en Twitch. Puedes ver parte 1 y parte 2 en YouTube. Y si tienes preguntas, puedes pasarte por el retransmisión en directo en Twitch la próxima vez y ¡a charlar!

Kubernetes es un tema muy amplio. Hay un montón de direcciones que usted podría ir de aquí. Aquí hay algunos enlaces que usted puede ser que desee comprobar hacia fuera:

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

Dejar una respuesta