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:
- Met YAML opgemaakte manifesten waarin Kubernetes-resources worden beschreven (zoals naamruimten, geheimen, implementaties en andere)
- Helm-grafieken voor het implementeren van toepassingen
- Kustomize-bestanden om omgevingsspecifieke wijzigingen te beschrijven
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. 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.
Controllers
microsoft.flux
De extensie installeert standaard de Flux-controllers (Bron, Kustomize, Helm, Notification) en de CrD fluxconfig-agent
(FluxConfig Custom Resource Definition) en fluxconfig-controller
. U kunt ook flux image-automation
en image-reflector
controllers 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 deHelmChart
aangepaste resource en past u deHelmRelease
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ërenFluxConfig
.fluxconfig-agent
: Verantwoordelijk voor het bekijken van Azure voor nieuwe of bijgewerktefluxConfigurations
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 elkefluxConfigurations
resource.fluxconfig-controller
: Controleert defluxconfigs.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 bij het bereik van de naamruimte.
Flux-configuraties
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 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 op rollen gebaseerd toegangsbeheer in (serviceaccount ingericht, rolbinding gemaakt/toegewezen, rol gemaakt/toegewezen).
- Maakt
GitRepository
ofBucket
aangepaste resources enKustomization
aangepaste resources op basis van de informatie in deFluxConfig
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 Kustomization
resource. 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, 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.
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.
GitOps met private link
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.
Zie Toepassingen consistent op schaal implementeren met flux v2-configuraties en Azure Policy voor meer informatie.
Parameters
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.
Meerdere tenants
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.- Als u tijd nodig hebt om uw manifesten bij te werken, kunt u zich afmelden voor multitenancy. U moet echter nog steeds uw Kubernetes-versie upgraden.
Manifesten voor multitenancy bijwerken
Stel dat u een implementatie implementeert in een fluxConfiguration
van onze Kubernetes-clusters in de cluster-config
naamruimte 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). 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 voor multitenancy
Wanneer de microsoft.flux
extensie is geïnstalleerd, is multitenancy standaard ingeschakeld. Als u multitenancy wilt uitschakelen, kunt u zich afmelden door de microsoft.flux
extensie in uw clusters te maken of bij te werken, --configuration-settings multiTenancy.enforce=false
zoals wordt weergegeven in deze voorbeeldopdrachten:
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 <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>
U kunt ook bestaande GitOps-configuraties voor een cluster zoeken 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
- Gebruik onze zelfstudie voor meer informatie over het inschakelen van GitOps op uw AKS- of Kubernetes-clusters met Azure Arc.
- Meer informatie over CI/CD-werkstroom met behulp van GitOps.