Toepassingsimplementaties met GitOps (Flux v2) voor AKS en Kubernetes met Azure Arc

Azure biedt een mogelijkheid voor geautomatiseerde toepassingsimplementaties met Behulp van GitOps die werkt met Azure Kubernetes Service (AKS) en Kubernetes-clusters met Azure Arc. De belangrijkste voordelen die worden geboden door GitOps te implementeren voor het implementeren van toepassingen in Kubernetes-clusters zijn onder andere:

  • Continu inzicht in de status van toepassingen die worden uitgevoerd op clusters.
  • Scheiding van zorgen tussen teams voor toepassingsontwikkeling en infrastructuurteams. Toepassingsteams hoeven geen ervaring te hebben met Kubernetes-implementaties. Platformengineeringsteams maken doorgaans een zelfbedieningsmodel voor toepassingsteams, waardoor ze implementaties met een hoger vertrouwen kunnen uitvoeren.
  • Mogelijkheid om clusters opnieuw te maken met dezelfde gewenste status in het geval van een crash of om uit te schalen.

Met GitOps declareert u de gewenste status van uw Kubernetes-clusters in bestanden in Git-opslagplaatsen. De Git-opslagplaatsen kunnen de volgende bestanden bevatten:

Omdat deze bestanden worden opgeslagen in een Git-opslagplaats, zijn ze versiebeheer en worden wijzigingen tussen versies eenvoudig bijgehouden. Kubernetes-controllers worden uitgevoerd in de clusters en stemmen de clusterstatus voortdurend af met de gewenste status die is gedeclareerd in de Git-opslagplaats. Deze operators halen de bestanden op uit de Git-opslagplaatsen en passen de gewenste status toe op de clusters. De operators zorgen er ook continu voor dat het cluster de gewenste status heeft.

GitOps in Kubernetes met Azure Arc of Azure Kubernetes Service maakt gebruik van Flux, een populaire opensource-hulpprogrammaset. Flux biedt ondersteuning voor algemene bestandsbronnen (Git- en Helm-opslagplaatsen, Buckets, Azure Blob Storage) en sjabloontypen (YAML, Helm en Kustomize). Flux biedt ook ondersteuning voor multitenancy - en implementatieafhankelijkheidsbeheer, onder andere functies. Flux wordt rechtstreeks op het cluster geïmplementeerd en het besturingsvlak van elk cluster wordt logisch gescheiden. Daarom kan het goed worden geschaald naar honderden en duizenden clusters. Het maakt pure implementaties van gitOps-toepassingen op basis van pull mogelijk. Er is geen toegang tot clusters nodig voor de bronopslagplaats of een ander cluster.

Flux-clusterextensie

GitOps is ingeschakeld in een Kubernetes- of AKS-cluster met Azure Arc als clusterextensieresourceMicrosoft.KubernetesConfiguration/extensions/microsoft.flux. De microsoft.flux extensie moet worden geïnstalleerd in het cluster voordat een of meer fluxConfigurations kunnen worden gemaakt. De extensie wordt automatisch geïnstalleerd wanneer u de eerste Microsoft.KubernetesConfiguration/fluxConfigurations in een cluster maakt of u kunt deze handmatig installeren met behulp van de portal, de Azure CLI (az k8s-extension create --extensionType=microsoft.flux), de ARM-sjabloon of REST API.

Controllers

microsoft.flux De extensie installeert standaard de Flux-controllers (Bron, Kustomize, Helm, Notification) en de FluxConfig CRD, fluxconfig-agent en fluxconfig-controller. U kunt bepalen welke van deze controllers is geïnstalleerd. Desgewenst kunt u ook de Flux image-automation- en image-reflectorcontrollers installeren, die functionaliteit bieden voor het bijwerken en ophalen van Docker-installatiekopieën.

  • Flux-broncontroller: bekijkt de source.toolkit.fluxcd.io aangepaste resources. Hiermee wordt synchronisatie tussen de Git-opslagplaatsen, Helm-opslagplaatsen, Buckets en Azure Blob Storage afgehandeld. Hiermee wordt autorisatie verwerkt met de bron voor privé-Git-, Helm-opslagplaatsen en Azure Blob Storage-accounts. Hiermee worden de meest recente wijzigingen in de bron via een tar-archiefbestand weergeven.

  • Flux Kustomize-controller: bekijkt de kustomization.toolkit.fluxcd.io aangepaste resources. Past Kustomize- of onbewerkte YAML-bestanden van de bron toe op het cluster.

  • Flux Helm-controller: bekijkt de helm.toolkit.fluxcd.io aangepaste resources. Haalt de bijbehorende grafiek op uit de Helm-opslagplaatsbron die door de broncontroller wordt weergegeven. Hiermee maakt u de HelmChart aangepaste resource en past u de HelmRelease met de opgegeven versie, naam en door de klant gedefinieerde waarden toe op het cluster.

  • Flux Notification Controller: bekijkt de notification.toolkit.fluxcd.io aangepaste resources. Ontvangt meldingen van alle Flux-controllers. Pusht meldingen naar door de gebruiker gedefinieerde webhook-eindpunten.

  • Aangepaste Flux-resourcedefinities:

    • 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: Definitie van aangepaste resource voor fluxconfigs.clusterconfig.azure.com aangepaste resources die Kubernetes-objecten definiëren FluxConfig .

  • fluxconfig-agent: verantwoordelijk voor het bekijken van Azure voor nieuwe of bijgewerkte fluxConfigurations resources en voor het starten van de bijbehorende Flux-configuratie in het cluster. Ook verantwoordelijk voor het pushen van Flux-statuswijzigingen in het cluster naar Azure voor elke fluxConfigurations resource.

  • fluxconfig-controller: controleert de fluxconfigs.clusterconfig.azure.com aangepaste resources en reageert op wijzigingen met een nieuwe of bijgewerkte configuratie van GitOps-machines in het cluster.

Notitie

De microsoft.flux extensie wordt geïnstalleerd in de flux-system naamruimte en heeft een clusterbreed bereik. De optie voor het installeren van deze extensie in het bereik van de naamruimte is niet beschikbaar en pogingen om te installeren bij naamruimtebereik mislukken met 400-fouten.

Flux-configuraties

Diagram showing the installation of a Flux configuration in an Azure Arc-enabled Kubernetes or AKS cluster.

U maakt Flux-configuratieresources (Microsoft.KubernetesConfiguration/fluxConfigurations) om GitOps-beheer van het cluster vanuit uw Git-opslagplaatsen, Bucket-bronnen of Azure Blob Storage in te schakelen. Wanneer u een fluxConfigurations resource maakt, worden de waarden die u opgeeft voor de parameters, zoals de Git-doelopslagplaats, gebruikt om de Kubernetes-objecten te maken en te configureren die het GitOps-proces in dat cluster inschakelen. Om gegevensbeveiliging te garanderen, worden de fluxConfigurations resourcegegevens in rust opgeslagen in een Azure Cosmos DB-database door de clusterconfiguratieservice.

De fluxconfig-agent agents fluxconfig-controller , geïnstalleerd met de microsoft.flux extensie, beheren het GitOps-configuratieproces.

fluxconfig-agent is verantwoordelijk voor de volgende taken:

  • Peilt de Kubernetes Configuration-gegevensvlakservice voor nieuwe of bijgewerkte fluxConfigurations resources.
  • Hiermee maakt of werkt FluxConfig u aangepaste resources in het cluster bij met de configuratiegegevens.
  • Controleert FluxConfig aangepaste resources en pusht statuswijzigingen terug naar de bijbehorende Azure FluxConfiguration-resources.

fluxconfig-controller is verantwoordelijk voor de volgende taken:

  • Hiermee wordt de status bijgewerkt naar de aangepaste Flux-resources die zijn gemaakt door de beheerde fluxConfigurations.
  • Hiermee maakt u een persoonlijk/openbaar sleutelpaar dat bestaat voor de levensduur van de fluxConfigurations. Deze sleutel wordt gebruikt voor verificatie als de URL is gebaseerd op SSH en als de gebruiker geen eigen persoonlijke sleutel opgeeft tijdens het maken van de configuratie.
  • Maakt aangepast verificatiegeheim op basis van door de gebruiker verstrekte persoonlijke sleutel/http basic-auth/known-hosts/no-auth-gegevens.
  • Hiermee stelt u RBAC in (serviceaccount ingericht, rolbinding gemaakt/toegewezen, rol gemaakt/toegewezen, rol gemaakt/toegewezen).
  • Maakt GitRepository of Bucket aangepaste resources en Kustomization aangepaste resources op basis van de informatie in de FluxConfig aangepaste resource.

Elke fluxConfigurations resource in Azure is gekoppeld aan één Flux GitRepository - of Bucket aangepaste resource en een of meer Kustomization aangepaste resources in een Kubernetes-cluster. Wanneer u een fluxConfigurations resource maakt, geeft u de URL op naar de bron (Git-opslagplaats, Bucket of Azure Blob Storage) en het synchronisatiedoel in de bron voor elke Kustomizationresource. U kunt afhankelijkheden tussen Kustomization aangepaste resources configureren om de implementatievolgorde te beheren. U kunt ook meerdere resources met naamruimtebereik fluxConfigurations maken op hetzelfde cluster voor verschillende toepassingen en app-teams.

Notitie

De fluxconfig-agent monitors voor nieuwe of bijgewerkte fluxConfiguration resources in Azure. De agent vereist connectiviteit met Azure voor de gewenste status van de fluxConfiguration agent die op het cluster moet worden toegepast. Als de agent geen verbinding kan maken met Azure, treedt er een vertraging op bij het aanbrengen van wijzigingen in het cluster totdat de agent verbinding kan maken. Als de verbinding van het cluster langer dan 48 uur met Azure is verbroken, treedt er een time-out op voor de aanvraag voor het cluster en moeten de wijzigingen opnieuw worden toegepast in Azure.

Gevoelige klantinvoer, zoals persoonlijke sleutel en token/wachtwoord, worden minder dan 48 uur opgeslagen in de Kubernetes Configuration-service. Als u een van deze waarden in Azure bijwerkt, moet u ervoor zorgen dat uw clusters binnen 48 uur verbinding maken met Azure.

U kunt de flux-configuratiestatus en -naleving bewaken in Azure Portal of dashboards gebruiken om de status, naleving, resourceverbruik en afstemmingsactiviteit te controleren. Zie De status en activiteit van GitOps (Flux v2) controleren voor meer informatie.

Versieondersteuning

De meest recente versie van de Flux v2-extensie (microsoft.flux) en de twee vorige versies (N-2) worden ondersteund. Over het algemeen wordt u aangeraden de meest recente versie van de extensie te gebruiken. microsoft.flux Vanaf versie 1.7.0 worden op ARM64 gebaseerde clusters ondersteund.

Notitie

Als u Flux v1 gebruikt, raden we u aan om zo snel mogelijk naar Flux v2 te migreren.

Ondersteuning voor op Flux v1 gebaseerde clusterconfiguratiebronnen die vóór 1 januari 2024 zijn gemaakt, eindigt op 24 mei 2025. Vanaf 1 januari 2024 kunt u geen nieuwe op Flux v1 gebaseerde clusterconfiguratiebronnen maken.

Als u ondersteuning voor private link hebt toegevoegd aan een Kubernetes-cluster met Azure Arc, werkt de microsoft.flux extensie out-of-the-box met communicatie terug naar Azure. Voor verbindingen met uw Git-opslagplaats, Helm-opslagplaats of andere eindpunten die nodig zijn om uw Kubernetes-manifesten te implementeren, moet u deze eindpunten inrichten achter uw firewall of deze weergeven op uw firewall, zodat de Flux-broncontroller ze kan bereiken.

Gegevensresidentie

Met de Azure GitOps-service (Azure Kubernetes Configuration Management) worden klantgegevens opgeslagen/verwerkt. Klantgegevens worden standaard gerepliceerd naar de gekoppelde regio. Voor de regio's Singapore, Azië - oost en Brazilië - zuid worden alle klantgegevens opgeslagen en verwerkt in de regio.

Flux-configuraties op schaal toepassen

Omdat Azure Resource Manager uw configuraties beheert, kunt u het maken van dezelfde configuratie automatiseren voor alle Azure Kubernetes Service- en Kubernetes-resources met Azure Arc met behulp van Azure Policy, binnen het bereik van een abonnement of een resourcegroep. Deze afdwinging op schaal zorgt ervoor dat specifieke configuraties consistent worden toegepast in hele groepen clusters.

Meer informatie over het gebruik van het ingebouwde beleid voor Flux v2.

Parameters

Raadpleeg de az k8s-configuration documentatie voor alle parameters die worden ondersteund door Flux in Azure. De Azure-implementatie biedt momenteel geen ondersteuning voor elke parameter die Door Flux wordt ondersteund.

Zie ondersteunde parameters voor GitOps (Flux v2) voor informatie over beschikbare parameters en hoe u deze kunt gebruiken.

Meerdere tenants

Flux v2 ondersteunt multitenancy in versie 0.26. Deze mogelijkheid is geïntegreerd in Azure GitOps met Flux v2.

Notitie

Voor de functie multitenancy moet u weten of uw manifesten cross-namespace sourceRef bevatten voor HelmRelease, Kustomization, ImagePolicy of andere objecten, of als u een Kubernetes-versie kleiner dan 1.20.6 gebruikt. Voorbereiden:

  • Voer een upgrade uit naar Kubernetes versie 1.20.6 of hoger.
  • Zorg er in uw Kubernetes-manifesten voor dat alles sourceRef betrekking heeft op objecten binnen dezelfde naamruimte als de GitOps-configuratie.

Manifesten voor multitenancy bijwerken

Stel dat u een implementatie implementeert op een fluxConfiguration van onze Kubernetes-clusters in de clusterconfiguratienaamruimte met clusterbereik. U configureert de bron voor het synchroniseren van de https://github.com/fluxcd/flux2-kustomize-helm-example opslagplaats. Dit is dezelfde Git-voorbeeldopslagplaats die wordt gebruikt in de zelfstudie Toepassingen implementeren met GitOps met Flux v2. Nadat Flux de opslagplaats heeft gesynchroniseerd, worden de resources geïmplementeerd die worden beschreven in de manifesten (YAML-bestanden). In twee van de manifesten worden HelmRelease- en HelmRepository-objecten beschreven.

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

De Flux-extensie implementeert standaard de fluxConfigurations flux-extensie door het flux-applier-serviceaccount te imiteren dat alleen in de clusterconfiguratienaamruimte wordt geïmplementeerd. Wanneer multitenancy is ingeschakeld, wordt de HelmRelease geblokkeerd met behulp van de bovenstaande manifesten. Dit komt doordat de HelmRelease zich in de nginx-naamruimte bevindt en verwijst naar een HelmRepository in de flux-system-naamruimte . De Flux Helm-controller kan ook de HelmRelease niet toepassen, omdat er geen flux-applier-serviceaccount is in de nginx-naamruimte .

Als u met meerdere tenants wilt werken, is de juiste benadering om alle Flux-objecten in dezelfde naamruimte te implementeren als de fluxConfigurations. Deze aanpak voorkomt het verwijzingsprobleem met meerdere naamruimten en stelt de Flux-controllers in staat om de machtigingen op te halen om de objecten toe te passen. Voor een GitOps-configuratie die is gemaakt in de clusterconfiguratienaamruimte , worden deze voorbeeldmanifesten dus als volgt gewijzigd:

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

Afmelden voor multitenancy

Wanneer de microsoft.flux extensie is geïnstalleerd, is multitenancy standaard ingeschakeld om de beveiliging standaard in uw clusters te garanderen. Als u echter meerdere tenants wilt uitschakelen, kunt u zich afmelden door de microsoft.flux extensie in uw clusters te maken of bij te werken met '--configuration-settings multiTenancy.enforce=false':

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>

Migreren van Flux v1

Als u Nog steeds Flux v1 gebruikt, raden we u aan om zo snel mogelijk naar Flux v2 te migreren.

Als u wilt migreren naar het gebruik van Flux v2 in dezelfde clusters waarin u Flux v1 hebt gebruikt, moet u eerst alle Flux v1 sourceControlConfigurations uit de clusters verwijderen. Omdat Flux v2 een fundamenteel andere architectuur heeft, wordt de microsoft.flux clusterextensie niet geïnstalleerd als er Flux v1-resources sourceControlConfigurations in een cluster zijn. Het proces voor het verwijderen van Flux v1-configuraties en het implementeren van Flux v2-configuraties duurt niet langer dan 30 minuten.

Als u Flux v1 sourceControlConfigurations verwijdert, worden er geen toepassingen gestopt die op de clusters worden uitgevoerd. Tijdens de periode waarin de Flux v1-configuratie wordt verwijderd en de Flux v2-extensie nog niet volledig is geïmplementeerd:

  • Als er nieuwe wijzigingen zijn in de toepassingsmanifesten die zijn opgeslagen in een Git-opslagplaats, worden deze wijzigingen niet opgehaald tijdens de migratie en wordt de toepassingsversie die op het cluster is geïmplementeerd, verouderd.
  • Als er onbedoelde wijzigingen in de clusterstatus zijn en deze afwijkt van de gewenste status die is opgegeven in de Git-bronopslagplaats, kan het cluster niet zelf herstellen.

Het is raadzaam om uw migratiescenario in een ontwikkelomgeving te testen voordat u uw productieomgeving migreert.

Flux v1-configuraties weergeven en verwijderen

Gebruik deze Azure CLI-opdrachten om bestaande sourceControlConfigurations in een cluster te zoeken en vervolgens te verwijderen:

az k8s-configuration list --cluster-name <Arc or AKS cluster name> --cluster-type <connectedClusters OR managedClusters> --resource-group <resource group name>
az k8s-configuration delete --name <configuration name> --cluster-name <Arc or AKS cluster name> --cluster-type <connectedClusters OR managedClusters> --resource-group <resource group name>

U kunt ook bestaande GitOps-configuraties voor een cluster bekijken en verwijderen in Azure Portal. Hiervoor gaat u naar het cluster waarin de configuratie is gemaakt en selecteert u GitOps in het linkerdeelvenster. Selecteer de configuratie en selecteer vervolgens Verwijderen.

Flux v2-configuraties implementeren

Gebruik Azure Portal of Azure CLI om Flux v2-configuraties toe te passen op uw clusters.

Informatie over de buitengebruikstelling van Flux v1

Het opensource-project van Flux v1 is gearchiveerd en de ontwikkeling van functies is voor onbepaalde tijd gestopt.

Flux v2 werd gelanceerd als het bijgewerkte opensource-project van Flux. Het heeft een nieuwe architectuur en ondersteunt meer GitOps-gebruiksvoorbeelden. Microsoft heeft in mei 2022 een versie van een extensie gelanceerd met Flux v2. Sindsdien hebben klanten geadviseerd om binnen drie jaar over te stappen naar Flux v2, omdat de ondersteuning voor het gebruik van Flux v1 in mei 2025 zal eindigen.

Belangrijke nieuwe functies die zijn geïntroduceerd in de GitOps-extensie voor Flux v2:

  • Flux v1 is een monolithische do-it-all-operator. Flux v2 scheidt de functies in gespecialiseerde controllers (broncontroller, Kustomize-controller, Helm-controller en meldingscontroller).
  • Ondersteuning voor synchronisatie met meerdere bronopslagplaatsen.
  • Ondersteunt multitenancy, zoals het toepassen van elke bronopslagplaats met een eigen set machtigingen.
  • Biedt operationele inzichten via statuscontroles, gebeurtenissen en waarschuwingen.
  • Ondersteunt Git-vertakkingen, vastmaken aan doorvoeringen en tags en het volgen van SemVer-tagbereiken.
  • Configuratie van referenties per GitRepository-resource: persoonlijke SSH-sleutel, HTTP/S-gebruikersnaam/wachtwoord/token en openbare OpenPGP-sleutels.

Volgende stappen