Dela via


Applikationsdistributioner med GitOps (Flux v2) för AKS och Kubernetes som stöds av Azure Arc

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.
  • Möjlighet att distribuera program i stor skala via Azure Policy.

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ämmer kontinuerligt klustertillståndet med det önskade tillstånd som deklarerats i Git-förvaret. 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 multitenancy och hantering av distribueringsberoenden, 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.

Viktigt!

Det finns inga avgifter för Flux-distributioner på Azure Kubernetes Service (AKS), AKS Edge Essentials eller AKS som aktiveras av Azure Arc på Azure Local. För andra Kubernetes-distributioner som är anslutna via Azure Arc-aktiverade Kubernetes debiteras inga kostnader för Flux-distributioner på de första sex vCPU:erna i din prenumeration. Avgifter tillämpas sedan baserat på antalet vCPU:er per kluster. Mer information finns i Priser för Azure Arc.

Flux-klustertillägg

GitOps är aktiverat i ett Azure Arc-aktiverat Kubernetes- eller AKS-kluster som en Microsoft.KubernetesConfiguration/extensions/microsoft.fluxklustertillä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 standardinställning installerar microsoft.flux 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-repositorykällan som visas av källkontrollen. Skapar den anpassade resursen HelmChart och tillämpar HelmRelease 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.

Anteckning

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.

Om du vill ladda ned arkitekturdiagram i hög upplösning går du till Jumpstart Gems.

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 lagras resursernas data krypterat 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 de Flux-anpassade resurser som skapats av den hanterade tjänsten 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 baserad på användartillhandahållen privat nyckel, HTTP grundläggande autentisering, kända värdar eller ingen autentisering data.
  • Konfigurerar rollbaserad åtkomstkontroll (tjänstkonto etablerat, rollbindning skapad/tilldelad, roll skapad/tilldelad).
  • Skapar anpassade resurser GitRepository eller Bucket och anpassade resurser Kustomization från informationen i FluxConfig den anpassade resursen.

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.

Anteckning

Övervakar fluxconfig-agent för nya eller uppdaterade fluxConfiguration-resurser i Azure. Agenten kräver anslutning till Azure för att det önskade tillståndet av fluxConfiguration ska tillämpas på 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.

Om du har lagt till stöd för privat länk till ett Azure Arc-aktiverat Kubernetes-kluster fungerar microsoft.flux tillägget direkt 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 multi-tenancy från och med version 0.26. Den här funktionen är integrerad i Flux v2 i Azure.

Anteckning

För multi-tenancy-funktionen måste du veta om dina manifest innehåller någon sourceRef över namnområden 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 fleranvändarmiljö

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 https://github.com/fluxcd/flux2-kustomize-helm-example-arkivet. Det här är samma Git-arkiv som används i guiden 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/v2
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 standardinställning distribuerar Flux-tillägget fluxConfigurations 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/v2
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 multitenancy

När tillägget microsoft.flux har installerats aktiveras multitenancy-funktionen som standard. Om du behöver inaktivera multitenans kan du välja bort 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>

Nästa steg