Freigeben über


Lernprogramm: Bereitstellen von Anwendungen mithilfe von GitOps mit Flux v2

In diesem Tutorial wird beschrieben, wie Sie GitOps in einem Kubernetes-Cluster verwenden. GitOps mit Flux v2 ist eine Clustererweiterung für Azure Arc-fähige Kubernetes-Cluster oder Azure Kubernetes Service (AKS)-Cluster. Nachdem Sie die microsoft.flux Clustererweiterung installiert haben, können Sie eine oder fluxConfigurations mehrere Ressourcen erstellen, die Ihre Git-Repositoryquellen mit dem Cluster synchronisieren und den Cluster mit dem gewünschten Zustand abgleichen. Mithilfe von GitOps können Sie Ihr Git-Repository als Wahrheitsquelle für die Clusterkonfiguration und Anwendungsbereitstellung verwenden.

In diesem Lernprogramm verwenden Sie eine Beispiel-GitOps-Konfiguration mit zwei Kustomisierungen, damit Sie sehen können, wie eine Kustomisierung eine Abhängigkeit von einer anderen haben kann. Je nach Szenario können Sie weitere Kustomizations und Abhängigkeiten hinzufügen.

Bevor Sie sich eintauchen, nehmen Sie sich einen Moment Zeit, um zu erfahren, wie GitOps mit Flux konzeptionell funktioniert.

Tipp

In diesem Tutorial ist die Quelle ein Git-Repository, doch bietet Flux auch Unterstützung für andere gängige Dateiquellen wie Helm-Repositorys, Buckets und Azure Blob Storage.

Sie können Flux-Konfigurationen auch mithilfe von Bicep, ARM-Vorlagen oder des Terraform AzAPI-Anbieters erstellen. Weitere Informationen finden Sie unter Microsoft.KubernetesConfiguration fluxConfigurations.

Alternativ können Sie die neue Microsoft GitOps ArgoCD-Erweiterung ausprobieren. Argo CD ist ein beliebtes Open-Source-GitOps-Tool, das im Vergleich zu Flux v2 verschiedene Funktionen und Fähigkeiten bietet.

Voraussetzungen

Um Anwendungen mithilfe von GitOps mit Flux v2 bereitzustellen, benötigen Sie Folgendes:

Kubernetes-Cluster mit Azure Arc-Unterstützung.

Azure Kubernetes Service-Cluster

  • Ein MSI-basierter AKS-Cluster, der ausgeführt wird.

    Wichtig

    Stellen Sie sicher, dass der AKS-Cluster mit MSI (nicht SPN) erstellt wird, da die microsoft.flux Erweiterung nicht mit SPN-basierten AKS-Clustern funktioniert. Bei neuen AKS-Clustern, die mit az aks create erstellt werden, ist der Cluster standardmäßig MSI-basiert. Um SPN-basierte Cluster in MSI zu konvertieren, führen Sie az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity aus. Weitere Informationen finden Sie unter Verwenden einer verwalteten Identität in AKS.

  • Lese- und Schreibberechtigungen für den Ressourcentyp Microsoft.ContainerService/managedClusters

Für beide Clustertypen

  • Lese- und Schreibberechtigungen für diese Ressourcentypen:

    • Microsoft.KubernetesConfiguration/extensions
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • Azure-Befehlszeilenschnittstelle ab Version 2.15. Installieren Sie die Azure CLI , oder verwenden Sie die folgenden Befehle, um auf die neueste Version zu aktualisieren:

    az version
    az upgrade
    
  • Der Kubernetes-Befehlszeilenclient kubectl. kubectl ist bei Verwendung von Azure Cloud Shell bereits installiert.

    kubectl lokal mithilfe des Befehls az aks install-cli installieren:

    az aks install-cli
    
  • Registrierung der folgenden Azure-Ressourcenanbieter:

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

    Die Registrierung ist ein asynchroner Prozess und sollte innerhalb von 10 Minuten abgeschlossen sein. Verwenden Sie zum Überwachen des Registrierungsprozesses den folgenden Befehl:

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

Versions- und Regionsunterstützung

GitOps wird derzeit in allen Regionen unterstützt, die Azure Arc-fähige Kubernetes unterstützt. GitOps wird derzeit in einer Teilmenge der Regionen unterstützt, die AKS unterstützt. Der GitOps-Dienst fügt in regelmäßigen Abständen neue unterstützte Regionen hinzu.

Die neueste Version der Flux v2-Erweiterung und die beiden vorherigen Versionen (N-2) werden unterstützt. Im Allgemeinen wird empfohlen, die neueste Version der Erweiterung zu verwenden.

Netzwerkanforderungen

Die GitOps-Agents erfordern ein ausgehendes TCP an die Repository-Quelle auf Port 22 (SSH) oder Port 443 (HTTPS), um zu funktionieren. Außerdem benötigen die Agents Zugriff auf die folgenden ausgehenden URLs:

Endpunkt (DNS) BESCHREIBUNG
https://management.azure.com Erforderlich, damit der Agent mit dem Kubernetes-Konfigurationsdienst kommunizieren kann.
https://<region>.dp.kubernetesconfiguration.azure.com Endpunkt auf Datenebene, über den der Agent Statusinformationen mithilfe von Push übermitteln und Konfigurationsinformationen abrufen kann Hängt von <region> (den zuvor erwähnten unterstützten Regionen) ab.
https://login.microsoftonline.com Erforderlich zum Abrufen und Aktualisieren von Azure Resource Manager-Token.
https://mcr.microsoft.com Erforderlich zum Pullen von Containerimages für Flux-Controller.

Aktivieren der CLI-Erweiterungen

Installieren Sie die neuesten CLI-Erweiterungspakete k8s-configuration und k8s-extension:

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

So aktualisieren Sie diese Pakete auf die neuesten Versionen

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

Verwenden Sie den folgenden Befehl, um eine Liste aller installierten Azure CLI-Erweiterungen und deren Versionen anzuzeigen:

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

Tipp

Hilfe zum Beheben von Fehlern finden Sie im Abschnitt GitOps (Flux v2) zur Problembehandlung von Erweiterungsproblemen für Azure Arc-fähige Kubernetes-Cluster.

Anwenden einer Flux-Konfiguration

Verwenden Sie Azure CLI-Erweiterung k8s-configuration oder das Azure-Portal, um GitOps in einem AKS-Cluster oder einem Kubernetes-Cluster mit Azure Arc-Unterstützung zu aktivieren. Verwenden Sie für eine Demonstration das öffentliche gitops-flux2-kustomize-helm-mt Repository.

Wichtig

Das Demo-Repository wurde entwickelt, um die Verwendung dieses Lernprogramms zu vereinfachen und wichtige Prinzipien zu veranschaulichen. Um das Repository auf dem neuesten Stand zu halten, können die Betreuer gelegentlich grundlegende Änderungen von Versionsupgrades einführen. Diese Änderungen wirken sich nicht auf die neue Verwendung dieses Lernprogramms aus, nur frühere Anwendungen. Weitere Informationen finden Sie im Disclaimer zu wesentlichen Änderungen.

Im folgenden Beispiel wird der az k8s-configuration flux create-Befehl verwendet, um eine Flux-Konfiguration auf einen Cluster anzuwenden, wobei die folgenden Werte und Einstellungen verwendet werden:

  • Die Ressourcengruppe, die den Cluster enthält, lautet flux-demo-rg.
  • Der Name des Azure Arc-Clusters lautet flux-demo-arc.
  • Der Clustertyp ist Azure Arc (-t connectedClusters), aber dieses Beispiel funktioniert auch mit AKS (-t managedClusters).
  • Der Name der Flux-Konfiguration lautet cluster-config.
  • Der Namespace für die Konfigurationsinstallation lautet cluster-config.
  • Die URL für das öffentliche Git-Repository lautet https://GitHub.com/Azure/gitops-flux2-kustomize-helm-mt.
  • Der Git-Repositorybranch ist main.
  • Der Bereich der Konfiguration ist cluster. Mit diesem Bereich wird den Operatoren die Berechtigung für Änderungen im gesamten Cluster erteilt. Weitere Informationen zum Verwenden des Geltungsbereichs namespace mit diesem Tutorial finden Sie unter den erforderlichen Änderungen.
  • Zwei Kustomizations werden mit den Namen infra und apps angegeben. Jede ist einem Pfad im Repository zugeordnet.
  • Die Kustomization apps hängt von der Kustomization infra ab. (Die Kustomization infra muss abgeschlossen sein, bevor die Kustomization apps ausgeführt wird.)
  • Legen Sie prune=true für beide Kustomizations fest. Mit dieser Einstellung wird sichergestellt, dass die von Flux im Cluster bereitgestellten Objekte bereinigt werden, wenn sie aus dem Repository entfernt oder die Flux-Konfiguration oder -Anpassungen gelöscht werden.
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"\]

Die microsoft.flux-Erweiterung wird im Cluster installiert (sofern sie nicht schon aufgrund einer vorherigen GitOps-Bereitstellung installiert wurde).

Tipp

Der az k8s-configuration flux create-Befehl stellt die microsoft.flux-Erweiterung im Cluster bereit und erstellt die Konfiguration. In einigen Szenarien sollten Sie die Flusserweiterungsinstanz separat erstellen, bevor Sie Ihre Konfigurationsressourcen erstellen. Verwenden Sie dazu den az k8s-extension create Befehl, um eine Instanz der Erweiterung auf Ihrem Cluster zu erstellen.

Wenn Sie die Flux-Konfiguration zum ersten Mal installieren, kann der anfängliche Konformitätsstatus Pending oder Non-compliant sein, da die Abstimmung noch ausgeführt wird. Nach etwa einer Minute können Sie die Konfiguration erneut abfragen, um den endgültigen Konformitätszustand anzuzeigen.

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

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Bereitstellung erfolgreich war:

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

Bei einer erfolgreichen Bereitstellung werden die folgenden Namespaces erstellt:

  • flux-system: Enthält die Controller für die Flux-Erweiterung.
  • cluster-config: Enthält die Flux-Konfigurationsobjekte.
  • nginx, podinfo, redis: Namespaces für Workloads, die in Manifesten im Git-Repository beschrieben sind.

Führen Sie den folgenden Befehl aus, um die Namespaces zu überprüfen:

kubectl get namespaces

Der flux-system-Namespace enthält die Flux-Erweiterungsobjekte:

  • Azure-Flux-Controller: fluxconfig-agent, fluxconfig-controller
  • OSS-Flux-Controller: source-controller, kustomize-controller, helm-controller, notification-controller

Die Flux-Agent- und -Controllerpods sollten sich in einem ausgeführten Zustand befinden. Bestätigen Sie dies mithilfe des folgenden Befehls:

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

Der cluster-config-Namespace enthält die Flux-Konfigurationsobjekte.

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

Überprüfen Sie mithilfe der folgenden Befehle weitere Details der Konfiguration:

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 werden über Manifeste im Git-Repository bereitgestellt.

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

Steuern, welche Controller mit der Flux-Clustererweiterung bereitgestellt werden

Für einige Szenarien sollten Sie ändern, welche Flux-Controller mithilfe der Flux-Clustererweiterung installiert werden.

Der Installationsprozess umfasst standardmäßig die source, helm, kustomize und notification Flux-Regler. Sie müssen die image-automation- und image-reflector-Controller explizit aktivieren, die ein Git-Repository aktualisieren, wenn neue Container-Images verfügbar sind.

Sie können den k8s-extension-Befehl verwenden, um die Standardoptionen zu ändern:

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

Setzen Sie notification-controller.enabled auf false, um Benachrichtigungen zu deaktivieren.

Mit dem folgenden Befehl werden die Controller image-reflector und image-automation installiert. Wenn Sie die Flux-Erweiterung automatisch erstellen, wenn Sie eine Flux-Konfiguration erstellen, lautet fluxder Erweiterungsname .

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

Verwenden der Kubelet-Identität als Authentifizierungsmethode für AKS-Cluster

Eine der Authentifizierungsoptionen bei AKS-Clustern ist die kubelet-Identität. Standardmäßig erstellt AKS eine eigene Kubelet-Identität in der verwalteten Ressourcengruppe. Wenn Sie es vorziehen, können Sie eine vordefinierte kubelet verwaltete Identität verwenden. Um diese Identität zu verwenden, fügen Sie den Parameter --config useKubeletIdentity=true bei der Installation der Flux-Erweiterung hinzu.

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

Leitfaden zum Onboarding von Red Hat OpenShift

Flux-Controller erfordern eine Sicherheitskontexteinschränkungohne Root-Berechtigung, damit Pods im Cluster ordnungsgemäß bereitgestellt werden können. Fügen Sie diese Einschränkungen dem Cluster hinzu, bevor Sie die microsoft.flux Erweiterung bereitstellen.

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

Weitere Informationen zu OpenShift-Anleitungen für onboarding Flux finden Sie in der Flux-Dokumentation.

Arbeiten mit Parametern

Flux unterstützt viele Parameter, um verschiedene Szenarien zu ermöglichen. Eine Beschreibung aller Parameter, die Flux unterstützt, finden Sie in der offiziellen Flux-Dokumentation. In Azure unterstützt Flux noch nicht alle Parameter. Hinterlassen Sie Feedback, um uns mitzuteilen, ob ein benötigter Parameter in der Azure-Implementierung fehlt.

Informationen zu verfügbaren Parametern und deren Verwendung finden Sie unter GitOps (Flux v2) unterstützte Parameter.

Verwenden eines lokalen Geheimnisses als Authentifizierungsverweis

Um einen lokalen geheimen Authentifizierungsverweis zu verwenden, muss der geheime Schlüssel innerhalb desselben Namespaces vorhanden sein, in dem Sie die fluxConfigurationAuthentifizierung bereitstellen. Das Geheimnis muss auch alle für die Quelle erforderlichen Authentifizierungsparameter enthalten.

Informationen zum Erstellen geheimer Schlüssel für verschiedene fluxConfiguration Quellen finden Sie unter "Lokaler geheimer Schlüssel" für die Authentifizierung mit Der Quelle.

Verwalten der Clusterkonfiguration mit dem Flux Kustomize-Controller

Der Flux Kustomize Controller wird als Teil der microsoft.flux Clustererweiterung installiert. Er ermöglicht die deklarative Verwaltung von Clusterkonfiguration und Anwendungsbereitstellung mithilfe von Kubernetes-Manifesten, die aus einem Git-Repository synchronisiert werden. Diese Kubernetes-Manifeste können optional eine Kustomize.yaml-Datei enthalten.

Details zur Verwendung finden Sie in den folgenden Ressourcen:

Verwalten von Helm-Chartversionen mit dem Flux Helm-Controller

Der Flux Helm-Controller wird als Teil der Clustererweiterung microsoft.flux installiert. Es verwaltet Helm-Diagrammversionen deklarativ mithilfe von Kubernetes-Manifesten, die Sie in Ihrem Git-Repository verwalten.

Details zur Verwendung finden Sie in den folgenden Ressourcen:

Tipp

Aufgrund der Behandlung von Indexdateien ist die Verarbeitung von Helm-Diagrammen ein teurer Vorgang und kann einen hohen Speicherbedarf aufweisen. Der parallele Abgleich einer großen Anzahl von Helm-Charts kann daher zu Speicherspitzen und zum Fehler OOMKilled führen. Standardmäßig legt der Controller seinen Speichergrenzwert auf 1 GiB und seine Speicheranforderungen auf 64 MiB fest. Wenn Sie diesen Grenzwert und die Anzahl an Anforderungen aufgrund einer hohen Anzahl großer Helm-Diagrammabgleiche erhöhen möchten, führen Sie den folgenden Befehl nach der Installation der microsoft.flux-Erweiterung aus:

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

Verwenden der GitRepository-Quelle für Helm-Diagramme

Wenn Sie Ihre Helm-Charts in der GitRepository Quelle speichern, die Sie als Teil der fluxConfigurations Ressource konfigurieren, können Sie angeben, dass die konfigurierte Quelle als Quelle der Helm-Charts verwendet werden soll, indem Sie clusterconfig.Azure.com/use-managed-source: "true" zu Ihrer HelmRelease.yaml Datei hinzufügen, wie im folgenden Beispiel gezeigt:

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

Wenn Sie diese Annotation verwenden, wird der bereitgestellte HelmRelease mit dem Verweis auf die konfigurierte Quelle gepatcht. Derzeit wird nur die GitRepository-Quelle unterstützt.

Drifterkennung in Helm

Die Drifterkennung für Helm-Versionen ist standardmäßig nicht aktiviert. microsoft.flux Ab v1.7.5 können Sie die Helmabweichungserkennung aktivieren, indem Sie den folgenden Befehl ausführen:

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

Strenge Nachbuildvariablenersetzung

Die strenge Post-Build-Variablenersetzung wird ab microsoft.flux v1.13.1 verfügbar sein.

Führen Sie den folgenden Befehl aus, um eine Flux-Erweiterung mit aktivierter strikter Ersetzungsrichtlinie zu erstellen:

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

Führen Sie den folgenden Befehl aus, um eine vorhandene Flux-Erweiterung zu aktualisieren, um eine strenge Ersetzungsrichtlinie zu ermöglichen:

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

Vertikale Skalierung

Unterstützung für vertikale Skalierung ist ab microsoft.flux v1.12.0 verfügbar. Derzeit werden nur spezifische Parameter unterstützt, die in der Vertikalen Skalierungsdokumentation von Flux beschrieben werden. Sie können andere Parameter manuell auf den Cluster anwenden.

Führen Sie den folgenden Befehl aus, um ressourcenlimits für Controller über die aktuellen Grenzwerte hinaus zu erhöhen. Ändern Sie den spezifischen Ressourcentyp und -wert nach Bedarf:

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

Um die Anzahl der Abstimmungen zu erhöhen, die parallel durchgeführt werden können, führen Sie den folgenden Befehl aus:

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

Führen Sie den folgenden Befehl aus, um den In-Memory-Build zu aktivieren:

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

OOM-Überwachung in Helm

microsoft.flux Ab v1.7.5 können Sie die Helm-OOM-Uhr aktivieren. Weitere Informationen finden Sie unter Aktivieren von Helm in der Nähe der OOM-Erkennung.

Überprüfen Sie die potenziellen Korrekturstrategien , und wenden Sie sie bei Bedarf an, wenn Sie dieses Feature aktivieren.

Führen Sie den folgenden Befehl aus, um die OOM-Überwachung zu aktivieren:

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

Wenn Sie keine Werte für memoryThreshold und outOfMemoryWatch angeben, beträgt der Standardspeicherschwellenwert 95 %. Das Intervall, um die Speicherauslastung zu überprüfen, beträgt 500 ms.

Konfigurierbare Protokolliergrad-Parameter

Standardmäßig ist die log-level für Flux-Controller auf infofestgelegt. Ab microsoft.flux v1.8.3 können Sie diese Standardeinstellungen wie folgt ändern, indem Sie den k8s-extension-Befehl verwenden:

--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>

Gültige Werte sind debug, info oder error. Verwenden Sie beispielsweise den folgenden Befehl, um log-level für source-controller und kustomize-controller zu ändern:

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

microsoft.flux Beginnend mit Version 1.9.1 unterstützen fluxconfig-agent und fluxconfig-controller die info- und error-Protokollebenen (jedoch nichtdebug). Verwenden Sie den k8s-extension Befehl, um diese Optionen zu ändern:

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

Beispielsweise ändert der folgender Befehl log-level zu 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

Konfigurieren von Anmerkungen auf Flux-Erweiterungspods

Wenn Sie eine andere Lösung als Azure Firewall konfigurieren, sind Netzwerk- und FQDN/Anwendungsregeln für einen AKS-Cluster erforderlich. Ab microsoft.flux v1.11.1 können die Pods, die Flux steuern, die Annotation kubernetes.Azure.com/set-kube-service-host-fqdn in ihren Pod-Spezifikationen festlegen. Diese Anmerkung ermöglicht den Datenverkehr zum Domänennamen des API-Servers, auch wenn eine Layer 7-Firewall vorhanden ist, wodurch Bereitstellungen während der Erweiterungsinstallation erleichtert werden. Um diese Annotation bei Verwendung der Flux-Erweiterung zu konfigurieren, verwenden Sie die folgenden Befehle.

# 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

Workloadidentität in Arc-fähigen Kubernetes-Clustern und AKS-Clustern

Sie können Flusskonfigurationen in Clustern mit aktivierter Workloadidentität erstellen. microsoft.flux Ab v1.8.0 unterstützt die Lösung Flusskonfigurationen in AKS-Clustern mit aktivierter Workload-Identität. microsoft.flux Ab v1.15.1 unterstützt die Lösung Flusskonfigurationen in Azure Arc-fähigen Clustern mit aktivierter Workload-Identität.

Um Flusskonfigurationen in Clustern mit aktivierter Workloadidentität zu erstellen, ändern Sie die Erweiterung wie in den folgenden Schritten gezeigt:

  1. Rufen Sie die OIDC-Aussteller-URL für Ihren AKS-Cluster oder Arc-fähigen Kubernetes-Cluster ab.

  2. Erstellen Sie eine verwaltete Identität , und notieren Sie ihre Client-ID und Mandanten-ID.

  3. Erstellen Sie die Flusserweiterung auf dem Cluster, indem Sie den folgenden Befehl verwenden:

    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> workloadIdentity.azureTenantId=<tenant_id>
    
  4. Richten Sie eine Anmeldeinformationen für eine Verbundidentität für Ihren AKS-Cluster oder Arc-fähigen Kubernetes-Cluster ein. Beispiel:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${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 "${OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-controller" --audience api://AzureADTokenExchange
    
    # For image-automation 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 "${OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-automation-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 "${OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"kustomize-controller" --audience api://AzureADTokenExchange
    
  5. Stellen Sie sicher, dass die benutzerdefinierte Ressource, die die Workload-Identität verwenden muss, im Manifest den Wert .spec.provider auf Azure setzt. Beispiel:

    apiVersion: source.toolkit.fluxcd.io/v1
    kind: HelmRepository
    metadata:
      name: acrrepo
    spec:
      interval: 10m0s
      type: <helm_repository_type>
      url: <helm_repository_link>
      provider: azure
    
  6. Stellen Sie sicher, dass Sie der Workloadidentität die richtigen Berechtigungen für die Ressource bereitstellen, die vom Quellcontroller oder Imagereflektorcontroller abgerufen werden soll. Wenn Sie z. B. Azure Container Registry verwenden, stellen Sie sicher, dass entweder Container Registry Repository Reader (für ABAC-fähige Registrierungen) oder AcrPull (für Nicht-ABAC-Registrierungen) zugewiesen ist.

Verwenden der Workloadidentität mit Azure DevOps

Führen Sie die folgenden Voraussetzungen aus, um die Workloadidentität mit Azure DevOps zu verwenden:

  • Stellen Sie sicher, dass Ihre Azure DevOps-Organisation mit Microsoft Entra verbunden ist.
  • Vergewissern Sie sich, dass die Workloadidentität auf Ihrem Cluster ordnungsgemäß eingerichtet ist, und führen Sie die Schritte für AKS-Cluster oder Arc-fähige Kubernetes-Cluster aus.
  • Erstellen Sie eine verwaltete Identität und Verbundanmeldeinformationen, und aktivieren Sie die Workloadidentität auf den Flux-Controllerpods der Flux-Erweiterung, wie weiter oben in diesem Abschnitt beschrieben.
  • Fügen Sie der Azure DevOps-Organisation die verwaltete Identität als Benutzer hinzu, um sicherzustellen, dass sie über Berechtigungen für den Zugriff auf das Azure DevOps-Repository verfügt. Ausführliche Schritte finden Sie unter Verwenden von Dienstprinzipalen und verwalteten Identitäten in Azure DevOps.

Legen Sie als Nächstes den gitRepository-Anbieter der Flusskonfiguration auf „Azure“ fest, um die Authentifizierung ohne Anmeldeinformationen zu aktivieren. Sie können diese Einstellung mithilfe von Bicep, ARM-Vorlagen oder Azure CLI konfigurieren. Führen Sie den folgenden Befehl aus, um den Anbieter mithilfe der Azure CLI festzulegen:

az k8s-configuration flux update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --provider "azure"

Einstellung von Azure DevOps SSH-RSA

Azure DevOps kündigte die Abschaffung von SSH-RSA als unterstützte Verschlüsselungsmethode für die SSH-Verbindung zu Azure-Repositorys an. Wenn Sie SSH-Schlüssel zum Herstellen einer Verbindung mit Azure-Repositorys in Flusskonfigurationen verwenden, wechseln Sie zu sichereren RSA-SHA2-256- oder RSA-SHA2-512-Schlüsseln.

Beim Abgleich von Flux-Konfigurationen wird möglicherweise eine Fehlermeldung angezeigt, die besagt, dass ssh-rsa bald veraltet ist oder nicht mehr unterstützt wird. Wenn dies der Fall ist, aktualisieren Sie den Algorithmus für den Host-Schlüssel, der für den Aufbau von SSH-Verbindungen zu Azure DevOps-Repositorys von Flux source-controller und image-automation-controller (falls aktiviert) verwendet wird, mit dem Befehl az k8s-extension update. Beispiel:

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"

Weitere Informationen zur Außerbetriebnahme von Azure DevOps SSH-RSA finden Sie unter Ende der SSH-RSA-Unterstützung für Azure Repos.

Löschen der Flux-Konfiguration und -Erweiterung

Verwenden Sie die folgenden Befehle, um Ihre Flux-Konfiguration und ggf. auch die Flux-Erweiterung selbst zu löschen.

Löschen der Flux-Konfiguration

Mit dem folgenden Befehl werden sowohl die fluxConfigurations-Ressource in Azure als auch die Flux-Konfigurationsobjekte im Cluster gelöscht. Da die Flux-Konfiguration ursprünglich mit dem prune=true Parameter für die Kustomisierung erstellt wurde, werden alle objekte, die im Cluster basierend auf Manifesten im Git-Repository erstellt wurden, zusammen mit der Flux-Konfiguration entfernt. Dieser Befehl entfernt jedoch nicht die Flux-Erweiterung selbst.

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

Löschen der Flux-Clustererweiterung

Wenn Sie die Flux-Erweiterung löschen, entfernt der Befehl sowohl die microsoft.flux Erweiterungsressource in Azure als auch die Flux-Erweiterungsobjekte im Cluster.

Wichtig

Löschen Sie unbedingt alle Flux-Konfigurationen im Cluster, bevor Sie die Flux-Erweiterung löschen. Wenn Sie die Erweiterung löschen, ohne zuerst die Flux-Konfigurationen zu löschen, kann Ihr Cluster in instabilem Zustand bleiben.

Wenn die Flux-Erweiterung automatisch erstellt wurde, als die Flux-Konfiguration zum ersten Mal erstellt wurde, lautet der Erweiterungsname flux.

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

Tipp

Diese Befehle verwenden -t connectedClusters, was für einen Kubernetes-Cluster mit Azure Arc-Unterstützung geeignet ist. Verwenden Sie für einen AKS-Cluster stattdessen -t managedClusters.

Nächste Schritte