Integración nativa de Flux con AKS

En los últimos artículos he compartido contigo algunas de las bondades de Flux y cómo te ayuda en una cultura GitOps. Recientemente se publicó la integración nativa de AKS con Flux v2 (en Preview) y es por ello que hoy quiero mostrarte cómo configurarlo en tu clúster.

Registrar los proveedores

Lo primero que necesitas para que todo funcione correctamente es registrar los siguientes proveedores, si todavía no los tienes:

# Register providers
az provider register --namespace Microsoft.Kubernetes
az provider register --namespace Microsoft.KubernetesConfiguration

# AKS
az feature register --namespace Microsoft.ContainerService --name AKS-ExtensionManager
az provider register --namespace Microsoft.ContainerService

#Check status
az provider show -n Microsoft.Kubernetes --query "registrationState"
az provider show -n Microsoft.ContainerService --query "registrationState"
az provider show -n Microsoft.KubernetesConfiguration --query "registrationState"

Una vez que el estado de estos son Registered ya podemos avanzar con el siguiente paso.

Creación de un clúster de AKS

Si no tienes un clúster en el que probar, puedes crear uno fácilmente con los siguientes comandos:

# Variables
RESOURCE_GROUP="flux-aks-integration"
LOCATION="northeurope"
AKS_CLUSTER_NAME="flux-aks-integration"

# Create resource group
az group create --name $RESOURCE_GROUP --location $LOCATION

# Create a AKS cluster
az aks create --resource-group $RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys

# Get AKS credentials
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER_NAME

Instalar la extensión k8s-configuration a Azure CLI

Para poder gestionar las configuraciones con Flux a través de la línea de comandos, necesitas instalar dos extensiones:

# Enable CLI extensions
az extension add --name k8s-configuration
az extension add --name k8s-extension

Ahora ya tienes todos los prerrequisitos necesarios para que todo vaya sobre ruedas. Ahora llega el momento de probarlo 😃

Ejemplo de WordPress con Kustomize

En este artículo voy a mostrarte cómo se crea una configuración de Flux a través de Azure CLI, pero que sepas que también tienes una sección nueva llamada GitOps (Preview), en el recurso de AKS en el portal, que te permite hacer también la misma configuración:

AKS – nueva sección de GitOps en preview

Para este ejemplo voy a usar el despliegue de WordPress que utilicé para explicarte Kustomize, con la personalización para prod. Para generar la configuración de Flux través de Azure CLI lo haríamos de la siguiente manera:

# Generate a Flux Configuration
az k8s-configuration flux create \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name wordpress-demo \
--namespace flux-system \
--cluster-type managedClusters \
--scope cluster \
-u https://github.com/0GiS0/kustomize-demo \
--branch main \
--kustomization name=prod-env path=prod prune=true

Desglosando el comando tenemos lo siguiente:

  • Como siempre, necesitamos el grupo de recursos y el nombre del clúster sobre el cuál queremos hacer la configuración.
  • name: será el nombre que des a la configuración.
  • namespace: es donde se guardará la configuración que vas a crear. Si el mismo no existe se crea durante el despliegue.
  • cluster-type: en este caso he indicado managedClusters porque esta característica también es posible utilizarla con Azure ARC.
  • scope: puedes generar configuraciones a nivel de clúster o a nivel de namespace. En este caso necesito que sea a nivel de clúster, porque tengo que crear un namespace y en caso contrario no tendría permisos para hacerlo.
  • u: se trata de la URL donde tengo el repositorio git que voy a utilizar para la configuración. Para este ejemplo he utilizado la opción sencilla, que es un repositorio público, pero también es posible configurar repos privados.
  • branch: la rama del repo que quieres utilizar.
  • kustomization: la personalización en sí, donde en este caso la he llamado prod-env, le digo el path dentro de mi repo que voy a utilizar y el parámetro prune, para que haga limpieza si fuera necesario.

Una vez lanzado, como es un clúster nuevo y no tiene todavía instalada la extensión de Flux será lo primero que haga y acto seguido dará de alta la configuración definida. Una vez que finalice podrás ver que todo está en su sitio:

k get all -n prod

también podrás ver la nueva configuración a través de la sección de GitOps:

y revisar qué cosas se han desplegado bien y cuáles no tan bien:

¡Saludos!