Wdrożenia aplikacji z usługą GitOps (Flux v2) dla usług AKS i Kubernetes z obsługą usługi Azure Arc
Platforma Azure udostępnia funkcję wdrażania aplikacji automatycznych przy użyciu metodyki GitOps, która współpracuje z usługą Azure Kubernetes Service (AKS) i klastrami Kubernetes z obsługą usługi Azure Arc. Najważniejsze korzyści zapewniane przez wdrożenie metodyki GitOps na potrzeby wdrażania aplikacji w klastrach Kubernetes obejmują:
- Ciągły wgląd w stan aplikacji uruchomionych w klastrach.
- Rozdzielenie problemów między zespołami deweloperów aplikacji i zespołami infrastruktury. Zespoły aplikacji nie muszą mieć doświadczenia z wdrożeniami platformy Kubernetes. Zespoły inżynieryjne platformy zwykle tworzą model samoobsługowy dla zespołów aplikacji, umożliwiając im uruchamianie wdrożeń z większą pewnością.
- Możliwość ponownego tworzenia klastrów o tym samym żądanym stanie w przypadku awarii lub skalowania w poziomie.
Za pomocą usługi GitOps deklarujesz żądany stan klastrów Kubernetes w plikach w repozytoriach Git. Repozytoria Git mogą zawierać następujące pliki:
- Manifesty w formacie YAML opisujące zasoby kubernetes (takie jak przestrzenie nazw, wpisy tajne, wdrożenia i inne)
- Wykresy helm na potrzeby wdrażania aplikacji
- Kustomize plików w celu opisania zmian specyficznych dla środowiska
Ponieważ te pliki są przechowywane w repozytorium Git, są one wersjonowane, a zmiany między wersjami są łatwo śledzone. Kontrolery Kubernetes działają w klastrach i stale uzgadniają stan klastra z żądanym stanem zadeklarowanym w repozytorium Git. Te operatory ściągają pliki z repozytoriów Git i stosują żądany stan do klastrów. Operatorzy stale zapewniają również, że klaster pozostaje w żądanym stanie.
Usługa GitOps na platformie Kubernetes z włączoną usługą Azure Arc lub Azure Kubernetes Service korzysta z platformy Flux, popularnego zestawu narzędzi typu open source. Platforma Flux zapewnia obsługę typowych źródeł plików (repozytoriów Git i Helm, zasobników, usługi Azure Blob Storage) i typów szablonów (YAML, Helm i Kustomize). Platforma Flux obsługuje również zarządzanie zależnościami między wieloma dzierżawami i wdrożeniami.
Strumień jest wdrażany bezpośrednio w klastrze, a płaszczyzna sterowania każdego klastra jest logicznie oddzielona. Dzięki temu skalowanie jest dobrze skalowane do setek i tysięcy klastrów. Platforma Flux umożliwia czyste wdrożenia aplikacji GitOps oparte na ściąganiu. Żaden dostęp do klastrów nie jest wymagany przez repozytorium źródłowe lub przez inny klaster.
Rozszerzenie klastra Flux
Usługa GitOps jest włączona w klastrze Kubernetes lub AKS z włączoną usługą Azure Arc jako zasób rozszerzenia klastra.Microsoft.KubernetesConfiguration/extensions/microsoft.flux
Przed microsoft.flux
utworzeniem co najmniej jednego fluxConfigurations
rozszerzenia należy zainstalować w klastrze. Rozszerzenie jest instalowane automatycznie podczas tworzenia pierwszego Microsoft.KubernetesConfiguration/fluxConfigurations
w klastrze lub można zainstalować je ręcznie przy użyciu portalu, interfejsu wiersza polecenia platformy Azure (az k8s-extension create --extensionType=microsoft.flux
), szablonu usługi ARM lub interfejsu API REST.
Kontrolery
Domyślnie microsoft.flux
rozszerzenie instaluje kontrolery Flux (Source, Kustomize, Helm, Notification) i FluxConfig Custom Resource Definition (CRD), fluxconfig-agent
i fluxconfig-controller
. Opcjonalnie można również zainstalować platformę Flux image-automation
i image-reflector
kontrolery, które zapewniają funkcjonalność aktualizowania i pobierania obrazów platformy Docker.
Kontroler źródła strumienia: obserwuje
source.toolkit.fluxcd.io
zasoby niestandardowe. Obsługuje synchronizację między repozytoriami Git, repozytoriami Helm, zasobnikami i usługą Azure Blob Storage. Obsługuje autoryzację ze źródłem prywatnych kont usługi Git, repozytoriów Helm i usługi Azure Blob Storage. Przedstawia najnowsze zmiany w źródle za pośrednictwem pliku archiwum tar.Kontroler Kustomize flux: obserwuje
kustomization.toolkit.fluxcd.io
zasoby niestandardowe. Stosuje pliki Kustomize lub nieprzetworzone pliki YAML ze źródła do klastra.Kontroler Flux Helm: obserwuje
helm.toolkit.fluxcd.io
zasoby niestandardowe. Pobiera skojarzony wykres ze źródła repozytorium Helm udostępnianego przez kontroler źródła.HelmChart
Tworzy zasób niestandardowy i stosuje elementHelmRelease
z daną wersją, nazwą i wartościami zdefiniowanymi przez klienta do klastra.Kontroler powiadomień flux: obserwuje
notification.toolkit.fluxcd.io
zasoby niestandardowe. Odbiera powiadomienia ze wszystkich kontrolerów Flux. Wypycha powiadomienia do punktów końcowych elementu webhook zdefiniowanego przez użytkownika.Definicje zasobów niestandardowych flux:
kustomizations.kustomize.toolkit.fluxcd.io
imagepolicies.image.toolkit.fluxcd.io
imagerepositories.image.toolkit.fluxcd.io
imageupdateautomations.image.toolkit.fluxcd.io
alerts.notification.toolkit.fluxcd.io
providers.notification.toolkit.fluxcd.io
receivers.notification.toolkit.fluxcd.io
buckets.source.toolkit.fluxcd.io
gitrepositories.source.toolkit.fluxcd.io
helmcharts.source.toolkit.fluxcd.io
helmrepositories.source.toolkit.fluxcd.io
helmreleases.helm.toolkit.fluxcd.io
fluxconfigs.clusterconfig.azure.com
FluxConfig CRD: niestandardowa definicja zasobu dla
fluxconfigs.clusterconfig.azure.com
zasobów niestandardowych definiującychFluxConfig
obiekty Kubernetes.fluxconfig-agent
: Odpowiedzialny za oglądanie platformy Azure pod kątem nowych lub zaktualizowanychfluxConfigurations
zasobów oraz uruchamiania skojarzonej konfiguracji platformy Flux w klastrze. Odpowiada również za wypychanie zmian stanu flux w klastrze z powrotem na platformę Azure dla każdegofluxConfigurations
zasobu.fluxconfig-controller
: monitorujefluxconfigs.clusterconfig.azure.com
zasoby niestandardowe i reaguje na zmiany dzięki nowej lub zaktualizowanej konfiguracji maszyn GitOps w klastrze.
Uwaga
Rozszerzenie microsoft.flux
jest instalowane w flux-system
przestrzeni nazw i ma zakres obejmujący cały klaster. Nie można zainstalować tego rozszerzenia w zakresie przestrzeni nazw.
Konfiguracje strumienia
Zasoby konfiguracji platformy Flux (Microsoft.KubernetesConfiguration/fluxConfigurations
) umożliwiają zarządzanie klastrem w usłudze GitOps z repozytoriów Git, źródeł zasobników lub usługi Azure Blob Storage. Podczas tworzenia fluxConfigurations
zasobu wartości, które podajesz dla parametrów, takich jak docelowe repozytorium Git, są używane do tworzenia i konfigurowania obiektów Kubernetes, które umożliwiają proces GitOps w tym klastrze. Aby zapewnić bezpieczeństwo danych, fluxConfigurations
dane zasobów są przechowywane zaszyfrowane w spoczynku w bazie danych usługi Azure Cosmos DB przez usługę konfiguracji klastra.
Agenci fluxconfig-agent
i fluxconfig-controller
instalowani z microsoft.flux
rozszerzeniem zarządzają procesem konfiguracji GitOps.
fluxconfig-agent
odpowiada za następujące zadania:
- Sonduje usługę płaszczyzny danych konfiguracji kubernetes dla nowych lub zaktualizowanych
fluxConfigurations
zasobów. - Tworzy lub aktualizuje
FluxConfig
zasoby niestandardowe w klastrze przy użyciu informacji o konfiguracji. - Obserwuje
FluxConfig
zasoby niestandardowe i wypycha zmiany stanu do skojarzonych zasobów azure fluxConfiguration.
fluxconfig-controller
odpowiada za następujące zadania:
- Obserwuje aktualizacje stanu zasobów niestandardowych flux utworzonych przez zarządzany
fluxConfigurations
program . - Tworzy parę kluczy prywatnych/publicznych, która istnieje przez okres istnienia elementu
fluxConfigurations
. Ten klucz jest używany do uwierzytelniania, jeśli adres URL jest oparty na protokole SSH i jeśli użytkownik nie udostępnia własnego klucza prywatnego podczas tworzenia konfiguracji. - Tworzy niestandardowy wpis tajny uwierzytelniania na podstawie klucza prywatnego dostarczonego przez użytkownika/http basic-auth/known-hosts/no-auth danych.
- Konfiguruje kontrolę dostępu opartą na rolach (aprowizowania konta usługi, tworzenia/przypisywania powiązania roli, tworzenia/przypisywania roli).
- Tworzy
GitRepository
lubBucket
niestandardowy zasób iKustomization
zasoby niestandardowe na podstawie informacji w zasobie niestandardowymFluxConfig
.
Każdy fluxConfigurations
zasób na platformie Azure jest skojarzony z jednym zasobem flux GitRepository
lub Bucket
niestandardowym i co najmniej jednym Kustomization
zasobem niestandardowym w klastrze Kubernetes. Podczas tworzenia fluxConfigurations
zasobu należy określić adres URL źródła (repozytorium Git, zasobnika lub usługi Azure Blob Storage) oraz miejsce docelowe synchronizacji w źródle dla każdego Kustomization
elementu . Zależności między zasobami niestandardowymi Kustomization
można skonfigurować w celu kontrolowania sekwencjonowania wdrożenia. Można również utworzyć wiele zasobów o fluxConfigurations
zakresie przestrzeni nazw w tym samym klastrze dla różnych aplikacji i zespołów aplikacji.
Uwaga
Monitory fluxconfig-agent
nowych lub zaktualizowanych fluxConfiguration
zasobów na platformie Azure. Agent wymaga łączności z platformą Azure w celu uzyskania żądanego fluxConfiguration
stanu, który ma zostać zastosowany do klastra. Jeśli agent nie może nawiązać połączenia z platformą Azure, zmieni się w klastrze, aż agent będzie mógł nawiązać połączenie. Jeśli klaster zostanie odłączony od platformy Azure przez ponad 48 godzin, żądanie do klastra zostanie przekroczone, a zmiany będą musiały zostać ponownie zastosować na platformie Azure.
Poufne dane wejściowe klienta, takie jak klucz prywatny i token/hasło, są przechowywane przez mniej niż 48 godzin w usłudze konfiguracji Kubernetes. Jeśli zaktualizujesz dowolną z tych wartości na platformie Azure, upewnij się, że klastry łączą się z platformą Azure w ciągu 48 godzin.
Stan konfiguracji i zgodność platformy Flux można monitorować w witrynie Azure Portal lub używać pulpitów nawigacyjnych do monitorowania stanu, zgodności, zużycia zasobów i działań uzgodnień. Aby uzyskać więcej informacji, zobacz Monitorowanie stanu i działania usługi GitOps (Flux v2).
Obsługa wersji
Obsługiwana jest najnowsza wersja rozszerzenia Flux v2 (microsoft.flux
) i dwie poprzednie wersje (N-2). Ogólnie zaleca się używanie najnowszej wersji rozszerzenia. microsoft.flux
Począwszy od wersji 1.7.0, obsługiwane są klastry oparte na architekturze ARM64.
Uwaga
Jeśli używasz platformy Flux w wersji 1, zalecamy jak najszybszą migrację do platformy Flux w wersji 2 .
Obsługa zasobów konfiguracji klastra opartych na platformie Flux w wersji 1 utworzonych przed 1 stycznia 2024 r. zakończy się 24 maja 2025 r. Od 1 stycznia 2024 r. nie będzie można utworzyć nowych zasobów konfiguracji klastra opartego na platformie Flux w wersji 1.
Metodyka GitOps z linkiem prywatnym
Jeśli dodano obsługę łącza prywatnego do klastra Kubernetes z włączoną usługą Azure Arc, microsoft.flux
rozszerzenie działa gotowe do użycia z komunikacją z powrotem na platformę Azure. W przypadku połączeń z repozytorium Git, repozytorium Helm lub innych punktów końcowych potrzebnych do wdrożenia manifestów platformy Kubernetes należy aprowizować te punkty końcowe za zaporą lub wyświetlić je na zaporze, aby kontroler źródła flux mógł pomyślnie nawiązać z nimi połączenie.
Przechowywanie danych
Usługa Azure GitOps (Azure Kubernetes Configuration Management) przechowuje/przetwarza dane klientów. Domyślnie dane klienta są replikowane do sparowanego regionu. W regionach Singapur, Azja Wschodnia i Brazylia Południowa wszystkie dane klientów są przechowywane i przetwarzane w regionie.
Stosowanie konfiguracji platformy Flux na dużą skalę
Ponieważ usługa Azure Resource Manager zarządza konfiguracjami, możesz zautomatyzować tworzenie tej samej konfiguracji we wszystkich zasobach usługi Azure Kubernetes Service i kubernetes z włączoną usługą Azure Arc przy użyciu usługi Azure Policy w zakresie subskrypcji lub grupy zasobów. To wymuszanie na dużą skalę zapewnia spójne stosowanie określonych konfiguracji w całych grupach klastrów.
Aby uzyskać więcej informacji, zobacz Wdrażanie aplikacji stale na dużą skalę przy użyciu konfiguracji platformy Flux w wersji 2 i usługi Azure Policy.
Parametry
Aby wyświetlić wszystkie parametry obsługiwane przez platformę Flux v2 na platformie Azure, zobacz dokumentacjęaz k8s-configuration
. Implementacja platformy Azure obecnie nie obsługuje każdego parametru obsługiwanego przez platformę Flux.
Aby uzyskać informacje o dostępnych parametrach i sposobie ich używania, zobacz Parametry obsługiwane przez usługę GitOps (Flux v2).
Obsługa wielu dzierżawców
Platforma Flux v2 obsługuje wiele dzierżaw , począwszy od wersji 0.26. Ta funkcja jest zintegrowana z platformą Flux v2 na platformie Azure.
Uwaga
W przypadku funkcji wielodostępności musisz wiedzieć, czy manifesty zawierają jakiekolwiek źródła między przestrzeniami nazwRef for HelmRelease, Kustomization, ImagePolicy lub innych obiektów albo jeśli używasz platformy Kubernetes w wersji mniejszej niż 1.20.6. Aby przygotować:
- Uaktualnij platformę Kubernetes do wersji 1.20.6 lub nowszej.
- W manifestach platformy Kubernetes upewnij się, że wszystkie
sourceRef
obiekty znajdują się w tej samej przestrzeni nazw co konfiguracja usługi GitOps.- Jeśli potrzebujesz czasu na zaktualizowanie manifestów, możesz zrezygnować z wielodostępności. Jednak nadal trzeba uaktualnić wersję rozwiązania Kubernetes.
Aktualizowanie manifestów dla wielu dzierżaw
Załóżmy, że wdrożysz fluxConfiguration
klaster w jednym z naszych klastrów Kubernetes w cluster-config
przestrzeni nazw z zakresem klastra. Źródło należy skonfigurować tak, aby synchronizowało https://github.com/fluxcd/flux2-kustomize-helm-example
repozytorium. Jest to to samo przykładowe repozytorium Git używane w samouczku Wdrażanie aplikacji przy użyciu metodyki GitOps z rozwiązaniem Flux w wersji 2.
Po zsynchronizowaniu repozytorium platforma Flux wdraża zasoby opisane w manifestach (pliki YAML). Dwa z manifestów opisują HelmRelease
i HelmRepository
obiekty.
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: nginx
namespace: nginx
spec:
releaseName: nginx-ingress-controller
chart:
spec:
chart: nginx-ingress-controller
sourceRef:
kind: HelmRepository
name: bitnami
namespace: flux-system
version: "5.6.14"
interval: 1h0m0s
install:
remediation:
retries: 3
# Default values
# https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
values:
service:
type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
name: bitnami
namespace: flux-system
spec:
interval: 30m
url: https://charts.bitnami.com/bitnami
Domyślnie rozszerzenie Flux wdraża fluxConfigurations
element przez personifikację flux-applier
konta usługi wdrożonego cluster-config
tylko w przestrzeni nazw. Użycie powyższych manifestów, gdy włączono wielodostępność, HelmRelease
zostanie zablokowane. Jest to spowodowane tym HelmRelease
, że element znajduje się w nginx
przestrzeni nazw, ale odwołuje się do repozytorium HelmRepository w flux-system
przestrzeni nazw. Ponadto flux helm-controller
nie może zastosować HelmRelease
elementu , ponieważ nie flux-applier
ma konta usługi w nginx
przestrzeni nazw.
Aby pracować z wieloma dzierżawami, właściwym rozwiązaniem jest wdrożenie wszystkich obiektów Flux w tej samej przestrzeni nazw co fluxConfigurations
. Takie podejście pozwala uniknąć problemu z odwołaniem między przestrzeniami nazw i umożliwia kontrolerom Flux uzyskanie uprawnień do stosowania obiektów. W związku z tym w przypadku konfiguracji GitOps utworzonej cluster-config
w przestrzeni nazw następujące przykładowe manifesty uległy zmianie:
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: nginx
namespace: cluster-config
spec:
releaseName: nginx-ingress-controller
targetNamespace: nginx
chart:
spec:
chart: nginx-ingress-controller
sourceRef:
kind: HelmRepository
name: bitnami
namespace: cluster-config
version: "5.6.14"
interval: 1h0m0s
install:
remediation:
retries: 3
# Default values
# https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
values:
service:
type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
name: bitnami
namespace: cluster-config
spec:
interval: 30m
url: https://charts.bitnami.com/bitnami
Rezygnacja z wielodostępności
Po zainstalowaniu microsoft.flux
rozszerzenia domyślnie jest włączona obsługa wielu dzierżaw. Jeśli musisz wyłączyć wielodostępność, możesz zrezygnować z tworzenia lub aktualizowania microsoft.flux
rozszerzenia w klastrach za pomocą --configuration-settings multiTenancy.enforce=false
polecenia , jak pokazano w poniższych przykładowych poleceniach:
az k8s-extension create --extension-type microsoft.flux --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
az k8s-extension update --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
Migrowanie z platformy Flux v1
Jeśli nadal używasz platformy Flux w wersji 1, zalecamy jak najszybszą migrację do platformy Flux w wersji 2.
Aby przeprowadzić migrację do usługi Flux v2 w tych samych klastrach, w których używasz platformy Flux v1, należy najpierw usunąć wszystkie elementy Flux v1 sourceControlConfigurations
z klastrów. Ponieważ platforma Flux v2 ma zasadniczo inną architekturę, microsoft.flux
rozszerzenie klastra nie zostanie zainstalowane, jeśli w klastrze znajdują się zasoby Flux v1 sourceControlConfigurations
. Proces usuwania konfiguracji platformy Flux w wersji 1 i wdrażania konfiguracji platformy Flux w wersji 2 nie powinien trwać dłużej niż 30 minut.
Usunięcie platformy Flux w wersji 1 sourceControlConfigurations
nie powoduje zatrzymania żadnych aplikacji uruchomionych w klastrach. Jednak w okresie usunięcia konfiguracji platformy Flux v1 i rozszerzenie Flux v2 nie zostało jeszcze w pełni wdrożone:
- Jeśli istnieją nowe zmiany w manifestach aplikacji przechowywanych w repozytorium Git, te zmiany nie są ściągane podczas migracji, a wersja aplikacji wdrożona w klastrze będzie nieaktualna.
- Jeśli w stanie klastra nie są niezamierzone zmiany i odbiegają od żądanego stanu określonego w źródłowym repozytorium Git, klaster nie będzie mógł się samodzielnie leczyć.
Zalecamy przetestowanie scenariusza migracji w środowisku deweloperskim przed migracją środowiska produkcyjnego.
Wyświetlanie i usuwanie konfiguracji platformy Flux w wersji 1
Użyj tych poleceń interfejsu wiersza polecenia platformy Azure, aby znaleźć i usunąć istniejące sourceControlConfigurations
w klastrze:
az k8s-configuration flux list --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
az k8s-configuration flux delete --name <configuration name> --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
Istniejące konfiguracje usługi GitOps dla klastra można również znaleźć i usunąć w witrynie Azure Portal. W tym celu przejdź do klastra, w którym została utworzona konfiguracja, i wybierz pozycję GitOps w okienku po lewej stronie. Wybierz konfigurację, a następnie wybierz pozycję Usuń.
Wdrażanie konfiguracji platformy Flux w wersji 2
Użyj witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure, aby zastosować konfiguracje platformy Flux w wersji 2 do klastrów.
Informacje o wycofaniu rozwiązania Flux v1
Projekt open source platformy Flux w wersji 1 został zarchiwizowany, a tworzenie funkcji zostało zatrzymane na czas nieokreślony.
Flux v2 został uruchomiony jako uaktualniony projekt open source Flux. Ma nową architekturę i obsługuje więcej przypadków użycia metodyki GitOps. Firma Microsoft uruchomiła wersję rozszerzenia przy użyciu platformy Flux v2 w maju 2022 r. Od tego czasu klienci zostali poinformowani o przejściu na platformę Flux v2 w ciągu trzech lat, ponieważ wsparcie dla korzystania z platformy Flux v1 ma zakończyć się w maju 2025 r.
Najważniejsze nowe funkcje wprowadzone w rozszerzeniu GitOps dla platformy Flux w wersji 2:
- Flux v1 to monolityczny operator do-it-all. Flux v2 oddziela funkcje od wyspecjalizowanych kontrolerów (kontroler źródłowy, kontroler Kustomize, kontroler Helm i kontroler powiadomień).
- Obsługuje synchronizację z wieloma repozytoriami źródłowymi.
- Obsługuje wiele dzierżaw, takich jak stosowanie każdego repozytorium źródłowego z własnym zestawem uprawnień.
- Udostępnia szczegółowe informacje operacyjne za pomocą kontroli kondycji, zdarzeń i alertów.
- Obsługuje gałęzie git, przypinanie zatwierdzeń i tagów oraz podążanie za zakresami tagów SemVer.
- Konfiguracja poświadczeń na zasób gitRepository: klucz prywatny SSH, nazwa użytkownika/hasło/hasło/token protokołu HTTP/S i klucze publiczne Protokołu OpenPGP.
Następne kroki
- Skorzystaj z naszego samouczka, aby dowiedzieć się, jak włączyć metodykę GitOps w klastrach Kubernetes z włączoną usługą AKS lub Azure Arc.
- Dowiedz się więcej o przepływie pracy ciągłej integracji/ciągłego wdrażania przy użyciu metodyki GitOps.