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
Klaster Kubernetes połączony z Azure Arc, który jest już aktywny i działa. 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 pomocą serwera proxy dla ruchu wychodzącego, zainstaluj agentów usługi Arc z użyciem ustawień proxy.
Uprawnienia do odczytu i zapisu dla
Microsoft.Kubernetes/connectedClusters
typu zasobu.
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, uruchomaz 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ż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 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
iapps
. Każda z nich jest skojarzona ze ścieżką w repozytorium. - Kustomizacja
apps
zależy od kustomizacjiinfra
. Kustomizacjainfra
musi się zakończyć przed uruchomieniem kustomizacjiapps
. - 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
, ,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 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
, kustomize
i notification
Flux są instalowane domyślnie. Kontrolery image-reflector
i 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
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:
- Flux Kustomize Controller
- Dokumenty referencyjne Kustomize
- Plik kustomizacja
- Projekt Kustomize
- Przewodniki Kustomize
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:
- Flux dla użytkowników programu Helm
- Zarządzanie wydaniami programu Helm
- Przejście na kontroler Helm
- Kontroler 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ć 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
, info
lub 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.
Pobierz adres URL wystawcy OIDC dla klastra AKS lub klastra Kubernetes z obsługą Arc.
Utwórz tożsamość zarządzaną i zanotuj jej identyfikator klienta i identyfikator dzierżawy.
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>
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
Upewnij się, że zasób niestandardowy, który musi używać tożsamości obciążenia, ustawia wartość
.spec.provider
naazure
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.
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:
- Upewnij się, że Organizacja usługi Azure DevOps jest połączona z firmą Microsoft Entra.
- Upewnij się, że tożsamość obciążenia jest prawidłowo skonfigurowana w klastrze, wykonując kroki dla klastrów usługi AKS lub klastrów Kubernetes z obsługą usługi Arc.
- Utwórz zarządzaną tożsamość i poświadczenia federacyjne oraz włącz tożsamość roboczą w zasobnikach kontrolera Flux rozszerzenia Flux, zgodnie z wcześniejszym opisem w tej sekcji.
- Dodaj tożsamość zarządzaną do organizacji Azure DevOps jako użytkownik, upewniając się, że ma uprawnienia do dostępu do repozytorium Azure DevOps. Aby uzyskać szczegółowe instrukcje, zobacz Używanie jednostek usługi i tożsamości zarządzanych w usłudze Azure DevOps.
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
- 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).