Compartir vía


Tutorial: Implementación de aplicaciones mediante GitOps con Flux v2

En este tutorial, se explica cómo usar GitOps en un clúster de Kubernetes. GitOps con Flux v2 se habilita como extensión de clúster en clústeres de Kubernetes habilitados para Azure Arc o clústeres de Azure Kubernetes Service (AKS). Una vez instalada la extensión de clúster microsoft.flux, puede crear uno o varios recursos fluxConfigurations que sincronicen los orígenes del repositorio de Git con el clúster y concilien el clúster con el estado deseado. Con GitOps, puede usar el repositorio de Git como único origen de información para la configuración de clústeres y la implementación de aplicaciones.

En este tutorial, usaremos una configuración de GitOps de ejemplo con dos personalizaciones de Kustomize para que pueda ver cómo una personalización puede tener una dependencia en otra. Puede agregar más personalizaciones de Kustomize y dependencias según lo precise su escenario.

Antes de entrar de lleno, tómese un momento para saber cómo funciona GitOps con Flux conceptualmente.

Sugerencia

Aunque el origen de este tutorial es un repositorio de Git, Flux también proporciona compatibilidad con otros orígenes de archivos comunes, como repositorios de Helm, cubos y Azure Blob Storage.

También puede crear configuraciones de Flux mediante Bicep, plantillas de ARM o el proveedor AzAPI de Terraform. Para obtener más información, consulte Microsoft.KubernetesConfiguration fluxConfigurations.

Importante

La extensión microsoft.flux publicó la versión principal 1.0.0. Esto incluye la característica de multiinquilino. Si tiene configuraciones de GitOps Flux v2 existentes que usan una versión anterior de la extensión microsoft.flux, puede actualizar manualmente a la versión más reciente mediante la CLI de Azure: az k8s-extension create -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux --extension-type microsoft.flux -t <CLUSTER_TYPE> (use -t connectedClusters para clústeres de Arc y -t managedClusters para clústeres de AKS).

Requisitos previos

Para implementar aplicaciones mediante GitOps con Flux v2, necesita:

Para clústeres de Kubernetes habilitado para Azure Arc

Para clústeres de Azure Kubernetes Service

  • Un clúster de AKS basado en MSI que esté en funcionamiento.

    Importante

    Asegúrese de que el clúster de AKS se crea con MSI (no SPN), porque la extensión microsoft.flux no funciona con clústeres de AKS basados en SPN. En el caso de los nuevos clústeres de AKS creados con az aks create, el clúster se basa en MSI de manera predeterminada. Para los clústeres basados en SPN ya creados que deban convertirse en MSI, ejecute az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Para más información, consulte Uso de una identidad administrada en AKS.

  • Permisos de lectura y escritura en el tipo de recurso Microsoft.ContainerService/managedClusters.

Común a los dos tipos de clúster

  • Permisos de lectura y escritura en estos tipos de recurso:

    • Microsoft.KubernetesConfiguration/extensions
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • Versión 2.15 o posterior de la CLI de Azure. Instale la CLI de Azure o utilice los siguientes comandos para actualizarla a la versión más reciente:

    az version
    az upgrade
    
  • El cliente de línea de comandos de Kubernetes, kubectl. Si usa Azure Cloud Shell, kubectl ya está instalado.

    Instale kubectl localmente mediante el comando az aks install-cli:

    az aks install-cli
    
  • Registro de los siguientes proveedores de recursos de Azure:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    El registro es un proceso asincrónico y debe finalizar en 10 minutos. Para supervisar el proceso de registro, use el comando siguiente:

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

Compatibilidad de versiones y regiones

Actualmente, GitOps se puede usar en todas las regiones en que se admita Kubernetes habilitado para Azure Arc. GitOps se admite actualmente en un subconjunto de las regiones que admite AKS. La disponibilidad del servicio GitOps se irá ampliando a nuevas regiones con regularidad.

Se admiten tanto la versión más reciente de la extensión Flux v2 como las dos versiones anteriores (N-2). Por lo general, se recomienda usar la versión más reciente de la extensión.

Requisitos de red

Los agentes de GitOps requieren un TCP saliente (de salida) al origen del repositorio en el puerto 22 (SSH) o en el puerto 443 (HTTPS) para funcionar. Los agentes también requieren acceso a las siguientes direcciones URL de salida:

Punto de conexión (DNS) Descripción
https://management.azure.com Necesario para que el agente se comunique con el servicio de configuración de Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Punto de conexión de plano de datos para que el agente inserte información de la configuración de estado y recuperación de cambios. Depende de <region> (las regiones mencionadas anteriormente donde está disponible).
https://login.microsoftonline.com Necesario para capturar y actualizar tokens de Azure Resource Manager.
https://mcr.microsoft.com Necesario para extraer imágenes de contenedor para los controladores de Flux.

Habilitación de extensiones de la CLI

Instale los paquetes de extensión de la CLI k8s-configuration y k8s-extension más recientes:

az extension add -n k8s-configuration
az extension add -n k8s-extension

Para actualizar estos paquetes a las versiones más recientes:

az extension update -n k8s-configuration
az extension update -n k8s-extension

Para ver una lista de todas las extensiones de la CLI de Azure instaladas y sus versiones, utilice el siguiente comando:

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.2.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     1.5.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.1.0

Sugerencia

Para obtener ayuda para resolver los errores, consulte la sección GitOps (Flux v2) de Solucionar problemas de extensión para clústeres Kubernetes habilitados para Azure Arc.

Aplicación de una configuración de Flux

Use la extensión k8s-configuration de la CLI de Azure (o Azure Portal) para habilitar GitOps en un clúster de Kubernetes habilitado para Arc o de AKS. Para ver una demostración, use el repositorio público gitops-flux2-kustomize-helm-mt.

Importante

El repositorio de la demostración está diseñado para simplificar el uso de este tutorial e ilustrar algunos principios clave. Para mantenerse actualizado, el repositorio puede recibir cambios importantes ocasionalmente a partir de actualizaciones de versiones. Estos cambios no afectarán a la nueva aplicación de este tutorial, solo a las aplicaciones de tutoriales anteriores que no se hayan eliminado. Para obtener información sobre cómo controlar estos cambios, consulte la declinación de responsabilidades de cambios importantes.

En el siguiente ejemplo, se usa un comando az k8s-configuration flux create para aplicar una configuración de Flux a un clúster mediante los valores y la configuración siguientes:

  • El grupo de recursos que contiene el clúster es flux-demo-rg.
  • El nombre del clúster de Azure Arc es flux-demo-arc.
  • El tipo de clúster es de Azure Arc (-t connectedClusters), pero este ejemplo también funciona con AKS (-t managedClusters).
  • El nombre de la configuración de Flux es cluster-config.
  • El espacio de nombres para la instalación de la configuración es cluster-config.
  • La dirección URL del repositorio público de Git es https://github.com/Azure/gitops-flux2-kustomize-helm-mt.
  • La rama del repositorio de Git es main.
  • El ámbito de la configuración es cluster. Este ámbito concede permisos a los operadores para realizar cambios en todo el clúster. Para usar el ámbito namespace con este tutorial, consulte los cambios necesarios.
  • Se especifican dos personalizaciones de Kustomize con los nombres infra y apps. Cada una está asociada a una ruta de acceso en el repositorio.
  • La personalización apps depende de infra, es decir, la personalización infra debe finalizar antes de que se ejecute apps.
  • Establezca prune=true en las dos personalizaciones. Esta configuración garantiza que los objetos que Flux implementó en el clúster se limpien si se quitan del repositorio o si la configuración o las personalizaciones de Flux se eliminan.
az k8s-configuration flux create -g flux-demo-rg \
-c flux-demo-arc \
-n cluster-config \
--namespace cluster-config \
-t connectedClusters \
--scope cluster \
-u https://github.com/Azure/gitops-flux2-kustomize-helm-mt \
--branch main  \
--kustomization name=infra path=./infrastructure prune=true \
--kustomization name=apps path=./apps/staging prune=true dependsOn=\["infra"\]

La extensión microsoft.flux se instala en el clúster (si aún no se instaló en una implementación de GitOps anterior).

Sugerencia

El comando az k8s-configuration flux create implementa la extensión microsoft.flux en el clúster y crea la configuración. En algunos escenarios, es posible que desee crear la instancia de extensión Flux por separado antes de crear los recursos de configuración. Para hacerlo, use el comando az k8s-extension create para crear una instancia de la extensión en el clúster.

Cuando se instala la configuración de Flux por primera vez, el estado de cumplimiento inicial puede ser Pending o Non-compliant porque la conciliación sigue en curso. Después de aproximadamente un minuto, puede volver a consultar la configuración para ver el estado de cumplimiento final.

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

Ejecute el siguiente comando para confirmar que la implementación se ha realizado correctamente:

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

Si la implementación es correcta, se crean los siguientes espacios de nombres:

  • flux-system: contiene los controladores de extensión de Flux.
  • cluster-config: contiene los objetos de configuración de Flux.
  • nginx, podinfo, redis: espacios de nombres para las cargas de trabajo que se describen en los manifiestos del repositorio de Git.

Para confirmar los espacios de nombres, ejecute el siguiente comando:

kubectl get namespaces

El espacio de nombres flux-system contiene los objetos de extensión de Flux:

  • Controladores de Flux para Azure: fluxconfig-agent, fluxconfig-controller
  • Controladores de Flux para OSS: source-controller, kustomize-controller, helm-controller, notification-controller

Los pods de los controladores y el agente de Flux deben estar en ejecución. Confirme esto con el siguiente comando:

kubectl get pods -n flux-system

NAME                                      READY   STATUS    RESTARTS   AGE
fluxconfig-agent-9554ffb65-jqm8g          2/2     Running   0          21m
fluxconfig-controller-9d99c54c8-nztg8     2/2     Running   0          21m
helm-controller-59cc74dbc5-77772          1/1     Running   0          21m
kustomize-controller-5fb7d7b9d5-cjdhx     1/1     Running   0          21m
notification-controller-7d45678bc-fvlvr   1/1     Running   0          21m
source-controller-df7dc97cd-4drh2         1/1     Running   0          21m

El espacio de nombres cluster-config tiene los objetos de configuración de Flux.

kubectl get crds

NAME                                                   CREATED AT
alerts.notification.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
arccertificates.clusterconfig.azure.com                2022-03-28T21:45:19Z
azureclusteridentityrequests.clusterconfig.azure.com   2022-03-28T21:45:19Z
azureextensionidentities.clusterconfig.azure.com       2022-03-28T21:45:19Z
buckets.source.toolkit.fluxcd.io                       2022-04-06T17:15:48Z
connectedclusters.arc.azure.com                        2022-03-28T21:45:19Z
customlocationsettings.clusterconfig.azure.com         2022-03-28T21:45:19Z
extensionconfigs.clusterconfig.azure.com               2022-03-28T21:45:19Z
fluxconfigs.clusterconfig.azure.com                    2022-04-06T17:15:48Z
gitconfigs.clusterconfig.azure.com                     2022-03-28T21:45:19Z
gitrepositories.source.toolkit.fluxcd.io               2022-04-06T17:15:48Z
helmcharts.source.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmreleases.helm.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmrepositories.source.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imagepolicies.image.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
imagerepositories.image.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imageupdateautomations.image.toolkit.fluxcd.io         2022-04-06T17:15:48Z
kustomizations.kustomize.toolkit.fluxcd.io             2022-04-06T17:15:48Z
providers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
receivers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
volumesnapshotclasses.snapshot.storage.k8s.io          2022-03-28T21:06:12Z
volumesnapshotcontents.snapshot.storage.k8s.io         2022-03-28T21:06:12Z
volumesnapshots.snapshot.storage.k8s.io                2022-03-28T21:06:12Z
websites.extensions.example.com                        2022-03-30T23:42:32Z

Confirme otros detalles de la configuración mediante los siguientes comandos.

kubectl get fluxconfigs -A

NAMESPACE        NAME             SCOPE     URL                                                       PROVISION   AGE
cluster-config   cluster-config   cluster   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   Succeeded   44m
kubectl get gitrepositories -A

NAMESPACE        NAME             URL                                                       READY   STATUS                                                            AGE
cluster-config   cluster-config   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   True    Fetched revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   45m
kubectl get helmreleases -A

NAMESPACE        NAME      READY   STATUS                             AGE
cluster-config   nginx     True    Release reconciliation succeeded   66m
cluster-config   podinfo   True    Release reconciliation succeeded   66m
cluster-config   redis     True    Release reconciliation succeeded   66m
kubectl get kustomizations -A


NAMESPACE        NAME                   READY   STATUS                                                            AGE
cluster-config   cluster-config-apps    True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m
cluster-config   cluster-config-infra   True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m

Las cargas de trabajo se implementan desde manifiestos del repositorio de Git.

kubectl get deploy -n nginx

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller                   1/1     1            1           67m
nginx-ingress-controller-default-backend   1/1     1            1           67m

kubectl get deploy -n podinfo

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
podinfo   1/1     1            1           68m

kubectl get all -n redis

NAME                 READY   STATUS    RESTARTS   AGE
pod/redis-master-0   1/1     Running   0          68m

NAME                     TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/redis-headless   ClusterIP   None          <none>        6379/TCP   68m
service/redis-master     ClusterIP   10.0.13.182   <none>        6379/TCP   68m

NAME                            READY   AGE
statefulset.apps/redis-master   1/1     68m

Control de los controladores que se implementan con la extensión de clúster de Flux

En algunos escenarios, es posible que desee cambiar qué controladores de Flux se instalan con la extensión del clúster de Flux.

De forma predeterminada, se instalan los controladores source, helm, kustomize y notification de Flux. Hay que habilitar expresamente los controladores image-automation y image-reflector, que se usan para actualizar un repositorio de Git cuando hay nuevas imágenes de contenedor disponibles.

Puede usar el comando k8s-extension para cambiar las opciones predeterminadas:

  • --config source-controller.enabled=<true/false> (valor predeterminado: true)
  • --config helm-controller.enabled=<true/false> (valor predeterminado: true)
  • --config kustomize-controller.enabled=<true/false> (valor predeterminado: true)
  • --config notification-controller.enabled=<true/false> (valor predeterminado: true)
  • --config image-automation-controller.enabled=<true/false> (valor predeterminado: false)
  • --config image-reflector-controller.enabled=<true/false> (valor predeterminado: false)

Por ejemplo, para deshabilitar las notificaciones, puede establecer notification-controller.enabled en false.

Este comando de ejemplo instala los controladores image-reflector y image-automation. Si la extensión de Flux se creó automáticamente cuando se creó una configuración de Flux por primera vez, el nombre de la extensión es flux.

az k8s-extension create -g <cluster_resource_group> -c <cluster_name> -t <connectedClusters or managedClusters or provisionedClusters> --name flux --extension-type microsoft.flux --config image-automation-controller.enabled=true image-reflector-controller.enabled=true

Uso de la identidad de Kubelet como método de autenticación de clústeres de AKS

En los clústeres de AKS, una de las opciones de autenticación que se usará es la identidad de kubelet. De forma predeterminada, AKS crea su propia identidad de kubelet en el grupo de recursos administrado. Si lo prefiere, puede usar una identidad administrada de kubelet previamente creada. Para ello, agregue el parámetro --config useKubeletIdentity=true en el momento de instalación de la extensión de Flux.

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config useKubeletIdentity=true

Guía de incorporación de Red Hat OpenShift

Los controladores de Flux requieren una restricción de contexto de seguridadnoroot para aprovisionar pods en el clúster correctamente. Estas restricciones se deben agregar al clúster antes de implementar la extensión microsoft.flux.

NS="flux-system"
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:kustomize-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:helm-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:source-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:notification-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-automation-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-reflector-controller

Paramás información sobre la guía de OpenShift para incorporar Flux, consulte la documentación de Flux.

Trabajar con parámetros

Flux admite muchos parámetros para habilitar varios escenarios. Para obtener una descripción de todos los parámetros que Flux admite, consulte la documentación oficial de Flux. Flux en Azure no admite aún todos los parámetros. Háganos saber si falta algún parámetro que usted necesite en la implementación de Azure.

Para obtener información sobre los parámetros disponibles y cómo usarlos, consulte parámetros compatibles con GitOps (Flux v2).

Trabajar con la referencia de autenticación secreta local

Para usar una referencia de autenticación secreta local, el secreto debe existir en el mismo espacio de nombres donde se implementará fluxConfiguration. El secreto también debe contener todos los parámetros de autenticación necesarios para el origen.

Para obtener información sobre cómo crear secretos para varios orígenes fluxConfiguration, consulte Secreto local para la autenticación con el origen.

Administración de la configuración de un clúster con el controlador de Kustomize de Flux

El controlador Kustomize de Flux se instala como parte de la extensión de clúster microsoft.flux. Permite la administración declarativa de la configuración de un clúster y la implementación de aplicaciones mediante manifiestos de Kubernetes sincronizados desde un repositorio de Git. Estos manifiestos de Kubernetes pueden incluir opcionalmente un archivo kustomize.yaml.

Para obtener más información del uso, consulte los siguientes recursos:

Administración de versiones de gráficos de Helm con el controlador de Helm de Flux

El controlador de Helm de Flux se instala como parte de la extensión de clúster microsoft.flux. Permite la administración declarativa de versiones de gráficos de Helm con manifiestos de Kubernetes que se mantienen en un repositorio de Git.

Para obtener más información del uso, consulte los siguientes recursos:

Sugerencia

Debido a la forma en que Helm controla los archivos de índice, el procesamiento de gráficos de Helm es una operación costosa y puede ocupar una superficie de memoria muy alta. Como resultado, la conciliación de un gran número de gráficos de Helm a la vez puede provocar errores OOMKilled y picos de memoria. De forma predeterminada, el controlador establece su límite de memoria en 1 Gi y sus solicitudes de memoria, en 64 Mi. Para aumentar este límite y las solicitudes debido a un elevado número de conciliaciones de gráficos de Helm de gran tamaño, ejecute el siguiente comando tras instalar la extensión de microsoft.flux:

az k8s-extension update -g <resource-group> -c <cluster-name> -n flux -t connectedClusters --config source-controller.resources.limits.memory=2Gi source-controller.resources.requests.memory=300Mi

Uso del origen GitRepository para gráficos de Helm

Si los gráficos de Helm se almacenan en el origen GitRepository que configura como parte del recurso fluxConfigurations, puede indicar que el origen configurado debe usarse como origen de los gráficos de Helm. Para ello, debe agregar clusterconfig.azure.com/use-managed-source: "true" al archivo HelmRelease.yaml, como se muestra en el siguiente ejemplo:

---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: somename
  namespace: somenamespace
  annotations:
    clusterconfig.azure.com/use-managed-source: "true"
spec:
  ...

Al usar esta anotación, el elemento HelmRelease implementado se revisa con la referencia al origen configurado. Actualmente, solo se admite el origen GitRepository.

Detección de desviación del Helm

La detección de desviación para las versiones de Helm no está activada por defecto. A partir de la microsoft.flux v1.7.5, puede activar la detección de deriva de Helm ejecutando el siguiente comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.detectDrift=true 

Sustitución estricta de variables posteriores a la compilación

La Sustitución estricta de variables posteriores a la compilación está disponible a partir de microsoft.flux v1.13.1.

Para crear una extensión de Flux con una directiva de sustitución estricta habilitada, ejecute este comando:

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config kustomize-controller.strict-substitution-mode=true

Para actualizar una extensión de Flux existente para habilitar una directiva de sustitución estricta, ejecute este comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.strict-substitution-mode=true

Escalado vertical

La compatibilidad con el escalado vertical está disponible a partir de microsoft.flux v1.12.0. Actualmente, solo se admiten de forma nativa parámetros específicos descritos en la Documentación de escalado vertical de Flux. Otros parámetros se pueden aplicar manualmente al clúster.

Para aumentar los límites de recursos en los controladores más allá del los límites actuales, ejecute este comando y cambie el tipo de recurso y el valor específicos según sea necesario:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.resources.limits.memory=2Gi kustomize-controller.resources.limits.cpu=2000m

Para aumentar el número de reconciliaciones que se pueden realizar en paralelo, ejecute este comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.concurrent=6 kustomize-controller.requeue-dependency=50s

Para habilitar la compilación en memoria, ejecute este comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.enable-in-memory-build=true

Vigilancia OOM de Helm

A partir de la microsoft.flux v1.7.5, puede activar la vigilancia OOM de Helm. Para más información, consulte Habilitar la detección de OOM cercano a Helm.

Asegúrese de revisar las posibles estrategias de corrección y aplicarlas según sea necesario al activar esta función.

Para habilitar la vigilancia OOM, ejecute el siguiente comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.outOfMemoryWatch.enabled=true helm-controller.outOfMemoryWatch.memoryThreshold=70 helm-controller.outOfMemoryWatch.interval=700ms

Si no especifica valores para memoryThreshold y outOfMemoryWatch, el umbral de memoria por defecto se establece en 95 %, con el intervalo en el que comprobar la utilización de la memoria establecido en 500 ms.

Parámetros configurables de nivel de registro

De forma predeterminada, el log-level para los controladores Flux se establece en info. A partir de microsoft.flux v1.8.3, puede modificar esta configuración predeterminada mediante el comando k8s-extension como se indica a continuación:

--config helm-controller.log-level=<info/error/debug>
--config source-controller.log-level=<info/error/debug>
--config kustomize-controller.log-level=<info/error/debug>
--config notification-controller.log-level=<info/error/debug>
--config image-automation-controller.log-level=<info/error/debug>
--config image-reflector-controller.log-level=<info/error/debug>

Los valores válidos son debug, info o error. Por ejemplo, para cambiar el log-level del source-controller y kustomize-controller, use el siguiente comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config source-controller.log-level=error kustomize-controller.log-level=error

A partir de microsoft.flux v1.9.1, fluxconfig-agent y fluxconfig-controller admiten niveles de registro info y error (pero no debug). Estos se pueden modificar mediante el comando k8s-extension como se indica a continuación:

--config fluxconfig-agent.log-level=<info/error>
--config fluxconfig-controller.log-level=<info/error>

Por ejemplo, el comando siguiente cambia log-level a error:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config fluxconfig-agent.log-level=error fluxconfig-controller.log-level=error

SSH-RSA de Azure DevOps en desuso

Azure DevOps anunció el desuso de SSH-RSA como método de cifrado compatible para conectarse a repositorios de Azure mediante SSH. Si usa claves SSH para conectarse a repositorios de Azure en configuraciones de Flux, se recomienda pasar a claves RSA-SHA2-256 o RSA-SHA2-512 más seguras.

Al conciliar las configuraciones de Flux, es posible que vea un mensaje de error que indica que ssh-rsa está a punto de quedarse en desuso o no es compatible. Si es así, actualice el algoritmo de clave de host que se usa para establecer conexiones SSH a repositorios de Azure DevOps desde el Flux source-controller y image-automation-controller (si está habilitado) mediante el comando az k8s-extension update. Por ejemplo:

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config source-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config image-automation-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

Para obtener más información sobre el desuso de SSH-RSA de Azure DevOps, consulte Fin del soporte de SSH-RSA para Azure Repos.

Configurar anotaciones en pods de extensión Flux

Al configurar una solución distinta de Azure Firewall, se requieren reglas de red y FQDN o aplicación para un clúster de AKS. A partir de microsoft.flux v1.11.1, los pods de controlador de Flux ahora pueden establecer la anotación kubernetes.azure.com/set-kube-service-host-fqdn en sus especificaciones de pod. Esto permite el tráfico al nombre de dominio del servidor de API incluso cuando existe un firewall de capa 7, lo que facilita las implementaciones durante la instalación de la extensión. Para configurar esta anotación al usar la extensión Flux, use los siguientes comandos.

# Create flux extension with annotation

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config setKubeServiceHostFqdn=true
    
# Update flux extension with annotation

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config setKubeServiceHostFqdn=true

Identidad de carga de trabajo en clústeres de AKS

A partir de microsoft.flux v1.8.0, puede crear configuraciones de Flux en clústeres de AKS con la identidad de carga de trabajo habilitada. Para ello, modifique la extensión de Flux como se muestra en los pasos siguientes.

  1. Recupere la dirección URL del emisor de OIDC del clúster.

  2. Cree una identidad administrada y anote su identificador de cliente.

  3. Cree la extensión de Flux en el clúster mediante el siguiente comando:

    az k8s-extension create --resource-group <resource_group_name> --cluster-name <aks_cluster_name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config workloadIdentity.enable=true workloadIdentity.azureClientId=<user_assigned_client_id>
    
  4. Establezca una credencial de identidad federada. Por ejemplo:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"source-controller" --audience api://AzureADTokenExchange
    
    # For image-reflector controller if you plan to enable it during extension creation, it is not deployed by default
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-controller" --audience api://AzureADTokenExchange
    
    # For kustomize-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"kustomize-controller" --audience api://AzureADTokenExchange
    
  5. Asegúrese de que el recurso personalizado que necesita usar la identidad de carga de trabajo establece el valor .spec.provider en azure en el manifiesto. Por ejemplo:

    apiVersion: source.toolkit.fluxcd.io/v1beta2
    kind: HelmRepository
    metadata:
      name: acrrepo
    spec:
      interval: 10m0s
      type: <helm_repository_type>
      url: <helm_repository_link>
      provider: azure
    
  6. Asegúrese de proporcionar los permisos adecuados para la identidad de carga de trabajo para el recurso que desea que extraiga el controlador source-controller o image-reflector. Por ejemplo, si usa Azure Container Registry, se requieren los permisos AcrPull.

Eliminación de la configuración de Flux y la extensión

Use los siguientes comandos para eliminar las configuraciones de Flux y, si lo desea, la extensión Flux.

Eliminar las configuraciones de Flux

El comando siguiente elimina el recurso fluxConfigurations en Azure y los objetos de configuración de Flux en el clúster. Dado que la configuración de Flux se creó originalmente con el parámetro prune=true para la kustomization, todos los objetos creados en el clúster en función de los manifiestos del repositorio de Git se quitan cuando se quita la configuración de Flux. Sin embargo, este comando no quita la propia extensión de Flux.

az k8s-configuration flux delete -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters --yes

Eliminación de la extensión de clúster de Flux

Al eliminar la extensión Flux, se quitan tanto el recurso de extensión microsoft.flux en Azure como los objetos de extensión Flux del clúster.

Importante

Asegúrese de eliminar todas las configuraciones de Flux del clúster antes de eliminar la extensión Flux. La eliminación de la extensión sin eliminar primero las configuraciones de Flux puede dejar el clúster en una condición inestable.

Si la extensión Flux se creó automáticamente cuando se creó la configuración de Flux por primera vez, el nombre de la extensión es flux.

az k8s-extension delete -g flux-demo-rg -c flux-demo-arc -n flux -t connectedClusters --yes

Sugerencia

Estos comandos usan -t connectedClusters, lo cual es adecuado con un clúster de Kubernetes habilitado para Azure Arc. Con un clúster de AKS, use mejor -t managedClusters.

Pasos siguientes