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
Un cluster Kubernetes abilitato per Azure Arc in esecuzione. I cluster basati su ARM64 sono supportati a partire dalla
microsoft.flux
versione 1.7.0.Informazioni su come connettere un cluster Kubernetes ad Azure Arc. Se è necessario connettersi tramite un proxy in uscita, assicurarsi di installare gli agenti Arc con le impostazioni proxy.
Autorizzazioni di lettura e scrittura per il tipo di risorsa
Microsoft.Kubernetes/connectedClusters
.
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 conaz aks create
, il cluster è basato su MSI per impostazione predefinita. Per i cluster basati su SPN già creati che devono essere convertiti in MSI, eseguireaz 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 comandoaz 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'ambitonamespace
con questa esercitazione, vedere le modifiche necessarie. - Due kustomization vengono specificate con nomi
infra
eapps
. Ogni oggetto è associato a un percorso nel repository. - La kustomization
apps
dipende dalla kustomizationinfra
. La kustomizationinfra
deve terminare prima dell'esecuzione della kustomizationapps
. - 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 predefinitatrue
)--config helm-controller.enabled=<true/false>
(impostazione predefinitatrue
)--config kustomize-controller.enabled=<true/false>
(impostazione predefinitatrue
)--config notification-controller.enabled=<true/false>
(impostazione predefinitatrue
)--config image-automation-controller.enabled=<true/false>
(impostazione predefinitafalse
)--config image-reflector-controller.enabled=<true/false>
(impostazione predefinitafalse
)
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:
- Controller Flux Kustomize
- Documentazione di riferimento Kustomize
- File di kustomization
- Progetto Kustomize
- Guide Kustomize
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:
- Flux per gli utenti Helm
- Gestire le versioni Helm
- Eseguire la migrazione a Flux v2 Helm da Flux v1 Helm
- Controller Helm Flux
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.flux
versione 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.
Recuperare l'URL dell'autorità di certificazione OIDC per il cluster.
Creare un'identità gestita e prendere nota dell'ID client.
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>
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
Assicurarsi che la risorsa personalizzata che deve usare il valore
.spec.provider
dei set di identità del carico di lavoro suazure
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
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
- Altre informazioni sulle configurazioni e GitOps.
- Informazioni su come usare Criteri di Azure per applicare GitOps su larga scala.
- Informazioni sul monitoraggio dello stato e dell'attività di GitOps (Flux v2).