Udostępnij za pośrednictwem


Samouczek: wdrażanie aplikacji przy użyciu metodyki GitOps z rozwiązaniem Flux w wersji 2

W tym samouczku opisano sposób używania metodyki GitOps w klastrze Kubernetes. Usługa GitOps z rozwiązaniem Flux v2 jest włączona jako rozszerzenie klastra w klastrach Kubernetes z obsługą usługi Azure Arc lub klastrach usługi Azure Kubernetes Service (AKS). Po zainstalowaniu rozszerzenia klastra microsoft.flux można utworzyć co najmniej jeden fluxConfigurations zasób, który synchronizuje źródła repozytorium Git z klastrem i uzgadniać klaster z żądanym stanem. Za pomocą metodyki GitOps możesz użyć repozytorium Git jako źródła prawdy na potrzeby konfiguracji klastra i wdrażania aplikacji.

W tym samouczku użyjemy przykładowej konfiguracji metodyki GitOps z dwoma elementami kustomization, aby zobaczyć, jak jedna kustomizacja może mieć zależność od innej. W zależności od scenariusza można dodać więcej elementów kustomizacji i zależności.

Zanim przejdziesz dalej, pośmiń chwilę, aby dowiedzieć się, jak działa usługa GitOps z rozwiązaniem Flux.

Napiwek

Chociaż źródło w tym samouczku jest repozytorium Git, platforma Flux zapewnia również obsługę innych typowych źródeł plików, takich jak repozytoria helm, zasobniki i usługa Azure Blob Storage.

Konfiguracje platformy Flux można również tworzyć przy użyciu dostawcy Bicep, ARM lub narzędzia Terraform AzAPI. Aby uzyskać więcej informacji, zobacz Microsoft.KubernetesConfiguration fluxConfigurations.

Ważne

microsoft.flux Rozszerzenie wydało wersję główną 1.0.0. Obejmuje to funkcję wielodostępu. Jeśli masz istniejące konfiguracje usługi GitOps Flux w wersji 2 korzystające z poprzedniej wersji microsoft.flux rozszerzenia, możesz przeprowadzić uaktualnienie do najnowszej wersji ręcznie przy użyciu interfejsu wiersza polecenia platformy Azure: az k8s-extension create -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux --extension-type microsoft.flux -t <CLUSTER_TYPE> (użyj -t connectedClusters klastrów Arc i -t managedClusters klastrów usługi AKS).

Wymagania wstępne

Aby wdrożyć aplikacje przy użyciu metodyki GitOps z rozwiązaniem Flux w wersji 2, potrzebne są następujące elementy:

W przypadku klastrów Kubernetes z obsługą usługi Azure Arc

W przypadku klastrów usługi Azure Kubernetes Service

  • Klaster usługi AKS oparty na tożsamości usługi ZARZĄDZANEj, który jest uruchomiony.

    Ważne

    Upewnij się, że klaster usługi AKS został utworzony przy użyciu tożsamości usługi zarządzanej (nie spN), ponieważ microsoft.flux rozszerzenie nie będzie działać z klastrami usługi AKS opartymi na spN. W przypadku nowych klastrów usługi AKS utworzonych za pomocą az aks createprogramu klaster jest domyślnie oparty na tożsamości usługi ZARZĄDZANEj. W przypadku już utworzonych klastrów opartych na nazwie SPN, które muszą zostać przekonwertowane na tożsamość usługi zarządzanej, uruchom polecenie az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanej w usłudze AKS.

  • Uprawnienia do odczytu i zapisu dla Microsoft.ContainerService/managedClusters typu zasobu.

Wspólne dla obu typów klastrów

  • Uprawnienia do odczytu i zapisu dla tych typów zasobów:

    • Microsoft.KubernetesConfiguration/extensions
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • Interfejs wiersza polecenia platformy Azure w wersji 2.15 lub nowszej. Zainstaluj interfejs wiersza polecenia platformy Azure lub użyj następujących poleceń, aby zaktualizować do najnowszej wersji:

    az version
    az upgrade
    
  • Klient wiersza polecenia kubernetes, kubectl. kubectl program jest już zainstalowany, jeśli używasz usługi Azure Cloud Shell.

    Zainstaluj kubectl lokalnie przy użyciu az aks install-cli polecenia :

    az aks install-cli
    
  • Rejestracja następujących dostawców zasobów platformy Azure:

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

    Rejestracja jest procesem asynchronicznym i powinna zakończyć się w ciągu 10 minut. Aby monitorować proces rejestracji, użyj następującego polecenia:

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

Obsługa wersji i regionów

Usługa GitOps jest obecnie obsługiwana we wszystkich regionach obsługiwanych przez platformę Kubernetes z obsługą usługi Azure Arc. Usługa GitOps jest obecnie obsługiwana w podzestawie regionów obsługiwanych przez usługę AKS. Usługa GitOps dodaje nowe obsługiwane regiony w regularnych okresach.

Obsługiwana jest najnowsza wersja rozszerzenia Flux v2 i dwie poprzednie wersje (N-2). Ogólnie zaleca się używanie najnowszej wersji rozszerzenia.

Wymagania dotyczące sieci

Agenci GitOps wymagają do działania ruchu wychodzącego TCP do źródła repozytorium na porcie 22 (SSH) lub 443 (HTTPS). Agenci wymagają również dostępu do następujących adresów URL ruchu wychodzącego:

Punkt końcowy (DNS) Opis
https://management.azure.com Wymagany, aby agent mógł komunikować się z usługą konfiguracji Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Punkt końcowy płaszczyzny danych dla agenta umożliwiający wypychanie informacji o stanie i pobieranie informacji o konfiguracji. Zależy od <region> (obsługiwane regiony wymienione wcześniej).
https://login.microsoftonline.com Wymagany do pobierania i aktualizowania tokenów usługi Azure Resource Manager.
https://mcr.microsoft.com Wymagany do ściągania obrazów kontenerów dla kontrolerów Flux.

Włączanie rozszerzeń interfejsu wiersza polecenia

Zainstaluj najnowsze k8s-configuration pakiety rozszerzeń interfejsu k8s-extension wiersza polecenia:

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

Aby zaktualizować te pakiety do najnowszych wersji:

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

Aby wyświetlić listę wszystkich zainstalowanych rozszerzeń interfejsu wiersza polecenia platformy Azure i ich wersji, użyj następującego polecenia:

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

Napiwek

Aby uzyskać pomoc dotyczącą rozwiązywania błędów, zobacz sekcję GitOps (Flux v2) w temacie Rozwiązywanie problemów z rozszerzeniem dla klastrów Kubernetes z obsługą usługi Azure Arc.

Stosowanie konfiguracji platformy Flux

Użyj rozszerzenia interfejsu k8s-configuration wiersza polecenia platformy Azure lub witryny Azure Portal, aby włączyć usługę GitOps w klastrze Kubernetes obsługującym usługę AKS lub Arc. Na potrzeby pokazu użyj publicznego repozytorium gitops-flux2-kustomize-helm-mt .

Ważne

Repozytorium demonstracyjne zostało zaprojektowane tak, aby uprościć korzystanie z tego samouczka i zilustrować niektóre kluczowe zasady. Aby zachować aktualność, repozytorium może od czasu do czasu uzyskiwać zmiany powodujące niezgodność z uaktualnieniami wersji. Te zmiany nie będą miały wpływu na nową aplikację tego samouczka— tylko poprzednie aplikacje samouczka, które nie zostały usunięte. Aby dowiedzieć się, jak obsługiwać te zmiany, zobacz zastrzeżenie o zmianie powodującej niezgodność.

W poniższym przykładzie az k8s-configuration flux create użyto polecenia , aby zastosować konfigurację platformy Flux do klastra przy użyciu następujących wartości i ustawień:

  • Grupa zasobów zawierająca klaster to flux-demo-rg.
  • Nazwa klastra usługi Azure Arc to flux-demo-arc.
  • Typ klastra to Azure Arc (-t connectedClusters), ale ten przykład działa również z usługą AKS (-t managedClusters).
  • Nazwa konfiguracji platformy Flux to cluster-config.
  • Przestrzeń nazw instalacji konfiguracji to cluster-config.
  • Adres URL publicznego repozytorium Git to https://github.com/Azure/gitops-flux2-kustomize-helm-mt.
  • Gałąź repozytorium Git to main.
  • Zakres konfiguracji to cluster. Ten zakres zapewnia operatorom uprawnienia do wprowadzania zmian w całym klastrze. Aby użyć namespace zakresu z tym samouczkiem, zobacz wymagane zmiany.
  • Dwie wartości kustomyzacji są określane z nazwami infra i apps. Każda z nich jest skojarzona ze ścieżką w repozytorium.
  • Kustomization apps zależy infra od kustomyzacji. (Kustomization infra musi zakończyć się przed uruchomieniem apps kustomization).
  • Ustaw prune=true dla obu parametrów kustomization. To ustawienie zapewnia, że obiekty wdrożone w klastrze flux są czyszczone, jeśli zostaną usunięte z repozytorium, lub jeśli konfiguracja flux lub kustomizations zostaną usunięte.
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"\]

Rozszerzenie microsoft.flux jest zainstalowane w klastrze (jeśli nie zostało jeszcze zainstalowane w poprzednim wdrożeniu usługi GitOps).

Napiwek

Polecenie az k8s-configuration flux create wdraża microsoft.flux rozszerzenie w klastrze i tworzy konfigurację. W niektórych scenariuszach możesz utworzyć wystąpienie rozszerzenia flux oddzielnie przed utworzeniem zasobów konfiguracji. W tym celu użyj az k8s-extension create polecenia , aby utworzyć wystąpienie rozszerzenia w klastrze.

Po pierwszym zainstalowaniu konfiguracji strumienia początkowy stan zgodności może być Pending lub Non-compliant dlatego, że uzgadnianie nadal trwa. Po upływie minuty wykonaj ponownie zapytanie o konfigurację, aby zobaczyć końcowy stan zgodności.

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

Aby potwierdzić, że wdrożenie zakończyło się pomyślnie, uruchom następujące polecenie:

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

Po pomyślnym wdrożeniu tworzone są następujące przestrzenie nazw:

  • flux-system: przechowuje kontrolery rozszerzeń Flux.
  • cluster-config: przechowuje obiekty konfiguracji flux.
  • nginx, , podinforedis: przestrzenie nazw dla obciążeń opisanych w manifestach w repozytorium Git.

Aby potwierdzić przestrzenie nazw, uruchom następujące polecenie:

kubectl get namespaces

flux-system Przestrzeń nazw zawiera obiekty rozszerzenia Flux:

  • Kontrolery platformy Azure Flux: fluxconfig-agent, fluxconfig-controller
  • Kontrolery strumieni systemu operacyjnego: source-controller, kustomize-controller, , helm-controllernotification-controller

Zasobniki agenta i kontrolera flux powinny być w stanie uruchomienia. Potwierdź to przy użyciu następującego polecenia:

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

Przestrzeń nazw cluster-config ma obiekty konfiguracji Flux.

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

Potwierdź inne szczegóły konfiguracji przy użyciu następujących poleceń.

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

Obciążenia są wdrażane z manifestów w repozytorium Git.

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

Kontrolowanie, które kontrolery są wdrażane za pomocą rozszerzenia klastra Flux

W niektórych scenariuszach warto zmienić, które kontrolery Flux są zainstalowane z rozszerzeniem klastra Flux.

Kontrolery source, helm, kustomizei notification Flux są instalowane domyślnie. Kontrolery image-automationi image-reflector używane do aktualizowania repozytorium Git, gdy są dostępne nowe obrazy kontenerów, muszą być jawnie włączone.

Możesz użyć k8s-extension polecenia , aby zmienić opcje domyślne:

  • --config source-controller.enabled=<true/false> (wartość domyślna true)
  • --config helm-controller.enabled=<true/false> (wartość domyślna true)
  • --config kustomize-controller.enabled=<true/false> (wartość domyślna true)
  • --config notification-controller.enabled=<true/false> (wartość domyślna true)
  • --config image-automation-controller.enabled=<true/false> (wartość domyślna false)
  • --config image-reflector-controller.enabled=<true/false> (wartość domyślna false)

Na przykład aby wyłączyć powiadomienia, można ustawić wartość notification-controller.enabled false.

To przykładowe polecenie instaluje image-reflector kontrolery i image-automation . Jeśli rozszerzenie Flux zostało utworzone automatycznie po utworzeniu konfiguracji platformy Flux, nazwa rozszerzenia to flux.

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

Używanie tożsamości Kubelet jako metody uwierzytelniania dla klastrów usługi AKS

W przypadku klastrów usługi AKS jedną z opcji uwierzytelniania do użycia jest tożsamość kubelet. Domyślnie usługa AKS tworzy własną tożsamość kubelet w zarządzanej grupie zasobów. Jeśli wolisz, możesz użyć wstępnie utworzonej tożsamości zarządzanej kubelet. W tym celu dodaj parametr --config useKubeletIdentity=true w momencie instalacji rozszerzenia Flux.

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

Wskazówki dotyczące dołączania rozwiązania Red Hat OpenShift

Kontrolery flux wymagają ograniczenia kontekstu zabezpieczeń innego niż główny, aby prawidłowo aprowizować zasobniki w klastrze. Te ograniczenia należy dodać do klastra przed wdrożeniem microsoft.flux rozszerzenia.

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

Aby uzyskać więcej informacji na temat wskazówek dotyczących dołączania rozwiązania OpenShift, zobacz dokumentację platformy Flux.

Praca z parametrami

Funkcja Flux obsługuje wiele parametrów w celu włączenia różnych scenariuszy. Opis wszystkich parametrów obsługiwanych przez platformę Flux można znaleźć w oficjalnej dokumentacji platformy Flux. Strumień na platformie Azure nie obsługuje jeszcze wszystkich parametrów. Poinformuj nas, czy w implementacji platformy Azure brakuje parametru, którego potrzebujesz.

Aby uzyskać informacje o dostępnych parametrach i sposobie ich używania, zobacz Parametry obsługiwane przez usługę GitOps (Flux v2).

Praca z lokalnym uwierzytelnianiem wpisów tajnych

Aby użyć lokalnego odwołania do uwierzytelniania wpisów tajnych, wpis tajny musi istnieć w tej samej przestrzeni nazw, w której fluxConfiguration zostanie wdrożony. Wpis tajny musi również zawierać wszystkie parametry uwierzytelniania wymagane dla źródła.

Aby uzyskać informacje na temat tworzenia wpisów tajnych dla różnych fluxConfiguration źródeł, zobacz Wpis tajny lokalny na potrzeby uwierzytelniania ze źródłem.

Zarządzanie konfiguracją klastra przy użyciu kontrolera Flux Kustomize

Kontroler Kustomize Flux jest instalowany w ramach rozszerzenia klastramicrosoft.flux. Umożliwia ona deklaratywne zarządzanie konfiguracją klastra i wdrażaniem aplikacji przy użyciu manifestów platformy Kubernetes synchronizowanych z repozytorium Git. Te manifesty platformy Kubernetes mogą opcjonalnie zawierać plik kustomize.yaml .

Aby uzyskać szczegółowe informacje o użyciu, zobacz następujące zasoby:

Zarządzanie wydaniami pakietu Helm przy użyciu kontrolera Flux Helm

Kontroler Flux Helm jest instalowany w ramach rozszerzenia klastra microsoft.flux . Umożliwia deklaratywne zarządzanie wydaniami pakietu Helm za pomocą manifestów platformy Kubernetes, które są obsługiwane w repozytorium Git.

Aby uzyskać szczegółowe informacje o użyciu, zobacz następujące zasoby:

Napiwek

Ze względu na sposób obsługi plików indeksowania przez program Helm przetwarzanie wykresów programu Helm jest kosztowną operacją i może mieć bardzo duże zużycie pamięci. W rezultacie uzgadnianie dużej liczby wykresów programu Helm jednocześnie może spowodować skoki pamięci i OOMKilled błędy. Domyślnie kontroler ustawia limit pamięci na 1Gi i żądania pamięci na 64Mi. Aby zwiększyć ten limit i żądania z powodu dużej liczby uzgodnień dużych pakietów Helm, uruchom następujące polecenie po zainstalowaniu rozszerzenia microsoft.flux:

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

Korzystanie ze źródła repozytorium Git dla wykresów programu Helm

Jeśli wykresy programu Helm są przechowywane w GitRepository źródle skonfigurowanym jako część fluxConfigurations zasobu, możesz wskazać, że skonfigurowane źródło powinno być używane jako źródło wykresów helm, dodając clusterconfig.azure.com/use-managed-source: "true" do pliku HelmRelease.yaml, jak pokazano w poniższym przykładzie:

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

Jeśli używasz tej adnotacji, wdrożona funkcja HelmRelease zostanie poprawiona przy użyciu odwołania do skonfigurowanego źródła. Obecnie obsługiwane jest tylko GitRepository źródło.

Wykrywanie dryfu programu Helm

Wykrywanie dryfu dla wersji programu Helm nie jest domyślnie włączone. microsoft.flux Począwszy od wersji 1.7.5, można włączyć wykrywanie dryfu programu Helm, uruchamiając następujące polecenie:

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

Ścisłe podstawianie zmiennych po kompilacji

Ścisłe podstawianie zmiennych po kompilacji jest dostępne od microsoft.flux wersji 1.13.1.

Aby utworzyć rozszerzenie Flux z włączonymi ścisłymi zasadami podstawienia, uruchom następujące polecenie:

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

Aby zaktualizować istniejące rozszerzenie Flux w celu włączenia rygorystycznych zasad podstawień, uruchom następujące polecenie:

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

Skalowanie w pionie

Obsługa skalowania w pionie jest dostępna od microsoft.flux wersji 1.12.0. Obecnie obsługiwane są natywnie tylko określone parametry opisane w dokumentacji skalowania w pionie flux. Inne parametry mogą być stosowane ręcznie do klastra.

Aby zwiększyć limity zasobów na kontrolerach poza bieżącymi limitami, uruchom to polecenie, zmieniając określony typ zasobu i wartość zgodnie z potrzebami:

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

Aby zwiększyć liczbę uzgodnień, które można wykonać równolegle, uruchom następujące polecenie:

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

Aby włączyć kompilację w pamięci, uruchom następujące polecenie:

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

Zegarek Helm OOM

microsoft.flux Począwszy od wersji 1.7.5, możesz włączyć zegarek Helm OOM. Aby uzyskać więcej informacji, zobacz Włączanie funkcji Helm w pobliżu wykrywania OOM.

Pamiętaj, aby przejrzeć potencjalne strategie korygowania i zastosować je zgodnie z potrzebami podczas włączania tej funkcji.

Aby włączyć zegarek OOM, uruchom następujące polecenie:

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

Jeśli nie określisz wartości i memoryThreshold outOfMemoryWatch, domyślny próg pamięci zostanie ustawiony na 95%, z interwałem, w którym należy sprawdzić użycie pamięci ustawione na 500 ms.

Konfigurowalne parametry na poziomie dziennika

Domyślnie log-level dla kontrolerów Flux jest ustawiona wartość info. microsoft.flux Począwszy od wersji 1.8.3, można zmodyfikować te ustawienia domyślne przy użyciu k8s-extension polecenia w następujący sposób:

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

Prawidłowe wartości to debug, infolub error. Na przykład, aby zmienić log-level parametr dla elementu source-controller i kustomize-controller, użyj następującego polecenia:

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 Począwszy od wersji 1.9.1 oraz fluxconfig-agent fluxconfig-controller poziomów obsługi info i error rejestrowania (ale nie debug). Można je modyfikować za pomocą polecenia k8s-extension w następujący sposób:

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

Na przykład następujące polecenie zmienia się log-level na 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

Wycofanie usługi Azure DevOps SSH-RSA

Usługa Azure DevOps ogłosiła wycofanie protokołu SSH-RSA jako obsługiwanej metody szyfrowania na potrzeby nawiązywania połączenia z repozytoriami platformy Azure przy użyciu protokołu SSH. Jeśli używasz kluczy SSH do nawiązywania połączenia z repozytoriami platformy Azure w konfiguracjach platformy Flux, zalecamy przejście do bezpieczniejszych kluczy RSA-SHA2-256 lub RSA-SHA2-512.

Podczas uzgadniania konfiguracji platformy Flux może zostać wyświetlony komunikat o błędzie wskazujący, że ssh-rsa ma zostać wycofany lub nie jest obsługiwany. Jeśli tak, zaktualizuj algorytm klucza hosta używany do ustanawiania połączeń SSH z repozytoriami usługi Azure DevOps z platformy Flux source-controller i image-automation-controller (jeśli jest włączony) przy użyciu az k8s-extension update polecenia . Na przykład:

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"

Aby uzyskać więcej informacji na temat wycofywania protokołu SSH-RSA usługi Azure DevOps, zobacz End of SSH-RSA support for Azure Repos (Zakończenie obsługi protokołu SSH-RSA dla usługi Azure Repos).

Konfigurowanie adnotacji na zasobnikach rozszerzeń Flux

Podczas konfigurowania rozwiązania innego niż usługa Azure Firewall wymagane są reguły sieci i nazwy FQDN/aplikacji dla klastra usługi AKS. microsoft.flux Począwszy od wersji 1.11.1, zasobniki kontrolera Flux mogą teraz ustawiać adnotację kubernetes.azure.com/set-kube-service-host-fqdn w specyfikacji zasobnika. Umożliwia to ruch do nazwy domeny serwera interfejsu API nawet wtedy, gdy jest obecna zapora warstwy 7, ułatwiając wdrożenia podczas instalacji rozszerzenia. Aby skonfigurować tę adnotację podczas korzystania z rozszerzenia Flux, użyj następujących poleceń.

# 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

Tożsamość obciążenia w klastrach usługi AKS

microsoft.flux Począwszy od wersji 1.8.0, można tworzyć konfiguracje platformy Flux w klastrach usługi AKS z włączoną tożsamością obciążenia. W tym celu zmodyfikuj rozszerzenie strumienia, jak pokazano w poniższych krokach.

  1. Pobierz adres URL wystawcy OIDC dla klastra.

  2. Utwórz tożsamość zarządzaną i zanotuj jej identyfikator klienta.

  3. Utwórz rozszerzenie flux w klastrze przy użyciu następującego polecenia:

    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. Ustanów poświadczenia tożsamości federacyjnej. Na przykład:

    # 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. Upewnij się, że zasób niestandardowy, który musi używać wartości zestawu .spec.provider tożsamości obciążenia do azure w manifeście. Na przykład:

    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. Pamiętaj, aby zapewnić odpowiednie uprawnienia do tożsamości obciążenia dla zasobu, który ma zostać ściągnięty przez kontroler źródłowy lub kontroler refleksora obrazów. Na przykład w przypadku korzystania z usługi Azure Container Registry AcrPull wymagane są uprawnienia.

Usuwanie konfiguracji i rozszerzenia platformy Flux

Użyj następujących poleceń, aby usunąć konfiguracje platformy Flux i, w razie potrzeby, rozszerzenie Flux.

Usuwanie konfiguracji platformy Flux

Następujące polecenie usuwa zarówno zasób na fluxConfigurations platformie Azure, jak i obiekty konfiguracji platformy Flux w klastrze. Ponieważ konfiguracja platformy Flux została pierwotnie utworzona za pomocą parametru prune=true kustomization, wszystkie obiekty utworzone w klastrze na podstawie manifestów w repozytorium Git są usuwane po usunięciu konfiguracji flux. Jednak to polecenie nie powoduje usunięcia samego rozszerzenia Flux.

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

Usuwanie rozszerzenia klastra Flux

Po usunięciu rozszerzenia Flux zarówno microsoft.flux zasób rozszerzenia na platformie Azure, jak i obiekty rozszerzenia Flux w klastrze zostaną usunięte.

Ważne

Przed usunięciem rozszerzenia Flux należy usunąć wszystkie konfiguracje platformy Flux w klastrze. Usunięcie rozszerzenia bez uprzedniego usunięcia konfiguracji platformy Flux może spowodować pozostawienie klastra w stanie niestabilnym.

Jeśli rozszerzenie Flux zostało utworzone automatycznie po utworzeniu konfiguracji platformy Flux, nazwa rozszerzenia to flux.

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

Napiwek

Te polecenia używają klasy -t connectedClusters, która jest odpowiednia dla klastra Kubernetes z obsługą usługi Azure Arc. W przypadku klastra usługi AKS należy zamiast tego użyć polecenia -t managedClusters .

Następne kroki