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:

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-agentoch 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 den HelmChart anpassade resursen HelmRelease 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 definierar FluxConfig Kubernetes-objekt.

  • fluxconfig-agent: Ansvarar för att titta på Azure för nya eller uppdaterade fluxConfigurations 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 varje fluxConfigurations resurs.

  • fluxconfig-controller: Bevakar anpassade fluxconfigs.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

Diagram som visar installationen av en Flux-konfiguration i ett Azure Arc-aktiverat Kubernetes- eller AKS-kluster.

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 eller Bucket anpassade resurser och Kustomization anpassade resurser från informationen i den anpassade resursen FluxConfig .

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.

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.

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