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
Połączony klaster Kubernetes z włączoną usługą Azure Arc, który jest uruchomiony. Klastry oparte na architekturze ARM64 są obsługiwane począwszy od
microsoft.flux
wersji 1.7.0.Dowiedz się, jak połączyć klaster Kubernetes z usługą Azure Arc. Jeśli musisz nawiązać połączenie za pośrednictwem serwera proxy ruchu wychodzącego, zainstaluj agentów usługi Arc przy użyciu ustawień serwera proxy.
Uprawnienia do odczytu i zapisu dla
Microsoft.Kubernetes/connectedClusters
typu zasobu.
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 create
programu 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 polecenieaz 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życiuaz 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
iapps
. Każda z nich jest skojarzona ze ścieżką w repozytorium. - Kustomization
apps
zależyinfra
od kustomyzacji. (Kustomizationinfra
musi zakończyć się przed uruchomieniemapps
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
, ,podinfo
redis
: 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-controller
notification-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
, kustomize
i notification
Flux są instalowane domyślnie. Kontrolery image-automation
i 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ślnatrue
)--config helm-controller.enabled=<true/false>
(wartość domyślnatrue
)--config kustomize-controller.enabled=<true/false>
(wartość domyślnatrue
)--config notification-controller.enabled=<true/false>
(wartość domyślnatrue
)--config image-automation-controller.enabled=<true/false>
(wartość domyślnafalse
)--config image-reflector-controller.enabled=<true/false>
(wartość domyślnafalse
)
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:
- Kontroler Kustomize strumienia
- Dokumenty referencyjne Kustomize
- Plik kustomization
- Projekt Kustomize
- Przewodniki Kustomize
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:
- Flux dla użytkowników programu Helm
- Zarządzanie wydaniami programu Helm
- Migrowanie do rozwiązania Flux v2 Helm z programu Flux v1 Helm
- Kontroler Flux Helm
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
, info
lub 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.
Pobierz adres URL wystawcy OIDC dla klastra.
Utwórz tożsamość zarządzaną i zanotuj jej identyfikator klienta.
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>
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
Upewnij się, że zasób niestandardowy, który musi używać wartości zestawu
.spec.provider
tożsamości obciążenia doazure
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
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
- Przeczytaj więcej na temat konfiguracji i metodyki GitOps.
- Dowiedz się, jak za pomocą usługi Azure Policy wymuszać metodyki GitOps na dużą skalę.
- Dowiedz się więcej o monitorowaniu stanu i aktywności usługi GitOps (Flux v2).