Delen via


Zelfstudie: Toepassingen implementeren met GitOps met Flux v2

In deze zelfstudie wordt beschreven hoe u GitOps gebruikt in een Kubernetes-cluster. GitOps met Flux v2 is ingeschakeld als clusterextensie in Kubernetes-clusters met Azure Arc of AKS-clusters (Azure Kubernetes Service). Nadat de microsoft.flux clusterextensie is geïnstalleerd, kunt u een of meer fluxConfigurations resources maken die uw Git-opslagplaatsbronnen synchroniseren met het cluster en het cluster afstemmen op de gewenste status. Met GitOps kunt u uw Git-opslagplaats gebruiken als de bron van waarheid voor clusterconfiguratie en toepassingsimplementatie.

In deze zelfstudie gebruiken we een voorbeeld van een GitOps-configuratie met twee kustomisaties, zodat u kunt zien hoe een kustomisatie afhankelijk kan zijn van een andere. U kunt indien nodig meer kustomisaties en afhankelijkheden toevoegen, afhankelijk van uw scenario.

Neem even de tijd om te leren hoe GitOps met Flux conceptueel werkt voordat u verdergaat.

Tip

Hoewel de bron in deze zelfstudie een Git-opslagplaats is, biedt Flux ook ondersteuning voor andere algemene bestandsbronnen, zoals Helm-opslagplaatsen, Buckets en Azure Blob Storage.

U kunt ook Flux-configuraties maken met bicep-, ARM-sjablonen of Terraform AzAPI-provider. Zie Microsoft.KubernetesConfiguration fluxConfigurations voor meer informatie.

Belangrijk

De microsoft.flux extensie heeft primaire versie 1.0.0 uitgebracht. Dit omvat de multitenancy-functie. Als u bestaande GitOps Flux v2-configuraties hebt die gebruikmaken van een eerdere versie van de microsoft.flux extensie, kunt u handmatig upgraden naar de nieuwste versie met behulp van de Azure CLI: az k8s-extension create -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux --extension-type microsoft.flux -t <CLUSTER_TYPE> (gebruik -t connectedClusters voor Arc-clusters en -t managedClusters voor AKS-clusters).

Vereisten

Voor het implementeren van toepassingen met GitOps met Flux v2 hebt u het volgende nodig:

Voor Kubernetes-clusters met Azure Arc

Voor Azure Kubernetes Service-clusters

  • Een op MSI gebaseerd AKS-cluster dat actief en actief is.

    Belangrijk

    Zorg ervoor dat het AKS-cluster is gemaakt met MSI (niet SPN), omdat de microsoft.flux extensie niet werkt met AKS-clusters op basis van SPN. Voor nieuwe AKS-clusters die zijn gemaakt met az aks create, is het cluster standaard op MSI gebaseerd. Voor al gemaakte SPN-clusters die moeten worden geconverteerd naar MSI, voert u de opdracht uit az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Zie Een beheerde identiteit gebruiken in AKS voor meer informatie.

  • Lees- en schrijfmachtigingen voor het Microsoft.ContainerService/managedClusters resourcetype.

Gebruikelijk voor beide clustertypen

  • Lees- en schrijfmachtigingen voor deze resourcetypen:

    • Microsoft.KubernetesConfiguration/extensions
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • Azure CLI versie 2.15 of hoger. Installeer de Azure CLI of gebruik de volgende opdrachten om bij te werken naar de nieuwste versie:

    az version
    az upgrade
    
  • De Kubernetes-opdrachtregelclient, kubectl. kubectl is al geïnstalleerd als u Azure Cloud Shell gebruikt.

    Lokaal installeren kubectl met behulp van de az aks install-cli opdracht:

    az aks install-cli
    
  • Registratie van de volgende Azure-resourceproviders:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    Registratie is een asynchroon proces en het moet binnen 10 minuten worden voltooid. Gebruik de volgende opdracht om het registratieproces te bewaken:

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

Ondersteuning voor versies en regio's

GitOps wordt momenteel ondersteund in alle regio's die Kubernetes met Azure Arc ondersteunen. GitOps wordt op het moment ondersteund in een subset van de regio's die door AKS worden ondersteund. De GitOps-service voegt nieuwe ondersteunde regio's toe aan een regelmatige frequentie.

De meest recente versie van de Flux v2-extensie en de twee vorige versies (N-2) worden ondersteund. Over het algemeen wordt u aangeraden de meest recente versie van de extensie te gebruiken.

Netwerkvereisten

De GitOps-agents vereisen uitgaande TCP naar de opslagplaatsbron op poort 22 (SSH) of de poort 443 (HTTPS) om te functioneren. De agents hebben ook toegang nodig tot de volgende uitgaande URL's:

Eindpunt (DNS) Description
https://management.azure.com Vereist dat deze agent kan communiceren met de Kubernetes Configuration-service.
https://<region>.dp.kubernetesconfiguration.azure.com Eindpunt van het gegevensvlak voor deze agent om de status te pushen en configuratiegegevens op te halen. Is afhankelijk <region> van (de ondersteunde regio's die eerder zijn genoemd).
https://login.microsoftonline.com Vereist om de Azure Resource Manager-tokens op te halen en bij te werken.
https://mcr.microsoft.com Vereist voor het ophalen van containerinstallatiekopieën voor Flux-controllers.

CLI-extensies inschakelen

Installeer de nieuwste k8s-configuration en k8s-extension CLI-extensiepakketten:

az extension add -n k8s-configuration
az extension add -n k8s-extension

Ga als volgt te werk om deze pakketten bij te werken naar de nieuwste versies:

az extension update -n k8s-configuration
az extension update -n k8s-extension

Gebruik de volgende opdracht om een lijst weer te geven met alle geïnstalleerde Azure CLI-extensies en de bijbehorende versies:

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.2.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     1.5.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.1.0

Tip

Zie de sectie GitOps (Flux v2) van Problemen met extensies voor Kubernetes-clusters met Azure Arc oplossen voor hulp bij het oplossen van eventuele fouten.

Een Flux-configuratie toepassen

Gebruik de k8s-configuration Azure CLI-extensie of Azure Portal om GitOps in te schakelen in een Kubernetes-cluster met AKS of Arc. Gebruik voor een demonstratie de openbare opslagplaats gitops-flux2-kustomize-helm-mt .

Belangrijk

De demonstratieopslagplaats is ontworpen om het gebruik van deze zelfstudie te vereenvoudigen en enkele belangrijke principes te illustreren. Als u up-to-date wilt blijven, kan de opslagplaats af en toe belangrijke wijzigingen krijgen van versie-upgrades. Deze wijzigingen zijn niet van invloed op uw nieuwe toepassing van deze zelfstudie, alleen eerdere zelfstudietoepassingen die niet zijn verwijderd. Zie de vrijwaring voor wijzigingen die fouten veroorzaken voor meer informatie over het afhandelen van deze wijzigingen.

In het volgende voorbeeld wordt de az k8s-configuration flux create opdracht gebruikt om een Flux-configuratie toe te passen op een cluster met behulp van de volgende waarden en instellingen:

  • De resourcegroep die het cluster bevat, is flux-demo-rg.
  • De naam van het Azure Arc-cluster is flux-demo-arc.
  • Het clustertype is Azure Arc (-t connectedClusters), maar dit voorbeeld werkt ook met AKS (-t managedClusters).
  • De naam van de Flux-configuratie is cluster-config.
  • De naamruimte voor configuratie-installatie is cluster-config.
  • De URL voor de openbare Git-opslagplaats is https://github.com/Azure/gitops-flux2-kustomize-helm-mt.
  • De Git-opslagplaatsbranch is main.
  • Het bereik van de configuratie is cluster. Dit bereik geeft de operators machtigingen om wijzigingen aan te brengen in het hele cluster. Als u het bereik met deze zelfstudie wilt gebruiken namespace , raadpleegt u de benodigde wijzigingen.
  • Er worden twee kustomisaties opgegeven met namen infra en apps. Elk pad is gekoppeld aan een pad in de opslagplaats.
  • De apps kustomisatie is afhankelijk van de infra kustomisatie. (De infra kustomisatie moet worden voltooid voordat de apps kustomisatie wordt uitgevoerd.)
  • Ingesteld prune=true op beide kustomisaties. Deze instelling zorgt ervoor dat de objecten die Flux in het cluster hebben geïmplementeerd, worden opgeschoond als ze uit de opslagplaats worden verwijderd of dat de Flux-configuratie of kustomisaties worden verwijderd.
az k8s-configuration flux create -g flux-demo-rg \
-c flux-demo-arc \
-n cluster-config \
--namespace cluster-config \
-t connectedClusters \
--scope cluster \
-u https://github.com/Azure/gitops-flux2-kustomize-helm-mt \
--branch main  \
--kustomization name=infra path=./infrastructure prune=true \
--kustomization name=apps path=./apps/staging prune=true dependsOn=\["infra"\]

De microsoft.flux extensie is geïnstalleerd op het cluster (als deze nog niet is geïnstalleerd in een eerdere GitOps-implementatie).

Tip

Met az k8s-configuration flux create de opdracht wordt de microsoft.flux extensie geïmplementeerd in het cluster en wordt de configuratie gemaakt. In sommige scenario's kunt u het flux-extensie-exemplaar afzonderlijk maken voordat u uw configuratiebronnen maakt. Gebruik hiervoor de az k8s-extension create opdracht om een exemplaar van de extensie op uw cluster te maken.

Wanneer de fluxconfiguratie voor het eerst wordt geïnstalleerd, kan de eerste nalevingsstatus zijn Pending of Non-compliant omdat afstemming nog steeds actief is. Voer na een minuut of zo opnieuw een query uit op de configuratie om de uiteindelijke nalevingsstatus te zien.

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

Voer de volgende opdracht uit om te bevestigen dat de implementatie is geslaagd:

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

Met een geslaagde implementatie worden de volgende naamruimten gemaakt:

  • flux-system: bevat de Flux-extensiecontrollers.
  • cluster-config: bevat de Flux-configuratieobjecten.
  • nginx, , : podinforedisnaamruimten voor workloads die worden beschreven in manifesten in de Git-opslagplaats.

Voer de volgende opdracht uit om de naamruimten te bevestigen:

kubectl get namespaces

De flux-system naamruimte bevat de Flux-extensieobjecten:

  • Azure Flux-controllers: fluxconfig-agent, fluxconfig-controller
  • OSS Flux-controllers: source-controller, kustomize-controller, helm-controllernotification-controller

De Flux-agent- en controllerpods moeten de status Actief hebben. Bevestig dit met behulp van de volgende opdracht:

kubectl get pods -n flux-system

NAME                                      READY   STATUS    RESTARTS   AGE
fluxconfig-agent-9554ffb65-jqm8g          2/2     Running   0          21m
fluxconfig-controller-9d99c54c8-nztg8     2/2     Running   0          21m
helm-controller-59cc74dbc5-77772          1/1     Running   0          21m
kustomize-controller-5fb7d7b9d5-cjdhx     1/1     Running   0          21m
notification-controller-7d45678bc-fvlvr   1/1     Running   0          21m
source-controller-df7dc97cd-4drh2         1/1     Running   0          21m

De naamruimte cluster-config heeft de Flux-configuratieobjecten.

kubectl get crds

NAME                                                   CREATED AT
alerts.notification.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
arccertificates.clusterconfig.azure.com                2022-03-28T21:45:19Z
azureclusteridentityrequests.clusterconfig.azure.com   2022-03-28T21:45:19Z
azureextensionidentities.clusterconfig.azure.com       2022-03-28T21:45:19Z
buckets.source.toolkit.fluxcd.io                       2022-04-06T17:15:48Z
connectedclusters.arc.azure.com                        2022-03-28T21:45:19Z
customlocationsettings.clusterconfig.azure.com         2022-03-28T21:45:19Z
extensionconfigs.clusterconfig.azure.com               2022-03-28T21:45:19Z
fluxconfigs.clusterconfig.azure.com                    2022-04-06T17:15:48Z
gitconfigs.clusterconfig.azure.com                     2022-03-28T21:45:19Z
gitrepositories.source.toolkit.fluxcd.io               2022-04-06T17:15:48Z
helmcharts.source.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmreleases.helm.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmrepositories.source.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imagepolicies.image.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
imagerepositories.image.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imageupdateautomations.image.toolkit.fluxcd.io         2022-04-06T17:15:48Z
kustomizations.kustomize.toolkit.fluxcd.io             2022-04-06T17:15:48Z
providers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
receivers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
volumesnapshotclasses.snapshot.storage.k8s.io          2022-03-28T21:06:12Z
volumesnapshotcontents.snapshot.storage.k8s.io         2022-03-28T21:06:12Z
volumesnapshots.snapshot.storage.k8s.io                2022-03-28T21:06:12Z
websites.extensions.example.com                        2022-03-30T23:42:32Z

Bevestig andere details van de configuratie met behulp van de volgende opdrachten.

kubectl get fluxconfigs -A

NAMESPACE        NAME             SCOPE     URL                                                       PROVISION   AGE
cluster-config   cluster-config   cluster   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   Succeeded   44m
kubectl get gitrepositories -A

NAMESPACE        NAME             URL                                                       READY   STATUS                                                            AGE
cluster-config   cluster-config   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   True    Fetched revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   45m
kubectl get helmreleases -A

NAMESPACE        NAME      READY   STATUS                             AGE
cluster-config   nginx     True    Release reconciliation succeeded   66m
cluster-config   podinfo   True    Release reconciliation succeeded   66m
cluster-config   redis     True    Release reconciliation succeeded   66m
kubectl get kustomizations -A


NAMESPACE        NAME                   READY   STATUS                                                            AGE
cluster-config   cluster-config-apps    True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m
cluster-config   cluster-config-infra   True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m

Workloads worden geïmplementeerd vanuit manifesten in de Git-opslagplaats.

kubectl get deploy -n nginx

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller                   1/1     1            1           67m
nginx-ingress-controller-default-backend   1/1     1            1           67m

kubectl get deploy -n podinfo

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
podinfo   1/1     1            1           68m

kubectl get all -n redis

NAME                 READY   STATUS    RESTARTS   AGE
pod/redis-master-0   1/1     Running   0          68m

NAME                     TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/redis-headless   ClusterIP   None          <none>        6379/TCP   68m
service/redis-master     ClusterIP   10.0.13.182   <none>        6379/TCP   68m

NAME                            READY   AGE
statefulset.apps/redis-master   1/1     68m

Bepalen welke controllers worden geïmplementeerd met de Flux-clusterextensie

Voor sommige scenario's wilt u mogelijk wijzigen welke Flux-controllers worden geïnstalleerd met de Flux-clusterextensie.

De sourcecontrollers , helmen kustomizenotification Flux worden standaard geïnstalleerd. De image-automation en image-reflector controllers die worden gebruikt om een Git-opslagplaats bij te werken wanneer er nieuwe containerinstallatiekopieën beschikbaar zijn, moeten expliciet worden ingeschakeld.

U kunt de k8s-extension opdracht gebruiken om de standaardopties te wijzigen:

  • --config source-controller.enabled=<true/false> (standaard true)
  • --config helm-controller.enabled=<true/false> (standaard true)
  • --config kustomize-controller.enabled=<true/false> (standaard true)
  • --config notification-controller.enabled=<true/false> (standaard true)
  • --config image-automation-controller.enabled=<true/false> (standaard false)
  • --config image-reflector-controller.enabled=<true/false> (standaard false)

Als u bijvoorbeeld meldingen wilt uitschakelen, kunt u instellen notification-controller.enabled op false.

Met deze voorbeeldopdracht worden de image-reflector en image-automation controllers geïnstalleerd. Als de Flux-extensie automatisch is gemaakt toen een Flux-configuratie voor het eerst werd gemaakt, is fluxde extensienaam.

az k8s-extension create -g <cluster_resource_group> -c <cluster_name> -t <connectedClusters or managedClusters or provisionedClusters> --name flux --extension-type microsoft.flux --config image-automation-controller.enabled=true image-reflector-controller.enabled=true

Kubelet-identiteit gebruiken als verificatiemethode voor AKS-clusters

Voor AKS-clusters is een van de verificatieopties die moeten worden gebruikt kubelet-identiteit. Standaard maakt AKS een eigen kubelet-identiteit in de beheerde resourcegroep. Als u wilt, kunt u een vooraf gemaakte beheerde kubelet-identiteit gebruiken. Hiervoor voegt u de parameter --config useKubeletIdentity=true toe op het moment van de installatie van de Flux-extensie.

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config useKubeletIdentity=true

Onboardingrichtlijnen voor Red Hat OpenShift

Flux-controllers vereisen een niet-basisbeveiligingscontextbeperking om pods op de juiste wijze in te richten op het cluster. Deze beperkingen moeten worden toegevoegd aan het cluster voordat u de microsoft.flux extensie implementeert.

NS="flux-system"
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:kustomize-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:helm-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:source-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:notification-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-automation-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-reflector-controller

Zie de Flux-documentatie voor meer informatie over OpenShift-richtlijnen voor onboarding flux.

Werken met parameters

Flux ondersteunt veel parameters om verschillende scenario's mogelijk te maken. Zie de officiële Flux-documentatie voor een beschrijving van alle parameters die Door Flux worden ondersteund. Flux in Azure biedt nog geen ondersteuning voor alle parameters. Laat ons weten of een parameter die u nodig hebt ontbreekt in de Azure-implementatie.

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

Werken met verificatiereferentie voor lokaal geheim

Als u een referentie voor lokale geheime verificatie wilt gebruiken, moet het geheim bestaan in dezelfde naamruimte waar het fluxConfiguration wordt geïmplementeerd. Het geheim moet ook alle verificatieparameters bevatten die nodig zijn voor de bron.

Zie Lokaal geheim voor verificatie met bron voor informatie over het maken van geheimen voor verschillende fluxConfiguration bronnen.

Clusterconfiguratie beheren met behulp van de Flux Kustomize-controller

De Flux Kustomize-controller wordt geïnstalleerd als onderdeel van de microsoft.flux clusterextensie. Hiermee kan het declaratieve beheer van clusterconfiguratie en toepassingsimplementatie worden uitgevoerd met behulp van Kubernetes-manifesten die zijn gesynchroniseerd vanuit een Git-opslagplaats. Deze Kubernetes-manifesten kunnen eventueel een kustomize.yaml-bestand bevatten.

Zie de volgende bronnen voor gebruiksgegevens:

Helm-grafiekreleases beheren met behulp van de Flux Helm-controller

De Flux Helm-controller wordt geïnstalleerd als onderdeel van de microsoft.flux clusterextensie. Hiermee kunt u declaratief Helm-grafiekreleases beheren met Kubernetes-manifesten die u in uw Git-opslagplaats onderhoudt.

Zie de volgende bronnen voor gebruiksgegevens:

Tip

Vanwege hoe Helm indexbestanden verwerkt, is het verwerken van Helm-grafieken een dure bewerking en kan een zeer hoge geheugenvoetafdruk hebben. Als gevolg hiervan kan het afstemmen van een groot aantal Helm-grafieken tegelijk geheugenpieken en OOMKilled -fouten veroorzaken. Standaard stelt de controller de geheugenlimiet in op 1Gi en de geheugenaanvragen op 64Mi. Als u deze limiet en aanvragen wilt verhogen vanwege een groot aantal grote Afstemmingen van Helm-grafieken, voert u de volgende opdracht uit nadat u de extensie microsoft.flux hebt geïnstalleerd:

az k8s-extension update -g <resource-group> -c <cluster-name> -n flux -t connectedClusters --config source-controller.resources.limits.memory=2Gi source-controller.resources.requests.memory=300Mi

De GitRepository-bron voor Helm-grafieken gebruiken

Als uw Helm-grafieken zijn opgeslagen in de GitRepository bron die u configureert als onderdeel van de fluxConfigurations resource, kunt u aangeven dat de geconfigureerde bron moet worden gebruikt als bron van de Helm-grafieken door toe te voegen aan clusterconfig.azure.com/use-managed-source: "true" uw HelmRelease.yaml-bestand, zoals wordt weergegeven in het volgende voorbeeld:

---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: somename
  namespace: somenamespace
  annotations:
    clusterconfig.azure.com/use-managed-source: "true"
spec:
  ...

Wanneer u deze aantekening gebruikt, wordt de geïmplementeerde HelmRelease gepatcht met de verwijzing naar de geconfigureerde bron. Momenteel wordt alleen GitRepository de bron ondersteund.

Helm-driftdetectie

Driftdetectie voor Helm-releases is niet standaard ingeschakeld. microsoft.flux Vanaf v1.7.5 kunt u Helm-driftdetectie inschakelen door de volgende opdracht uit te voeren:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.detectDrift=true 

Strikte vervanging van variabelen na de build

Strikte vervanging van variabelen na build is beschikbaar vanaf microsoft.flux v1.13.1.

Als u een Flux-extensie wilt maken waarvoor strikt vervangingsbeleid is ingeschakeld, voert u deze opdracht uit:

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config kustomize-controller.strict-substitution-mode=true

Als u een bestaande Flux-extensie wilt bijwerken om strikt vervangingsbeleid in te schakelen, voert u deze opdracht uit:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.strict-substitution-mode=true

Verticale schaalaanpassing

Ondersteuning voor verticale schaalaanpassing is beschikbaar vanaf microsoft.flux v1.12.0. Op dit moment worden alleen specifieke parameters ondersteund die worden beschreven in de documentatie voor verticale schaalaanpassing van Flux. Andere parameters kunnen handmatig worden toegepast op het cluster.

Als u resourcelimieten wilt verhogen op controllers die buiten de huidige limieten zijn, voert u deze opdracht uit en wijzigt u indien nodig het specifieke resourcetype en de waarde:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.resources.limits.memory=2Gi kustomize-controller.resources.limits.cpu=2000m

Als u het aantal afstemmingen wilt verhogen dat parallel kan worden uitgevoerd, voert u deze opdracht uit:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.concurrent=6 kustomize-controller.requeue-dependency=50s

Voer deze opdracht uit om in-memory build in te schakelen:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.enable-in-memory-build=true

Helm OOM-horloge

microsoft.flux Vanaf v1.7.5 kunt u helm-OOM-horloge inschakelen. Zie Helm inschakelen in de buurt van OOM-detectie voor meer informatie.

Controleer mogelijke herstelstrategieën en pas deze indien nodig toe wanneer u deze functie inschakelt.

Voer de volgende opdracht uit om OOM Watch in te schakelen:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.outOfMemoryWatch.enabled=true helm-controller.outOfMemoryWatch.memoryThreshold=70 helm-controller.outOfMemoryWatch.interval=700ms

Als u geen waarden opgeeft en memoryThreshold outOfMemoryWatchde standaardgeheugendrempelwaarde is ingesteld op 95%, waarbij het geheugengebruik moet worden gecontroleerd op 500 ms.

Configureerbare parameters op logboekniveau

De voor Flux-controllers is standaard log-level ingesteld op info. microsoft.flux Vanaf v1.8.3 kunt u deze standaardinstellingen als volgt wijzigen met behulp van de k8s-extension opdracht:

--config helm-controller.log-level=<info/error/debug>
--config source-controller.log-level=<info/error/debug>
--config kustomize-controller.log-level=<info/error/debug>
--config notification-controller.log-level=<info/error/debug>
--config image-automation-controller.log-level=<info/error/debug>
--config image-reflector-controller.log-level=<info/error/debug>

Geldige waarden zijn debug, infoof error. Als u bijvoorbeeld de log-level voor de source-controller en kustomize-controllerwilt wijzigen, gebruikt u de volgende opdracht:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config source-controller.log-level=error kustomize-controller.log-level=error

Beginnend met microsoft.flux v1.9.1 en fluxconfig-agent ondersteunings fluxconfig-controller info - en error logboekniveaus (maar niet debug). Deze kunnen als volgt worden gewijzigd met behulp van de opdracht k8s-extension:

--config fluxconfig-agent.log-level=<info/error>
--config fluxconfig-controller.log-level=<info/error>

De volgende opdracht wordt bijvoorbeeld gewijzigd log-level in error:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config fluxconfig-agent.log-level=error fluxconfig-controller.log-level=error

Afschaffing van Azure DevOps SSH-RSA

Azure DevOps heeft de afschaffing van SSH-RSA aangekondigd als een ondersteunde versleutelingsmethode voor het maken van verbinding met Azure-opslagplaatsen met behulp van SSH. Als u SSH-sleutels gebruikt om verbinding te maken met Azure-opslagplaatsen in Flux-configuraties, raden we u aan om over te stappen op veiligere RSA-SHA2-256- of RSA-SHA2-512-sleutels.

Bij het afstemmen van Flux-configuraties ziet u mogelijk een foutbericht dat aangeeft dat ssh-rsa binnenkort wordt afgeschaft of niet wordt ondersteund. Zo ja, werkt u het hostsleutel-algoritme bij dat wordt gebruikt voor het tot stand brengen van SSH-verbindingen met Azure DevOps-opslagplaatsen vanuit flux source-controller en image-automation-controller (indien ingeschakeld) met behulp van de az k8s-extension update opdracht. Voorbeeld:

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config source-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config image-automation-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

Zie Einde van SSH-RSA-ondersteuning voor Azure-opslagplaatsen voor meer informatie over afschaffing van Azure DevOps SSH-RSA.

Aantekening configureren op Flux-extensiepods

Bij het configureren van een andere oplossing dan Azure Firewall zijn netwerk- en FQDN-/toepassingsregels vereist voor een AKS-cluster. microsoft.flux Vanaf v1.11.1 kunnen Flux-controllerpods nu de aantekening kubernetes.azure.com/set-kube-service-host-fqdn instellen in hun podspecificaties. Hierdoor wordt verkeer naar de domeinnaam van de API-server toegestaan, zelfs wanneer er een Laag 7-firewall aanwezig is, waardoor implementaties tijdens de installatie van de extensie worden vergemakkelijkt. Gebruik de volgende opdrachten om deze aantekening te configureren wanneer u de Flux-extensie gebruikt.

# Create flux extension with annotation

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config setKubeServiceHostFqdn=true
    
# Update flux extension with annotation

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config setKubeServiceHostFqdn=true

Workload-identiteit in AKS-clusters

microsoft.flux Vanaf v1.8.0 kunt u Flux-configuraties maken in AKS-clusters waarvoor workloadidentiteit is ingeschakeld. Hiervoor wijzigt u de flux-extensie, zoals wordt weergegeven in de volgende stappen.

  1. Haal de URL van de OIDC-verlener voor uw cluster op.

  2. Maak een beheerde identiteit en noteer de client-id.

  3. Maak de flux-extensie op het cluster met behulp van de volgende opdracht:

    az k8s-extension create --resource-group <resource_group_name> --cluster-name <aks_cluster_name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config workloadIdentity.enable=true workloadIdentity.azureClientId=<user_assigned_client_id>
    
  4. Stel een federatieve identiteitsreferentie in. Voorbeeld:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"source-controller" --audience api://AzureADTokenExchange
    
    # For image-reflector controller if you plan to enable it during extension creation, it is not deployed by default
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-controller" --audience api://AzureADTokenExchange
    
    # For kustomize-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"kustomize-controller" --audience api://AzureADTokenExchange
    
  5. Zorg ervoor dat de aangepaste resource die de waarde azure voor workloadidentiteit .spec.provider moet gebruiken, moet worden gebruikt in het manifest. Voorbeeld:

    apiVersion: source.toolkit.fluxcd.io/v1beta2
    kind: HelmRepository
    metadata:
      name: acrrepo
    spec:
      interval: 10m0s
      type: <helm_repository_type>
      url: <helm_repository_link>
      provider: azure
    
  6. Zorg ervoor dat u over de juiste machtigingen beschikt voor de workloadidentiteit voor de resource die u wilt dat de broncontroller of image-reflectorcontroller wordt opgehaald. Als u bijvoorbeeld Azure Container Registry gebruikt, AcrPull zijn machtigingen vereist.

De Flux-configuratie en -extensie verwijderen

Gebruik de volgende opdrachten om uw Flux-configuraties te verwijderen en, indien gewenst, de Flux-extensie zelf.

De Flux-configuraties verwijderen

Met de volgende opdracht verwijdert u zowel de fluxConfigurations resource in Azure als de Flux-configuratieobjecten in het cluster. Omdat de Flux-configuratie oorspronkelijk is gemaakt met de prune=true parameter voor de kustomisatie, worden alle objecten die in het cluster zijn gemaakt op basis van manifesten in de Git-opslagplaats verwijderd wanneer de Flux-configuratie wordt verwijderd. Met deze opdracht wordt de Flux-extensie zelf echter niet verwijderd.

az k8s-configuration flux delete -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters --yes

De Flux-clusterextensie verwijderen

Wanneer u de Flux-extensie verwijdert, worden zowel de microsoft.flux extensieresource in Azure als de Flux-extensieobjecten in het cluster verwijderd.

Belangrijk

Zorg ervoor dat u alle Flux-configuraties in het cluster verwijdert voordat u de Flux-extensie verwijdert. Als u de extensie verwijdert zonder eerst de Flux-configuraties te verwijderen, kan uw cluster in een instabiele toestand blijven.

Als de Flux-extensie automatisch is gemaakt toen de Flux-configuratie voor het eerst werd gemaakt, is fluxde extensienaam.

az k8s-extension delete -g flux-demo-rg -c flux-demo-arc -n flux -t connectedClusters --yes

Tip

Deze opdrachten gebruiken -t connectedClusters, die geschikt zijn voor een Kubernetes-cluster met Azure Arc. Gebruik in plaats daarvan voor een AKS-cluster -t managedClusters .

Volgende stappen