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
Un clúster conectado a Kubernetes habilitado para Azure Arc que esté en funcionamiento. A partir de la
microsoft.flux
versión 1.7.0, se admiten clústeres basados en ARM64.Aprenda a conectar un clúster de Kubernetes a Azure Arc. Si necesita conectarse a través de un proxy de salida, asegúrese de instalar los agentes de Arc con la configuración del proxy.
Permisos de lectura y escritura en el tipo de recurso
Microsoft.Kubernetes/connectedClusters
.
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 conaz 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, ejecuteaz 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 comandoaz 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 ámbitonamespace
con este tutorial, consulte los cambios necesarios. - Se especifican dos personalizaciones de Kustomize con los nombres
infra
yapps
. Cada una está asociada a una ruta de acceso en el repositorio. - La personalización
apps
depende deinfra
, es decir, la personalizacióninfra
debe finalizar antes de que se ejecuteapps
. - 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:
- Controlador de Kustomize de Flux
- Documentación de referencia de Kustomize
- Archivo de personalización con Kustomize
- Proyecto Kustomize
- Guías de Kustomize
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:
- Flux para usuarios de Helm
- Administración de versiones de Helm
- Migración a Helm en Flux v2 desde Helm en Flux v1
- Controlador de Helm de Flux
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.
Recupere la dirección URL del emisor de OIDC del clúster.
Cree una identidad administrada y anote su identificador de cliente.
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>
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
Asegúrese de que el recurso personalizado que necesita usar la identidad de carga de trabajo establece el valor
.spec.provider
enazure
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
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
- Obtenga más información sobre las configuraciones y GitOps.
- Aprenda a usar Azure Policy para aplicar GitOps a escala.
- Obtenga información sobre la supervisión del estado y la actividad de GitOps (Flux v2).