Esercitazione: Distribuire applicazioni usando GitOps con Flux v2

Questa esercitazione descrive come usare GitOps in un cluster Kubernetes. GitOps con Flux v2 è abilitato come estensione del cluster nei cluster Kubernetes abilitati per Azure Arc o nei cluster del servizio Azure Kubernetes. Dopo aver installato l'estensione del cluster microsoft.flux, è possibile creare una o più risorse fluxConfigurations che sincronizzano le origini del repository Git con il cluster e riconciliare il cluster con lo stato desiderato. Con GitOps è possibile usare il repository Git come origine della verità per la configurazione del cluster e la distribuzione di applicazioni.

In questa esercitazione viene usata una configurazione GitOps di esempio con due kustomization, in modo da poter vedere come una kustomization può avere una dipendenza da un'altra. È possibile aggiungere altre kustomization e dipendenze in base alle esigenze, a seconda dello scenario.

Prima di approfondire, dedicare qualche minuto a scoprire come funziona GitOps con Flux concettualmente.

Suggerimento

Mentre l'origine in questa esercitazione è un repository Git, Flux fornisce anche il supporto per altre origini file comuni, ad esempio repository Helm, bucket e Archiviazione BLOB di Azure.

È anche possibile creare configurazioni di Flux usando Bicep, modelli ARM o provider AzAPI di Terraform. Per altre informazioni, vedere Microsoft.KubernetesConfiguration fluxConfigurations.

Importante

L'estensione microsoft.flux ha rilasciato la versione principale 1.0.0. Include la funzionalità multi-tenancy. Se sono presenti configurazioni di GitOps Flux v2 che usano una versione precedente dell'estensione microsoft.flux, è possibile eseguire l'aggiornamento alla versione più recente manualmente usando l'interfaccia della riga di comando di Azure: az k8s-extension create -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux --extension-type microsoft.flux -t <CLUSTER_TYPE> (usare -t connectedClusters per cluster Arc e -t managedClusters per i cluster del servizio Azure Kubernetes).

Prerequisiti

Per distribuire applicazioni usando GitOps con Flux v2, è necessario:

Per cluster Kubernetes abilitato per Azure Arc

For cluster del servizio Azure Kubernetes

  • Un cluster del servizio Azure Kubernetes basato su MSI in esecuzione.

    Importante

    Assicurarsi che il cluster del servizio Azure Kubernetes venga creato con MSI e non con SPN perché l'estensione microsoft.flux non funzionerà con i cluster del servizio Azure Kubernetes basati su SPN. Per i nuovi cluster del servizio Azure Kubernetes creati con az aks create, il cluster è basato su MSI per impostazione predefinita. Per i cluster basati su SPN già creati che devono essere convertiti in MSI, eseguire az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Per altre informazioni, vedere Usare un'identità gestita nel servizio Azure Kubernetes.

  • Autorizzazioni di lettura e scrittura per il tipo di risorsa Microsoft.ContainerService/managedClusters.

Comune a entrambi i tipi di cluster

  • Autorizzazioni di lettura e scrittura per questi tipi di risorse:

    • Microsoft.KubernetesConfiguration/extensions
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • Interfaccia della riga di comando di Azure 2.15 o versione successiva. Installare l'interfaccia della riga di comando di Azure o usare i comandi seguenti per aggiornarla alla versione più recente:

    az version
    az upgrade
    
  • Il client da riga di comando Kubernetes kubectl. kubectl è già installato se si usa Azure Cloud Shell.

    Eseguire l'installazione kubectl in locale usando il comando az aks install-cli:

    az aks install-cli
    
  • :Registrazione dei seguenti provider di risorse di Azure.

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

    La registrazione è un processo asincrono e terminerà entro 10 minuti. Usare il comando seguente per monitorare il processo di registrazione:

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

Supporto di versione e area geografica

GitOps è attualmente supportato in tutte le aree supportate da Kubernetes abilitato per Azure Arc. GitOps è attualmente supportato in un subset delle aree supportate dal servizio Azure Kubernetes. Il servizio GitOps aggiunge nuove aree supportate a cadenza regolare.

Sono supportate la versione più recente dell'estensione Flux v2 e le due versioni precedenti (N-2). In genere è consigliabile usare la versione più recente dell'estensione.

Requisiti di rete

Gli agenti GitOps richiedono TCP in uscita all'origine del repository sulla porta 22 (SSH) o sulla porta 443 (HTTPS) per funzionare. Anche gli agenti richiedono l'accesso agli URL in uscita seguenti:

Endpoint (DNS) Descrizione
https://management.azure.com Obbligatorio per permettere all'agente di comunicare con il servizio Configurazione Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Endpoint del piano dati che consente all'agente di eseguire il push dello stato e recuperare le informazioni di configurazione. Dipende da <region> (le aree supportate indicate in precedenza).
https://login.microsoftonline.com Obbligatorio per recuperare e aggiornare i token di Azure Resource Manager.
https://mcr.microsoft.com Obbligatorio per il pull delle immagini del contenitore per i controller Flux.

Abilitare le estensioni dell'interfaccia della riga di comando

Installare i pacchetti di estensione dell'interfaccia della riga di comando di k8s-configuration e k8s-extension più recenti:

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

Per aggiornare questi pacchetti alle versioni più recenti:

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

Per visualizzare un elenco di tutte le estensioni dell'interfaccia della riga di comando di Azure installate e le relative versioni, usare il comando seguente:

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

Suggerimento

Per informazioni sulla risoluzione di eventuali errori, vedere la sezione GitOps (Flux v2) di Risolvere i problemi di estensione per i cluster Kubernetes abilitati per Azure Arc.

Applicare una configurazione di Flux

Usare l'estensione dell'interfaccia della riga di comando di Azure k8s-configuration o il portale di Azure per abilitare GitOps in un cluster Kubernetes abilitato per Arc o servizio Azure Kubernetes. Per una dimostrazione, usare il repository gitops-flux2-kustomize-helm-mt pubblico.

Importante

Il repository dimostrativo è progettato per semplificare l'uso di questa esercitazione e illustrare alcuni principi chiave. Per rimanere aggiornati, il repository può ottenere modifiche di rilievo occasionalmente dagli aggiornamenti delle versioni. Queste modifiche non influiscono sulla nuova applicazione di questa esercitazione, ma solo sulle applicazioni di esercitazione precedenti che non sono state eliminate. Per informazioni su come gestire queste modifiche, vedere la dichiarazione di non responsabilità di modifica che causa un'interruzione.

Nell'esempio seguente viene usato il comando az k8s-configuration flux create per applicare una configurazione Flux a un cluster usando i valori e le impostazioni seguenti:

  • Il gruppo di risorse che contiene il cluster è flux-demo-rg.
  • Il nome del cluster Azure Arc è flux-demo-arc.
  • Il tipo di cluster è Azure Arc (-t connectedClusters), ma questo esempio funziona anche con il servizio Azure Kubernetes (-t managedClusters).
  • Il nome della configurazione di Flux è cluster-config.
  • Lo spazio dei nomi per l'installazione della configurazione è cluster-config.
  • L'URL del repository Git pubblico è https://github.com/Azure/gitops-flux2-kustomize-helm-mt.
  • Il ramo del repository Git è main.
  • L'ambito della configurazione è cluster. Questo ambito fornisce agli operatori le autorizzazioni per apportare modifiche in tutto il cluster. Per usare l'ambito namespace con questa esercitazione, vedere le modifiche necessarie.
  • Due kustomization vengono specificate con nomi infra e apps. Ogni oggetto è associato a un percorso nel repository.
  • La kustomization apps dipende dalla kustomization infra. La kustomization infra deve terminare prima dell'esecuzione della kustomization apps.
  • Impostare prune=true in entrambe le kustomization. Questa impostazione garantisce che gli oggetti Flux distribuiti nel cluster vengano puliti se vengono rimossi dal repository o se la configurazione di Flux o le kustomization vengono eliminate.
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"\]

L'estensione microsoft.flux viene installata nel cluster (se non è già stata installata in una distribuzione GitOps precedente).

Suggerimento

Il comando az k8s-configuration flux create distribuisce l'estensione microsoft.flux nel cluster e crea la configurazione. In alcuni scenari, è possibile creare separatamente l'istanza dell'estensione flux prima di creare le risorse di configurazione. A tale scopo, usare il comando az k8s-extension create per creare un'istanza dell'estensione nel cluster.

Quando la configurazione del flusso viene installata per la prima volta, lo stato di conformità iniziale può essere Pending o Non-compliant perché la riconciliazione è ancora in corso. Dopo un minuto, eseguire di nuovo una query sulla configurazione per visualizzare lo stato di conformità finale.

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

Per verificare che la distribuzione sia riuscita, eseguire il comando seguente:

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

Con una distribuzione corretta vengono creati gli spazi dei nomi seguenti:

  • flux-system: contiene i controller di estensione Flux.
  • cluster-config: contiene gli oggetti di configurazione Flux.
  • nginx, podinfo, redis: spazi dei nomi per i carichi di lavoro descritti nei manifesti nel repository Git.

Per confermare gli spazi dei nomi, eseguire il comando seguente:

kubectl get namespaces

Lo spazio dei nomi flux-system contiene gli oggetti di estensione Flux:

  • Controller Flux di Azure: fluxconfig-agent, fluxconfig-controller
  • Controller OSS Flux: source-controller, kustomize-controller, helm-controller, notification-controller

Gli agenti Flux e i pod controller devono trovarsi in uno stato di esecuzione. Confermare questa operazione usando il comando seguente:

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

Lo spazio dei nomi cluster-config ha gli oggetti di configurazione 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

Verificare altri dettagli della configurazione usando i comandi seguenti.

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

I carichi di lavoro vengono distribuiti dai manifesti nel repository 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

Controllare quali controller vengono distribuiti con l'estensione del cluster Flux

Per alcuni scenari, è possibile modificare i controller Flux installati con l'estensione del cluster Flux.

I controller source, helm, kustomize e notification Flux vengono installati per impostazione predefinita. I controller image-automation e image-reflector, usati per aggiornare un repository Git quando sono disponibili nuove immagini del contenitore, devono essere abilitati in modo esplicito.

È possibile usare il comando k8s-extension per modificare le opzioni predefinite:

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

Ad esempio, per disabilitare le notifiche, è possibile impostare notification-controller.enabled su false.

Questo comando di esempio installa i controller image-reflector e image-automation. Se l'estensione Flux è stata creata automaticamente quando è stata creata per la prima volta una configurazione Flux, il nome dell'estensione è 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 dell'identità Kubelet come metodo di autenticazione per i cluster del servizio Azure Kubernetes

Per i cluster del servizio Azure Kubernetes, una delle opzioni di autenticazione da usare è l'identità kubelet. Per impostazione predefinita, il servizio Azure Kubelet crea la propria identità kubelet nel gruppo di risorse gestite. Se si preferisce, è possibile usare un'identità gestita kubelet creata in modo preliminare. A tale scopo, aggiungere il parametro --config useKubeletIdentity=true al momento dell'installazione dell'estensione 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

Linee guida per l'onboarding di Red Hat OpenShift

I controller Flux richiedono un vincolo di contesto di sicurezza nonroot per effettuare correttamente il provisioning dei pod nel cluster. Questi vincoli devono essere aggiunti al cluster prima di distribuire l'estensione 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

Per altre informazioni sulle linee guida di OpenShift per l'onboarding di Flux, vedere la documentazione di Flux.

Utilizzare i parametri

Flux supporta molti parametri per abilitare vari scenari. Per una descrizione di tutti i parametri supportati da Flux, vedere la documentazione ufficiale di Flux. Flux in Azure non supporta ancora tutti i parametri. Segnalare se un parametro necessario non è presente nell'implementazione di Azure.

Per informazioni sui parametri disponibili e su come usarli, vedere Parametri supportati di GitOps (Flux v2).

Usare informazioni di riferimento per l'autenticazione privata locale

Per usare un riferimento all'autenticazione privata locale, il segreto deve esistere nello stesso spazio dei nomi in cui fluxConfiguration verrà distribuito. Il segreto deve contenere anche tutti i parametri di autenticazione necessari per l'origine.

Per informazioni sulla creazione di segreti per varie origini fluxConfiguration, vedere Segreto locale per l'autenticazione con di origine.

Gestire la configurazione del cluster usando il controller Flux Kustomize

Il controller Flux Kustomize viene installato come parte dell'estensione del cluster microsoft.flux. Consente la gestione dichiarativa della configurazione del cluster e della distribuzione dell'applicazione usando i manifesti Kubernetes sincronizzati da un repository Git. Questi manifesti Kubernetes possono facoltativamente includere un file kustomize.yaml.

Per informazioni dettagliate sull'utilizzo, vedere le risorse seguenti:

Gestire le versioni del grafico Helm usando il controller Helm di Flux

Il controller Helm di Flux viene installato come parte dell'estensione del cluster microsoft.flux. Consente di gestire in modo dichiarativo le versioni del grafico Helm con i manifesti Kubernetes gestiti nel repository Git.

Per informazioni dettagliate sull'utilizzo, vedere le risorse seguenti:

Suggerimento

A causa del modo in cui Helm gestisce i file di indice, l'elaborazione dei grafici Helm è un'operazione costosa e può avere un footprint di memoria molto elevato. Di conseguenza, la riconciliazione di un numero elevato di grafici Helm contemporaneamente può causare picchi di memoria ed errori OOMKilled. Per impostazione predefinita, il controller imposta il limite di memoria a 1Gi e le richieste di memoria a 64Mi. Per aumentare questo limite e le richieste a causa di un numero elevato di riconciliazione del grafico Helm, eseguire il comando seguente dopo l'installazione dell'estensione 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

Usare l'origine GitRepository per i grafici Helm

Se i grafici Helm vengono archiviati nell'origine GitRepository configurata come parte della risorsa fluxConfigurations, è possibile indicare che l'origine configurata deve essere usata come origine dei grafici Helm aggiungendo clusterconfig.azure.com/use-managed-source: "true" al file HelmRelease.yaml, come illustrato nell'esempio seguente:

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

Quando si usa questa annotazione, helmRelease distribuito viene patchato con il riferimento all'origine configurata. Attualmente è supportata solo l'origine GitRepository.

Rilevamento della deriva Helm

Il rilevamento della deriva per le versioni Helm non è abilitato per impostazione predefinita. A partire da microsoft.flux v1.7.5, è possibile abilitare il rilevamento deriva Helm eseguendo il comando seguente:

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

Sostituzione rigorosa delle variabili post-compilazione

La sostituzione rigorosa delle variabili post-compilazione è disponibile a partire dalla microsoft.flux versione 1.13.1.

Per creare un'estensione Flux con criteri di sostituzione rigorosi abilitati, eseguire questo 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

Per aggiornare un'estensione Flux esistente per abilitare criteri di sostituzione rigorosi, eseguire questo 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

Scalabilità verticale

Il supporto per il ridimensionamento verticale è disponibile a partire da microsoft.flux versione 1.12.0. Attualmente sono supportati in modo nativo solo i parametri specifici descritti nella documentazione relativa al ridimensionamento verticale di Flux. Altri parametri possono essere applicati manualmente al cluster.

Per aumentare i limiti delle risorse nei controller oltre i limiti correnti, eseguire questo comando, modificando il tipo di risorsa e il valore specifici in base alle esigenze:

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

Per aumentare il numero di riconciliazioni eseguibili in parallelo, eseguire questo 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

Per abilitare la compilazione in memoria, eseguire questo 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

Orologio Helm OOM

A partire da microsoft.flux v1.7.5, è possibile abilitare Helm OOM Watch. Per altre informazioni, vedere Abilitare il rilevamento Helm vicino OOM.

Assicurarsi di esaminare le potenziali strategie di correzione e applicarle in base alle esigenze durante l'abilitazione di questa funzionalità.

Per abilitare OOM Watch, eseguire il comando seguente:

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

Se non si specificano valori per memoryThreshold e outOfMemoryWatch, la soglia di memoria predefinita è impostata sul 95%, con l'intervallo in cui controllare l'utilizzo della memoria impostato su 500 ms.

Parametri configurabili a livello di log

Per impostazione predefinita, log-level per i controller Flux è impostato su info. A partire da microsoft.flux v1.8.3, è possibile modificare queste impostazioni predefinite usando il comando k8s-extension come indicato di seguito:

--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>

I valori validi sono debug, info o error. Ad esempio, per modificare il log-level per source-controller e kustomize-controller, usare il comando seguente:

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 partire da microsoft.flux v1.9.1, fluxconfig-agent e fluxconfig-controller supportano info e error livelli di log (ma non debug). È possibile modificarli usando il comando k8s-extension come indicato di seguito:

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

Ad esempio, il comando seguente cambia log-level in 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

Deprecazione di Azure DevOps SSH-RSA

Azure DevOps ha annunciato la deprecazione di SSH-RSA come metodo di crittografia supportato per la connessione ai repository di Azure tramite SSH. Se si usano chiavi SSH per connettersi ai repository di Azure nelle configurazioni di Flux, è consigliabile passare alle chiavi RSA-SHA2-256 o RSA-SHA2-512 più sicure.

Quando si riconciliano le configurazioni di Flux, potrebbe essere visualizzato un messaggio di errore che indica che ssh-rsa sta per essere deprecato o non è supportato. In tal caso, aggiornare l'algoritmo della chiave host usato per stabilire connessioni SSH ai repository Di Azure DevOps da Flux source-controller e image-automation-controller (se abilitato) usando il comando az k8s-extension update. Ad esempio:

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"

Per altre informazioni sulla deprecazione di SSH-RSA di Azure DevOps, vedere Fine del supporto SSH-RSA per Azure Repos.

Configurare l'annotazione nei pod dell'estensione Flux

Quando si configura una soluzione differente da Firewall di Azure, sono necessarie regole di rete e FQDN/applicazione per un cluster del servizio Azure Kubernetes. A partire dalla microsoft.fluxversione 1.11.1, i pod controller Flux possono ora impostare l'annotazione kubernetes.azure.com/set-kube-service-host-fqdn nelle specifiche dei pod. Ciò consente il traffico verso il nome di dominio del server API anche quando è presente un firewall di livello 7, semplificando le distribuzioni durante l'installazione dell'estensione. Per configurare questa annotazione quando si usa l'estensione Flux, usare i comandi seguenti.

# 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

Identità del carico di lavoro nei cluster del servizio Azure Kubernetes

A partire da microsoft.flux v1.8.0, è possibile creare configurazioni Flux nei cluster del servizio Azure Kubernetes con l'identità del carico di lavoro abilitata. A tale scopo, modificare l'estensione del flusso come illustrato nei passaggi seguenti.

  1. Recuperare l'URL dell'autorità di certificazione OIDC per il cluster.

  2. Creare un'identità gestita e prendere nota dell'ID client.

  3. Creare l'estensione flux nel cluster usando il comando seguente:

    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. Stabilire una credenziale di identità federata. Ad esempio:

    # 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. Assicurarsi che la risorsa personalizzata che deve usare il valore .spec.provider dei set di identità del carico di lavoro su azure nel manifesto. Ad esempio:

    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. Assicurarsi di fornire autorizzazioni appropriate per l'identità del carico di lavoro per la risorsa che si vuole che il controller di origine o il controller image-reflector estraggano. Ad esempio, se si usa Registro Azure Container, sono necessarie autorizzazioni AcrPull.

Eliminare la configurazione e l'estensione Flux

Usare i comandi seguenti per eliminare le configurazioni di Flux e, se necessario, l'estensione Flux stessa.

Eliminare le configurazioni di Flux

Il comando seguente elimina sia la risorsa fluxConfigurations in Azure che gli oggetti di configurazione Flux nel cluster. Poiché la configurazione di Flux è stata creata originariamente con il parametro prune=true per la kustomization, tutti gli oggetti creati nel cluster in base ai manifesti nel repository Git vengono rimossi quando viene rimossa la configurazione di Flux. Tuttavia, questo comando non rimuove l'estensione Flux stessa.

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

Eliminare l'estensione del cluster Flux

Quando si elimina l'estensione Flux, entrambe le risorse di estensione microsoft.flux in Azure e gli oggetti di estensione Flux nel cluster vengono rimossi.

Importante

Assicurarsi di eliminare tutte le configurazioni di Flux nel cluster prima di eliminare l'estensione Flux. L'eliminazione dell'estensione senza prima eliminare le configurazioni di Flux può lasciare il cluster in una condizione instabile.

Se l'estensione Flux è stata creata automaticamente quando è stata creata per la prima volta la configurazione di Flux, il nome dell'estensione è flux.

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

Suggerimento

Questi comandi usano -t connectedClusters, appropriato per un cluster Kubernetes abilitato per Azure Arc. Per un cluster del servizio Azure Kubernetes, usare invece -t managedClusters.

Passaggi successivi