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 w klastrach usługi Azure Kubernetes Service (AKS). Po zainstalowaniu rozszerzenia klastra microsoft.flux można utworzyć jeden lub więcej zasobów fluxConfigurations, które synchronizują źródła repozytorium Git z klastrem i dopasowują klaster do pożądanego stanu. 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żywamy przykładowej konfiguracji GitOps z dwoma kustomizacjami, aby pokazać, jak jedna kustomizacja może być zależna od innej. W zależności od scenariusza można dodać więcej elementów kustomizacji i zależności.

Zanim przejdziesz dalej, poświęć chwilę, aby dowiedzieć się, jak koncepcyjnie działa GitOps z Fluxem.

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 (Buckets) i Usługa Azure Blob Storage.

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

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:

Klastry platformy Kubernetes z obsługą usługi Azure Arc

Klastry usługi Azure Kubernetes Service

  • Klaster AKS oparty na tożsamości usługi zarządzanej, który jest już uruchomiony.

    Ważne

    Upewnij się, że klaster AKS został utworzony przy użyciu tożsamości zarządzanej (MSI), a nie tożsamości usługi (SPN), ponieważ rozszerzenie microsoft.flux nie działa z klastrami AKS opartymi na SPN. pl-PL: W przypadku nowych klastrów usługi AKS utworzonych za pomocą az aks create, klaster jest domyślnie oparty na tożsamości zarządzanej. Aby przekonwertować klastry bazujące na SPN na MSI, uruchom 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
  • Azure CLI 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 Kubernetes z obsługą 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 wyjściowego ruchu TCP do źródła repozytorium na porcie 22 (SSH) lub 443 (HTTPS). Agenci wymagają również dostępu do następujących zewnętrznych adresów URL.

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 przesyłanie statusu i pobieranie informacji konfiguracyjnych. 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 pakiety rozszerzeń CLI: k8s-configuration i k8s-extension

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 Azure CLI lub Azure Portal, aby włączyć GitOps w klastrze Kubernetes obsługującym AKS lub Arc. Na potrzeby demonstracji 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ć kluczowe zasady. Aby być na bieżąco, repozytorium może czasami podlegać zmianom wynikającym z aktualizacji wersji, które wprowadzają niezgodności. Te zmiany nie mają wpływu na nowe użycie tego samouczka, tylko w poprzednich aplikacjach. Aby uzyskać więcej informacji, zobacz zastrzeżenie dotyczące przełomowych zmian.

W poniższym przykładzie użyto polecenia az k8s-configuration flux create do zastosowania konfiguracji systemu 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 potrzebne zmiany.
  • Dwie kustomizacje są określone nazwami infra i apps. Każda z nich jest skojarzona ze ścieżką w repozytorium.
  • Kustomizacja apps zależy od kustomizacji infra. Kustomizacja infra musi się zakończyć przed uruchomieniem kustomizacji apps.
  • Ustaw prune=true dla obu kustomizacji. To ustawienie zapewnia, że obiekty, które Flux wdrożył w klastrze, są czyszczone, jeśli zostaną usunięte z repozytorium lub jeśli konfiguracja Flux lub kustomizacje 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 wprowadza rozszerzenie microsoft.flux do klastra i tworzy konfigurację. W niektórych scenariuszach możesz utworzyć instancję rozszerzenia flux osobno przed utworzeniem zasobów konfiguracji. W tym celu użyj polecenia az k8s-extension create, w celu utworzenia wystąpienia 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 Fluxa.
  • 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 OSS Flux: source-controller, kustomize-controller, helm-controller, notification-controller

Zasobniki agenta i kontrolera Flux powinny działać. 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-reflectori 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.enabledfalse.

To przykładowe polecenie instaluje image-reflector i image-automation kontrolery. 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 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ń bez uprawnień root, aby prawidłowo udostępniać 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 wdrażania Flux w OpenShift, zobacz dokumentację 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. Flux 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 odniesieniem uwierzytelniania tajnego

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

Aby uzyskać informacje na temat tworzenia tajemnic dla różnych fluxConfiguration źródeł, zobacz Lokalna tajemnica do uwierzytelniania ze źródłem.

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

Kontroler Flux Kustomize 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ądzaj wydaniami pakietu Helm za pomocą kontrolera Flux Helm

Kontroler Flux Helm jest instalowany w ramach rozszerzenia klastra microsoft.flux . Umożliwia deklaratywne zarządzanie wersjami pakietu Helm za pomocą manifestów platformy Kubernetes, które utrzymujesz 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ć duże zużycie pamięci. W rezultacie uzgadnianie dużej liczby wykresów Helm jednocześnie może spowodować wzrosty użycia 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 prośby z powodu dużej liczby uzgodnień 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 diagramy 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 diagramó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 aktywnymi restrykcyjnymi zasadami podstawienia, wykonaj 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 ścisłej polityki podstawień, uruchom 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 natywnie obsługiwane są tylko określone parametry opisane w dokumentacji Flux dotyczącej skalowania w pionie. 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 dla memoryThreshold i outOfMemoryWatch, domyślny próg pamięci jest ustawiony na 95%, a interwał sprawdzania użycia pamięci wynosi 500 ms.

Konfigurowalne parametry na poziomie dziennika

Domyślnie log-level dla kontrolerów Flux jest ustawiona na 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 na 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, fluxconfig-agent i fluxconfig-controller obsługują poziomy info i error rejestrowania (ale nie debug). Aby zmodyfikować te opcje, użyj k8s-extension polecenia :

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

Konfigurowanie adnotacji na podach rozszerzeń Flux

Podczas konfigurowania rozwiązania innego niż Azure Firewall wymagane są reguły sieci oraz reguły FQDN/aplikacji dla klastra AKS. Począwszy od wersji microsoft.flux v1.11.1, pody kontrolera Flux mogą teraz ustawiać adnotację kubernetes.azure.com/set-kube-service-host-fqdn w ich specyfikacji. Ta adnotacja umożliwia ruch do nazwy domeny serwera API nawet wtedy, gdy jest obecna zapora ogniowa 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 Kubernetes obsługiwanych przez Arc i klastrach AKS

Konfiguracje platformy Flux można tworzyć w klastrach z włączoną tożsamością obciążenia. Konfiguracje flux w klastrach usługi AKS z włączoną tożsamością roboczego obciążenia są obsługiwane począwszy od microsoft.flux wersji 1.8.0, a w klastrach z obsługą usługi Azure Arc z włączoną tożsamością roboczego obciążenia, począwszy od microsoft.flux wersji 1.15.1.

Aby utworzyć konfiguracje Flux w klastrach z aktywowaną tożsamością obciążeń, zmodyfikuj rozszerzenie zgodnie z poniższymi krokami.

  1. Pobierz adres URL wystawcy OIDC dla klastra AKS lub klastra Kubernetes z obsługą Arc.

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

  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> workloadIdentity.azureTenantId=<tenant_id>
    
  4. Ustanów poświadczenie tożsamości federacyjnej dla klastra AKS lub klastra Kubernetes z obsługą Arc. 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 "${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. Upewnij się, że zasób niestandardowy, który musi używać tożsamości obciążenia, ustawia wartość .spec.provider na 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.

Używanie tożsamości zadania z usługą Azure DevOps

Aby użyć tożsamości obciążenia w usłudze Azure DevOps, włącz następujące wymagania wstępne:

Następnie ustaw dostawcę konfiguracji flux gitRepository na "azure", aby włączyć uwierzytelnianie bez użycia poświadczeń. Można to skonfigurować przy użyciu aplikacji Bicep, szablonów usługi ARM lub interfejsu wiersza polecenia platformy Azure. Aby na przykład ustawić dostawcę przy użyciu interfejsu wiersza polecenia platformy Azure, uruchom następujące polecenie:

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

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 ustanowienia połączenia SSH z repozytoriami usługi Azure DevOps z Flux source-controller i image-automation-controller (jeśli jest włączony) przy użyciu polecenia az k8s-extension update. 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).

Usuń konfigurację i rozszerzenie Flux

Użyj następujących poleceń, aby usunąć konfiguracje Flux i, jeśli chcesz, samo rozszerzenie Flux.

Usuń konfiguracje Flux

Następujące polecenie usuwa zarówno zasób na fluxConfigurations platformie Azure, jak i obiekty konfiguracji platformy Flux w klastrze. Ponieważ konfiguracja 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 zasób rozszerzenia w Azure, jak i obiekty rozszerzenia Flux w klastrze zostaną usunięte.

Ważne

Przed usunięciem rozszerzenia Flux należy usunąć wszystkie konfiguracje 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ą -t connectedClusters, co jest odpowiednie dla klastra Kubernetes z obsługą Azure Arc. W przypadku klastra usługi AKS należy zamiast tego użyć polecenia -t managedClusters .

Następne kroki