Programdistributioner med GitOps (Flux v2) för AKS och Azure Arc-aktiverade Kubernetes
Azure tillhandahåller en funktion för automatiserad programdistribution med GitOps som fungerar med Azure Kubernetes Service (AKS) och Azure Arc-aktiverade Kubernetes-kluster. De viktigaste fördelarna med att använda GitOps för att distribuera program till Kubernetes-kluster är:
- Kontinuerlig insyn i statusen för program som körs i kluster.
- Uppdelning av problem mellan programutvecklingsteam och infrastrukturteam. Programteam behöver inte ha erfarenhet av Kubernetes-distributioner. Plattformstekniker skapar vanligtvis en självbetjäningsmodell för programteam, vilket ger dem möjlighet att köra distributioner med högre förtroende.
- Möjlighet att återskapa kluster med samma önskade tillstånd i händelse av en krasch eller skala ut.
Med GitOps deklarerar du önskat tillstånd för dina Kubernetes-kluster i filer på Git-lagringsplatser. Git-lagringsplatserna kan innehålla följande filer:
- YAML-formaterade manifest som beskriver Kubernetes-resurser (till exempel namnområden, hemligheter, distributioner och andra)
- Helm-diagram för att distribuera program
- Kustomize-filer för att beskriva miljöspecifika ändringar
Eftersom dessa filer lagras på en Git-lagringsplats är de versionshanterade och ändringar mellan versioner spåras enkelt. Kubernetes-kontrollanter körs i klustren och avstäm kontinuerligt klustertillståndet med önskat tillstånd som deklarerats i Git-lagringsplatsen. Dessa operatorer hämtar filerna från Git-lagringsplatserna och tillämpar önskat tillstånd på klustren. Operatorerna ser också kontinuerligt till att klustret förblir i önskat tillstånd.
GitOps på Azure Arc-aktiverade Kubernetes eller Azure Kubernetes Service använder Flux, en populär verktygsuppsättning med öppen källkod. Flux har stöd för vanliga filkällor (Git- och Helm-lagringsplatser, bucketar, Azure Blob Storage) och malltyper (YAML, Helm och Kustomize). Flux stöder även hantering av beroenden för flera innehavare och distribution, bland andra funktioner.
Flux distribueras direkt i klustret och varje klusters kontrollplan är logiskt avgränsat. Detta gör att den skalas bra till hundratals och tusentals kluster. Flux möjliggör rena pull-baserade GitOps-programdistributioner. Ingen åtkomst till kluster krävs av källdatabasen eller av något annat kluster.
Flux-klustertillägg
GitOps är aktiverat i ett Azure Arc-aktiverat Kubernetes- eller AKS-kluster som en Microsoft.KubernetesConfiguration/extensions/microsoft.flux
klustertilläggsresurs . Tillägget microsoft.flux
måste installeras i klustret innan en eller flera fluxConfigurations
kan skapas. Tillägget installeras automatiskt när du skapar det första Microsoft.KubernetesConfiguration/fluxConfigurations
i ett kluster, eller så kan du installera det manuellt med hjälp av portalen, Azure CLI (az k8s-extension create --extensionType=microsoft.flux
), ARM-mallen eller REST-API:et.
Kontrollanter
Som standard microsoft.flux
installerar tillägget Flux-styrenheterna (Source, Kustomize, Helm, Notification) och FluxConfig Custom Resource Definition (CRD), fluxconfig-agent
och fluxconfig-controller
. Du kan också installera Flux image-automation
och image-reflector
styrenheter som tillhandahåller funktioner för att uppdatera och hämta Docker-avbildningar.
Flux-källkontrollant: Bevakar de
source.toolkit.fluxcd.io
anpassade resurserna. Hanterar synkronisering mellan Git-lagringsplatser, Helm-lagringsplatser, Buckets och Azure Blob Storage. Hanterar auktorisering med källan för privata Git-, Helm-lagringsplatser och Azure Blob Storage-konton. Visar de senaste ändringarna i källan via en tar-arkivfil.Flux Kustomize-kontrollant: Bevakar de
kustomization.toolkit.fluxcd.io
anpassade resurserna. Tillämpar Kustomize- eller RÅ YAML-filer från källan på klustret.Flux Helm-kontrollant: Bevakar de
helm.toolkit.fluxcd.io
anpassade resurserna. Hämtar det associerade diagrammet från Helm-lagringsplatsens källa som visas av källstyrenheten. Skapar denHelmChart
anpassade resursenHelmRelease
och tillämpar med angiven version, namn och kunddefinierade värden på klustret.Flux-meddelandekontrollant: Bevakar de
notification.toolkit.fluxcd.io
anpassade resurserna. Tar emot meddelanden från alla Flux-styrenheter. Skickar meddelanden till användardefinierade webhook-slutpunkter.Anpassade resursdefinitioner för flux:
kustomizations.kustomize.toolkit.fluxcd.io
imagepolicies.image.toolkit.fluxcd.io
imagerepositories.image.toolkit.fluxcd.io
imageupdateautomations.image.toolkit.fluxcd.io
alerts.notification.toolkit.fluxcd.io
providers.notification.toolkit.fluxcd.io
receivers.notification.toolkit.fluxcd.io
buckets.source.toolkit.fluxcd.io
gitrepositories.source.toolkit.fluxcd.io
helmcharts.source.toolkit.fluxcd.io
helmrepositories.source.toolkit.fluxcd.io
helmreleases.helm.toolkit.fluxcd.io
fluxconfigs.clusterconfig.azure.com
FluxConfig CRD: Anpassad resursdefinition för
fluxconfigs.clusterconfig.azure.com
anpassade resurser som definierarFluxConfig
Kubernetes-objekt.fluxconfig-agent
: Ansvarar för att titta på Azure för nya eller uppdateradefluxConfigurations
resurser och för att starta den associerade Flux-konfigurationen i klustret. Ansvarar även för att skicka fluxstatusändringar i klustret tillbaka till Azure för varjefluxConfigurations
resurs.fluxconfig-controller
: Bevakar anpassadefluxconfigs.clusterconfig.azure.com
resurser och svarar på ändringar med ny eller uppdaterad konfiguration av GitOps-maskiner i klustret.
Kommentar
Tillägget microsoft.flux
installeras i flux-system
namnområdet och har klusteromfattande omfång. Du kan inte installera det här tillägget i namnområdesomfånget.
Fluxkonfigurationer
Du skapar Flux-konfigurationsresurser (Microsoft.KubernetesConfiguration/fluxConfigurations
) för att aktivera GitOps-hantering av klustret från dina Git-lagringsplatser, Bucket-källor eller Azure Blob Storage. När du skapar en fluxConfigurations
resurs används de värden som du anger för parametrarna, till exempel Git-målplatsen, för att skapa och konfigurera Kubernetes-objekt som aktiverar GitOps-processen i klustret. För att säkerställa datasäkerhet fluxConfigurations
lagras resursdata krypterade i vila i en Azure Cosmos DB-databas av klusterkonfigurationstjänsten.
Agenterna fluxconfig-agent
och fluxconfig-controller
som installeras med microsoft.flux
tillägget hanterar GitOps-konfigurationsprocessen.
fluxconfig-agent
ansvarar för följande uppgifter:
- Söker efter nya eller uppdaterade
fluxConfigurations
resurser i Kubernetes Configuration-dataplanstjänsten. - Skapar eller uppdaterar
FluxConfig
anpassade resurser i klustret med konfigurationsinformationen. - Bevakar
FluxConfig
anpassade resurser och skickar statusändringar tillbaka till de associerade Azure fluxConfiguration-resurserna.
fluxconfig-controller
ansvarar för följande uppgifter:
- Bevakar statusuppdateringar för flux anpassade resurser som skapats av den hanterade
fluxConfigurations
. - Skapar ett privat/offentligt nyckelpar som finns under livslängden för
fluxConfigurations
. Den här nyckeln används för autentisering om URL:en är SSH-baserad och om användaren inte anger sin egen privata nyckel när konfigurationen skapas. - Skapar en anpassad autentiseringshemlighet baserat på privat nyckel/http basic-auth/known-hosts/no-auth data.
- Konfigurerar rollbaserad åtkomstkontroll (tjänstkonto etablerat, rollbindning skapad/tilldelad, roll skapad/tilldelad).
- Skapar
GitRepository
ellerBucket
anpassade resurser ochKustomization
anpassade resurser från informationen i den anpassade resursenFluxConfig
.
Varje fluxConfigurations
resurs i Azure är associerad med en flux GitRepository
eller Bucket
anpassad resurs och en eller flera Kustomization
anpassade resurser i ett Kubernetes-kluster. När du skapar en fluxConfigurations
resurs anger du URL:en till källan (Git-lagringsplats, Bucket eller Azure Blob Storage) och synkroniseringsmålet i källan för varje Kustomization
. Du kan konfigurera beroenden mellan Kustomization
anpassade resurser för att styra distributionssekvensering. Du kan också skapa flera namnområdesomfångsresurser fluxConfigurations
i samma kluster för olika program och appteam.
Kommentar
Övervakarna fluxconfig-agent
för nya eller uppdaterade fluxConfiguration
resurser i Azure. Agenten kräver anslutning till Azure för det önskade tillståndet fluxConfiguration
för klustret. Om agenten inte kan ansluta till Azure väntar ändringar i klustret tills agenten kan ansluta. Om klustret är frånkopplat från Azure i mer än 48 timmar kommer begäran till klustret att överskrida tidsgränsen och ändringarna måste tillämpas på nytt i Azure.
Känsliga kundindata som privat nyckel och token/lösenord lagras i mindre än 48 timmar i Kubernetes-konfigurationstjänsten. Om du uppdaterar något av dessa värden i Azure kontrollerar du att dina kluster ansluter till Azure inom 48 timmar.
Du kan övervaka Flux-konfigurationsstatus och efterlevnad i Azure Portal eller använda instrumentpaneler för att övervaka status, efterlevnad, resursförbrukning och avstämningsaktivitet. Mer information finns i Övervaka Status och aktivitet för GitOps (Flux v2).
Versionsstöd
Den senaste versionen av Flux v2-tillägget (microsoft.flux
) och de två tidigare versionerna (N-2) stöds. Vi rekommenderar vanligtvis att du använder den senaste versionen av tillägget. Från och med microsoft.flux
version 1.7.0 stöds ARM64-baserade kluster.
Kommentar
Om du har använt Flux v1 rekommenderar vi att du migrerar till Flux v2 så snart som möjligt.
Stöd för Flux v1-baserade klusterkonfigurationsresurser som skapats före den 1 januari 2024 upphör den 24 maj 2025. Från och med den 1 januari 2024 kan du inte skapa nya Flux v1-baserade klusterkonfigurationsresurser.
GitOps med privat länk
Om du har lagt till stöd för privat länk till ett Azure Arc-aktiverat Kubernetes-klustermicrosoft.flux
fungerar tillägget helt utan problem med kommunikation tillbaka till Azure. För anslutningar till git-lagringsplatsen, Helm-lagringsplatsen eller andra slutpunkter som behövs för att distribuera Kubernetes-manifesten måste du etablera dessa slutpunkter bakom brandväggen eller lista dem i brandväggen så att Flux-källstyrenheten kan nå dem.
Dataresidens
Azure GitOps-tjänsten (Azure Kubernetes Configuration Management) lagrar/bearbetar kunddata. Som standard replikeras kunddata till den kopplade regionen. För regionerna Singapore, Asien, östra och Brasilien, södra lagras och bearbetas alla kunddata i regionen.
Tillämpa Flux-konfigurationer i stor skala
Eftersom Azure Resource Manager hanterar dina konfigurationer kan du automatisera skapandet av samma konfiguration för alla Azure Kubernetes Service- och Azure Arc-aktiverade Kubernetes-resurser med hjälp av Azure Policy, inom omfånget för en prenumeration eller en resursgrupp. Den här skalningsåtgärden säkerställer att specifika konfigurationer tillämpas konsekvent i hela grupper av kluster.
Mer information finns i Distribuera program konsekvent i stor skala med flux v2-konfigurationer och Azure Policy.
Parametrar
Information om hur du ser alla parametrar som stöds av Flux v2 i Azure finns i dokumentationenaz k8s-configuration
. Azure-implementeringen stöder för närvarande inte alla parametrar som Flux stöder.
Information om tillgängliga parametrar och hur du använder dem finns i Parametrar som stöds av GitOps (Flux v2).
Flera innehavare
Flux v2 har stöd för flera innehavare från och med version 0.26. Den här funktionen är integrerad i Flux v2 i Azure.
Kommentar
För funktionen för flera innehavare måste du veta om dina manifest innehåller någon källkälla mellan namnområdenRef för HelmRelease, Kustomization, ImagePolicy eller andra objekt, eller om du använder en Kubernetes-version som är mindre än 1.20.6. Så här förbereder du:
- Uppgradera till Kubernetes version 1.20.6 eller senare.
- I Kubernetes-manifesten ser du till att alla
sourceRef
är till objekt inom samma namnområde som GitOps-konfigurationen.- Om du behöver tid för att uppdatera dina manifest kan du avregistrera dig från flera innehavare. Du behöver dock fortfarande uppgradera kubernetes-versionen.
Uppdatera manifest för flera innehavare
Anta att du distribuerar ett fluxConfiguration
till ett av våra Kubernetes-kluster i cluster-config
namnområdet med klusteromfång. Du konfigurerar källan för att synkronisera lagringsplatsen https://github.com/fluxcd/flux2-kustomize-helm-example
. Det här är samma Exempel på Git-lagringsplats som används i självstudien Distribuera program med GitOps med Flux v2.
När Flux har synkroniserat lagringsplatsen distribuerar den de resurser som beskrivs i manifesten (YAML-filer). Två av manifesten beskriver HelmRelease
och HelmRepository
objekt.
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: nginx
namespace: nginx
spec:
releaseName: nginx-ingress-controller
chart:
spec:
chart: nginx-ingress-controller
sourceRef:
kind: HelmRepository
name: bitnami
namespace: flux-system
version: "5.6.14"
interval: 1h0m0s
install:
remediation:
retries: 3
# Default values
# https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
values:
service:
type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
name: bitnami
namespace: flux-system
spec:
interval: 30m
url: https://charts.bitnami.com/bitnami
Som standard distribuerar fluxConfigurations
Flux-tillägget genom att personifiera tjänstkontot flux-applier
som endast distribueras i cluster-config
namnområdet. Med hjälp av ovanstående manifest, när flera innehavare är aktiverat, HelmRelease
skulle blockeras. Detta beror på att HelmRelease
är i nginx
namnområdet, men det refererar till en HelmRepository i flux-system
namnområdet. Flux helm-controller
kan inte heller tillämpa HelmRelease
, eftersom det inte finns något flux-applier
tjänstkonto i nginx
namnområdet.
För att arbeta med flera innehavare är rätt metod att distribuera alla Flux-objekt till samma namnområde som fluxConfigurations
. Den här metoden undviker referensproblemet mellan namnområden och gör att Flux-kontrollanterna kan få behörighet att tillämpa objekten. För en GitOps-konfiguration som skapats i cluster-config
namnområdet ändras dessa exempelmanifest på följande sätt:
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: nginx
namespace: cluster-config
spec:
releaseName: nginx-ingress-controller
targetNamespace: nginx
chart:
spec:
chart: nginx-ingress-controller
sourceRef:
kind: HelmRepository
name: bitnami
namespace: cluster-config
version: "5.6.14"
interval: 1h0m0s
install:
remediation:
retries: 3
# Default values
# https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
values:
service:
type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
name: bitnami
namespace: cluster-config
spec:
interval: 30m
url: https://charts.bitnami.com/bitnami
Avregistrera dig från flera innehavare
microsoft.flux
När tillägget har installerats aktiveras flera innehavare som standard. Om du behöver inaktivera flera innehavare kan du avregistrera dig genom att skapa eller uppdatera microsoft.flux
tillägget i dina kluster med --configuration-settings multiTenancy.enforce=false
, som du ser i följande exempelkommandon:
az k8s-extension create --extension-type microsoft.flux --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
az k8s-extension update --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
Migrera från Flux v1
Om du fortfarande använder Flux v1 rekommenderar vi att du migrerar till Flux v2 så snart som möjligt.
Om du vill migrera till att använda Flux v2 i samma kluster där du har använt Flux v1 måste du först ta bort alla Flux v1 sourceControlConfigurations
från klustren. Eftersom Flux v2 har en helt annan arkitektur installeras inte klustertillägget microsoft.flux
om det finns Flux v1-resurser sourceControlConfigurations
i ett kluster. Processen för att ta bort Flux v1-konfigurationer och distribuera Flux v2-konfigurationer bör inte ta mer än 30 minuter.
Att ta bort Flux v1 sourceControlConfigurations
stoppar inte program som körs i klustren. Men under den period då Flux v1-konfigurationen tas bort och Flux v2-tillägget ännu inte har distribuerats fullt ut:
- Om det finns nya ändringar i programmanifesten som lagras på en Git-lagringsplats hämtas inte dessa ändringar under migreringen och programversionen som distribueras i klustret blir inaktuell.
- Om det finns oavsiktliga ändringar i klustertillståndet och det avviker från det önskade tillstånd som anges i Git-källlagringsplatsen kommer klustret inte att kunna läka sig självt.
Vi rekommenderar att du testar migreringsscenariot i en utvecklingsmiljö innan du migrerar produktionsmiljön.
Visa och ta bort Flux v1-konfigurationer
Använd dessa Azure CLI-kommandon för att hitta och sedan ta bort befintliga sourceControlConfigurations
i ett kluster:
az k8s-configuration list --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
az k8s-configuration delete --name <configuration name> --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
Du kan också hitta och ta bort befintliga GitOps-konfigurationer för ett kluster i Azure Portal. Det gör du genom att gå till klustret där konfigurationen skapades och välja GitOps i den vänstra rutan. Välj konfigurationen och välj sedan Ta bort.
Distribuera Flux v2-konfigurationer
Använd Azure Portal eller Azure CLI för att tillämpa Flux v2-konfigurationer på dina kluster.
Information om flux v1-pensionering
Projektet Flux v1 med öppen källkod har arkiverats och funktionsutvecklingen har upphört på obestämd tid.
Flux v2 lanserades som det uppgraderade projektet flux med öppen källkod. Den har en ny arkitektur och har stöd för fler GitOps-användningsfall. Microsoft lanserade en version av ett tillägg med Flux v2 i maj 2022. Sedan dess har kunder rekommenderats att flytta till Flux v2 inom tre år, eftersom supporten för att använda Flux v1 är planerad att avslutas i maj 2025.
Viktiga nya funktioner som introducerades i GitOps-tillägget för Flux v2:
- Flux v1 är en monolitisk do-it-all-operator. Flux v2 separerar funktionerna i specialiserade styrenheter (källstyrenhet, Kustomize-kontrollant, Helm-styrenhet och meddelandekontrollant).
- Har stöd för synkronisering med flera källagringsplatser.
- Stöder flera innehavare, till exempel att tillämpa varje källlagringsplats med sin egen uppsättning behörigheter.
- Ger operativa insikter via hälsokontroller, händelser och aviseringar.
- Stöder Git-grenar, fäster på incheckningar och taggar och följer SemVer-taggintervall.
- Konfiguration av autentiseringsuppgifter per GitRepository-resurs: privat SSH-nyckel, HTTP/S användarnamn/lösenord/token och offentliga OpenPGP-nycklar.
Nästa steg
- Använd vår självstudie för att lära dig hur du aktiverar GitOps i dina AKS- eller Azure Arc-aktiverade Kubernetes-kluster.
- Läs mer om CI/CD-arbetsflöde med GitOps.