Delen via


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

Azure biedt een mogelijkheid voor geautomatiseerde implementaties van toepassingen door middel 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.
  • Mogelijkheid om toepassingen op schaal te implementeren via Azure Policy.

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 voorzien van versiebeheer en kunnen wijzigingen tussen versies eenvoudig worden 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. Hierdoor kan het goed worden geschaald naar honderden en duizenden clusters. Flux 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 clusterextensieresource Microsoft.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.

Besturingssystemen

microsoft.flux De extensie installeert standaard de Flux-controllers (Bron, Kustomize, Helm, Notification), de FluxConfig Custom Resource Definition (CRD), fluxconfig-agent, en fluxconfig-controller. Optioneel kunt u ook de Flux image-automation en image-reflector controllers installeren, die functionaliteit bieden voor het bijwerken en ophalen van Docker-afbeeldingen.

  • Flux-broncontroller: houdt toezicht op de source.toolkit.fluxcd.io aangepaste resources. Hiermee wordt synchronisatie tussen de Git-opslagplaatsen, Helm-opslagplaatsen, Buckets en Azure Blob Storage afgehandeld. Regelt autorisatie met de bron voor private Git-, Helm-repositories en accounts voor Azure-blobopslag. Hiermee worden de meest recente wijzigingen in de bron via een tar-archiefbestand weergeven.

  • Flux Kustomize-controller: houdt toezicht op de kustomization.toolkit.fluxcd.io aangepaste resources. Past Kustomize- of ruwe YAML-bestanden van de bron toe op de cluster.

  • Flux Helm controller: houdt toezicht op 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: houdt toezicht op de notification.toolkit.fluxcd.io aangepaste resources. Ontvangt meldingen van alle Flux-controllers. Pusht meldingen naar door de gebruiker gedefinieerde webhook-eindpunten.

  • Aangepaste Flux-resourceomschrijvingen

    • 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: Een Custom Resource Definition voor fluxconfigs.clusterconfig.azure.com aangepaste resources die FluxConfig Kubernetes-objecten definiëren.

  • 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 doorgeven van Flux-statuswijzigingen in het cluster aan 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. U kunt deze extensie niet installeren op het naamruimte-niveau.

Flux-configuraties

Diagram met de installatie van een Flux-configuratie in een Kubernetes- of AKS-cluster met Azure Arc.

Als u architectuurdiagrammen in hoge resolutie wilt downloaden, gaat u naar Jumpstart Gems.

U maakt Flux-configuratieresources (Microsoft.KubernetesConfiguration/fluxConfigurations) om GitOps-beheer van het cluster mogelijk te maken vanuit uw Git-opslagplaatsen, Bucket-bronnen of Azure Blob-opslag. 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 de beveiliging van gegevens te garanderen, worden de gegevens van de bron door de clusterconfiguratieservice versleuteld opgeslagen in rust in een Azure Cosmos DB-database.

De fluxconfig-agent- en fluxconfig-controller-agenten, 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:

  • Houdt statusupdates bij van 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 authenticatiegeheim op basis van door de gebruiker verstrekte privésleutel/http basic-auth/known-hosts/no-auth-informatie.
  • Hiermee stelt u op rollen gebaseerd toegangsbeheer in (serviceaccount ingericht, rolbinding 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 controleert op nieuwe of bijgewerkte fluxConfiguration resources binnen Azure. De agent vereist connectiviteit met Azure voor de gewenste status van de fluxConfiguration die op het cluster moet worden toegepast. Als de agent geen verbinding kan maken met Azure, wachten 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.

Als u ondersteuning voor private link hebt toegevoegd aan een Kubernetes-cluster met Azure Arc, werkt de microsoft.flux extensie standaard met communicatie 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.

Gegevensopslaglocatie

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.

Zie Toepassingen consistent op schaal implementeren met flux v2-configuraties en Azure Policy voor meer informatie.

Parameterwaarden

Raadpleeg de az k8s-configuration documentatie voor alle parameters die worden ondersteund door Flux v2 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.

Multitenantie

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

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 fluxConfiguration implementeert in een van onze Kubernetes-clusters in de cluster-config naamruimte met cluster-scope. 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). Twee van de manifesten beschrijven HelmRelease en HelmRepository objecten.

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 de fluxConfigurations standaardinstelling door het flux-applier serviceaccount te imiteren dat alleen in de cluster-config naamruimte is geïmplementeerd. Als multitenancy is ingeschakeld, wordt het HelmRelease gebruik van de bovenstaande manifesten geblokkeerd. Dit komt doordat de HelmRelease naamruimte zich in de nginx naamruimte bevindt, maar verwijst naar een HelmRepository in de flux-system naamruimte. Ook kan de Flux helm-controller de HelmRelease, omdat er geen flux-applier serviceaccount in de nginx naamruimte is, niet toepassen.

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 in de cluster-config naamruimte is gemaakt, 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 van multi-tenancy

Wanneer de microsoft.flux extensie is geïnstalleerd, is multitenancy standaard ingeschakeld. Als u multitenancy wilt uitschakelen, kunt u dit doen door de extensie microsoft.flux in uw clusters aan te maken of bij te werken met --configuration-settings multiTenancy.enforce=false zoals in deze voorbeeldopdrachten wordt getoond:

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>

Volgende stappen