Desplegando un cluster Kubernetes en Azure

Estoy seguro que ya habrás escuchado hablar de Kubernetes antes. Una plataforma basada en código abierto creada por Google allá por el lejano 2013. El objetivo de Kubernetes no es otro que hacer la vida más fácil de aquellos que trabajamos en el desarrollo de aplicaciones basadas en contenedores Docker al orquestar o coordinar la gestión de múltiples desarrollos simultáneamente a gran escala en un mismo proyecto.

Ventajas de Kubernetes

Debido a que Kubernetes presenta nuevos conceptos resulta inevitable preguntar cuáles son sus beneficios a largo plazo. Este es un resumen de algunas de las razones por las que ejecutar aplicaciones dentro de Kubernetes se vuelve más fácil en comparación con otras soluciones:

  • Kubernetes administra el estado de la aplicación, la replicación, el equilibrio de carga y la asignación de recursos de hardware de manera desatendida.

  • Kubernetes facilita el despliegue de aplicaciones preconfiguradas con gráficos Helm.

  • Kubernetes simplifica la gestión del almacenamiento y otros recursos relacionados con las aplicaciones.

  • Las aplicaciones de Kubernetes pueden ejecutarse en entornos multinube o híbridos.

Azure Kubernetes Service

Si estás pensando en implementar un cluster de Kubernetes en la nube posiblemente habrás pensado en utilizar Azure Kubernetes Service (AKS). Este servicio ofrecido por Microsoft viene a simplificar en gran medida el proceso de implementación, por un lado, y su posterior administración.

Al ser un servicio de Kubernetes hospedado, Azure controla tareas críticas como la supervisión del estado y el mantenimiento. Liberando al usuario de pesadas tareas y dejando únicamente bajo su responsabilidad su administración y mantenimientos de los nodos de agente.

Otra ventaja es que AKS es gratuito; solo se paga por los nodos de agente en los clústeres, no por los maestros.

Para entender un poco más cómo funciona AKS debemos tener en cuenta las siguientes consideraciones:

Clústeres y nodos: Los nodos de AKS se ejecutan en máquinas virtuales de Azure (VM). Con los nodos de AKS, podemos conectar el almacenamiento a nodos y pods, actualizar los componentes de clúster e incluso usar GPUs. Además AKS admite clústeres de Kubernetes que ejecutan varios grupos de nodos, con el fin de que se puedan usar sistemas operativos mixtos y contenedores de Windows Server.

Escalado de pods y nodos de clúster: A medida que cambia la demanda de recursos, el número de pods o nodos de clúster que ejecutan servicios se escala vertical u horizontalmente. Podemos ajustar esto mediante el escalador automático del pod horizontal o el escalador automático del clúster en función de las demanda disponible y asegurarnos de usar solo los recursos necesarios.

Actualizaciones de nodos de clúster: AKS ofrece varias versiones de Kubernetes. A medida que hay nuevas versiones disponibles en AKS, podemos actualizar el clúster en cualquier momento mediante Azure Portal o la CLI de Azure. Durante el proceso de actualización, los nodos se acordonan y vacían minuciosamente para minimizar las interrupciones en las aplicaciones en ejecución.

Creación de un clúster de AKS

Ahora vamos a ver cómo crear nuestro primer cluster Kubernetes usando AKS.

Lo primero que necesitamos es acceder al portal de Azure y en la página principal seleccionaremos la opción de crear un recurso. Una vez aquí seleccionaremos Containers > Kubernetes Service.

En la página de Datos básicos, seleccionamos y definimos las siguientes opciones de configuración:

  • Detalles del proyecto:

    • Seleccionamos nuestra suscripción de Azure.

    • También debemos seleccionar o crear nuestro grupo de recursos de Azure, como por ejemplo myResourceGroup.

  • Detalles del clúster:

    • Aquí escribiremos el nombre del clúster de Kubernetes, como myAKSCluster.

    • En la Región y Versión de Kubernetes, seleccionamos los valores adecuados para nuestro clúster de AKS según nuestras preferencias.

  • Grupo de nodos principal:

    • Deja los valores predeterminados seleccionados.

Ahora podemos pulsar en “Review + create” pero nuestro consejo es seleccionar “Siguiente: Grupos de nodos”. Allí podemos mantener  las opciones predeterminadas de los grupos de nodos. En la parte inferior de la pantalla, hacemos clic en “Siguiente: Autenticación”. En la página Autenticación, configuramos las siguientes opciones:

Para crear una identidad de clúster; para podemos:

  • Dejar el campo Autenticación con System-assinged managed identity (Identidad administrada por el sistema) o Elegir Entidad de servicio para usar una entidad de servicio.

  • Seleccionar Entidad de servicio predeterminada (nueva) para crear una entidad de servicio predeterminada.

  • También podemos elegir Configurar la entidad de servicio para usar una existente. Deberá proporcionar el identificador y el secreto de cliente del SPN de la entidad de servicio existente.

  • Habilitar la opción de control de acceso basado en rol de Kubernetes (Kubernetes RBAC) para proporcionar un control más preciso sobre el acceso a los recursos de Kubernetes implementados en el clúster de AKS.

De forma predeterminada, se usa la red Básica y está habilitado Azure Monitor para contenedores.

Y ya casi lo tenemos. Solo nos queda hacer clic en Revisar y crear y, luego, en Crear cuando finalice la validación.

El clúster de AKS tarda unos minutos en crearse. Una vez finalizada la implementación, vaya al recurso; puede hacerlo de dos maneras:

  • Haciendo clic en Ir al recurso.

  • O mediante grupo de recursos del clúster de AKS y seleccione el recurso de AKS. Por ejemplo, en el panel de clúster siguiente, buscamos por myResourceGroup y seleccionamos el recurso myAKSCluster.

Conectarse al clúster

Ahora que tenemos nuestro clúster Kubernetes funcionando, el siguiente paso por su administración. Para ello debemos conectarnos. La más recomendada consiste en usar kubectl, el cliente de línea de comandos de Kubernetes. Si usamos la Cloud Shell de Azure, no tenemos que hacer nada, pues ya está instalado por defecto.

Para abrir la consola de comandos, en el portal de Azure pulsaremos en el icono de la parte superior derecha.  Como seguramente no es la primera vez que la abrimos no hay necesidad de seleccionar sobre que subscripción va a trabajar, pero sí que tendremos que sacar las credenciales del grupo de recursos que hemos creado anteriormente.

Para configurar kubectl para conectarse a su clúster de Kubernetes, usaremos el comando az aks get-credentials. El siguiente comando descarga las credenciales y configura la CLI de Kubernetes para usarlas.

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Para comprobar la conexión al clúster, use el comando kubectl get para devolver una lista de los nodos del clúster.

kubectl get nodes

La salida muestra el nodo único creado en los pasos anteriores. Asegúrate de que el estado del nodo es Listo (Ready):

NAME                                STATUS   ROLES   AGE   VERSION

aks-agentpool-12345678-vmss000000   Ready    agent   23m   v1.19.11

aks-agentpool-12345678-vmss000001   Ready    agent   24m   v1.19.11

Si todo es correcto, ya lo tenemos. Nuestro cluster Kubernetes está listo para comenzar a trabajar en nuestro proyecto. Por supuesto me dejo muchas cosas en el tintero, desde la instalación de aplicaciones a la configuración necesaria para la recuperación de desastres pasando por la creación de alertas y monitorización. Pero de eso ya hablaremos en otro capítulo ;)