Przepływ pracy ciągłej integracji/ciągłego wdrażania przy użyciu usługi GitOps — kubernetes z włączoną usługą Azure Arc
Ważne
Przepływ pracy opisany w tym dokumencie używa metodyki GitOps z platformą Flux w wersji 1. Usługa GitOps z rozwiązaniem Flux v2 jest teraz dostępna dla klastrów Kubernetes i Azure Kubernetes Service (AKS) z obsługą usługi Azure Arc; dowiedz się więcej o przepływie pracy ciągłej integracji/ciągłego wdrażania przy użyciu metodyki GitOps z rozwiązaniem Flux w wersji 2. Zalecamy jak najszybsze przeprowadzenie migracji do wersji Flux v2 .
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.
Nowoczesne wdrożenia platformy Kubernetes obsługują wiele aplikacji, klastrów i środowisk. Za pomocą metodyki GitOps można łatwiej zarządzać tymi złożonymi konfiguracjami, śledząc żądany stan środowisk Kubernetes deklaratywnie za pomocą usługi Git. Korzystając z typowych narzędzi Git do śledzenia stanu klastra, można zwiększyć odpowiedzialność, ułatwić badanie błędów i umożliwić automatyzację zarządzania środowiskami.
W tym omówieniu koncepcyjnym opisano metodykę GitOps jako rzeczywistość w pełnym cyklu życia zmian aplikacji przy użyciu usług Azure Arc, Azure Repos i Azure Pipelines. Przejdź do przykładu jednej zmiany aplikacji w środowiskach Kubernetes kontrolowanych przez usługę GitOps.
Architektura
Rozważ wdrożenie aplikacji w co najmniej jednym środowisku Kubernetes.
Repozytorium aplikacji
Repozytorium aplikacji zawiera kod aplikacji, nad którym deweloperzy pracują podczas ich wewnętrznej pętli. Szablony wdrażania aplikacji działają w tym repozytorium w postaci ogólnej, takiej jak Helm lub Kustomize. Wartości specyficzne dla środowiska nie są przechowywane. Zmiany w tym repozytorium wywołują potok żądania ściągnięcia lub ciągłej integracji, który rozpoczyna proces wdrażania.
Container Registry
Rejestr kontenerów przechowuje wszystkie obrazy pierwszej i innej firmy używane w środowiskach Kubernetes. Tagowanie obrazów aplikacji pierwszej firmy przy użyciu tagów czytelnych dla człowieka i zatwierdzenia usługi Git użytego do skompilowania obrazu. Buforuj obrazy innych firm w celu zapewnienia bezpieczeństwa, szybkości i odporności. Ustaw plan na potrzeby terminowego testowania i integracji aktualizacji zabezpieczeń. Aby uzyskać więcej informacji, zobacz przewodnik dotyczący korzystania z usługi ACR i obsługi zawartości publicznej, aby zapoznać się z przykładem.
Potok żądania ściągnięcia
Żądania ściągnięcia do repozytorium aplikacji są bramowane po pomyślnym uruchomieniu potoku żądania ściągnięcia. Ten potok uruchamia podstawowe bramy jakości, takie jak linting i testy jednostkowe w kodzie aplikacji. Potok testuje aplikację i lints Dockerfiles i szablony helm używane do wdrażania w środowisku Kubernetes. Obrazy platformy Docker powinny być kompilowane i testowane, ale nie wypychane. Zachowaj czas trwania potoku stosunkowo krótki, aby umożliwić szybką iterację.
Potok ciągłej integracji
Potok ciągłej integracji aplikacji uruchamia wszystkie kroki potoku żądania ściągnięcia i rozszerza testy testowania i wdrażania. Potok można uruchomić dla każdego zatwierdzenia lub w regularnym tempie z grupą zatwierdzeń. Na tym etapie przeprowadź testowanie aplikacji, które jest zbyt długie dla potoku żądania ściągnięcia. Wypchnij obrazy platformy Docker do rejestru kontenerów po utworzeniu w ramach przygotowania do wdrożenia. Zastąpiony szablon można utworzyć podszewką z zestawem wartości testowych. Obrazy używane w czasie wykonywania usługi powinny być w tym momencie skompilowane, skompilowane i przetestowane. W szczególności w kompilacji ciągłej integracji artefakty są publikowane dla kroku ciągłego wdrażania do korzystania w ramach przygotowań do wdrożenia.
Flux
Flux to usługa, która działa w każdym klastrze i jest odpowiedzialna za utrzymanie żądanego stanu. Usługa często sonduje repozytorium GitOps pod kątem zmian w klastrze i stosuje je.
Potok ciągłego wdrażania
Potok ciągłego wdrażania jest wyzwalany automatycznie przez pomyślne kompilacje ciągłej integracji. Używa on wcześniej opublikowanych szablonów, zastępuje wartości środowiska i otwiera żądanie ściągnięcia do repozytorium GitOps w celu żądania zmiany żądanego stanu co najmniej jednego klastra Kubernetes. Administratorzy klastra przejrzyj żądanie ściągnięcia zmian stanu i zatwierdź scalanie z repozytorium GitOps. Następnie potok oczekuje na ukończenie żądania ściągnięcia, co umożliwia flux odebranie zmiany stanu.
Repozytorium GitOps
Repozytorium GitOps reprezentuje bieżący żądany stan wszystkich środowisk w klastrach. Każda zmiana tego repozytorium jest pobierana przez usługę Flux w każdym klastrze i wdrożona. Żądania ściągnięcia są tworzone ze zmianami żądanego stanu, przejrzenia i scalenia. Te żądania ściągnięcia zawierają zmiany zarówno w szablonach wdrażania, jak i w wynikowych renderowanych manifestach platformy Kubernetes. Manifesty renderowane na niskim poziomie umożliwiają bardziej ostrożną inspekcję zmian, które zwykle nie są widoczne na poziomie szablonu.
Klastry Kubernetes
Co najmniej jeden klaster Kubernetes z obsługą usługi Azure Arc obsługuje różne środowiska wymagane przez aplikację. Na przykład pojedynczy klaster może obsługiwać środowisko deweloperskie i qa za pośrednictwem różnych przestrzeni nazw. Drugi klaster może zapewnić łatwiejsze rozdzielenie środowisk i bardziej szczegółową kontrolę.
Przykładowy przepływ pracy
Jako deweloper aplikacji Alice:
- Zapisuje kod aplikacji.
- Określa sposób uruchamiania aplikacji w kontenerze platformy Docker.
- Definiuje szablony, które uruchamiają kontener i usługi zależne w klastrze Kubernetes.
Chociaż Alice wie, że aplikacja potrzebuje możliwości uruchamiania w wielu środowiskach, nie zna określonych ustawień dla każdego środowiska.
Załóżmy, że Alicja chce wprowadzić zmianę aplikacji, która zmienia obraz platformy Docker używany w szablonie wdrażania aplikacji.
- Alicja zmienia szablon wdrożenia, wypycha go do gałęzi zdalnej w repozytorium aplikacji i otwiera żądanie ściągnięcia do przeglądu.
- Alicja prosi jej zespół o przejrzenie zmiany.
- Potok żądania ściągnięcia uruchamia walidację.
- Po pomyślnym uruchomieniu potoku zespół wystartuje, a zmiana zostanie scalona.
- Potok ciągłej integracji weryfikuje zmianę i pomyślnie kończy działanie Alicji.
- Zmiana jest bezpieczna do wdrożenia w klastrze, a artefakty są zapisywane w przebiegu potoku ciągłej integracji.
- Zmiana Alicji scala i wyzwala potok ciągłego wdrażania.
- Potok ciągłego wdrażania pobiera artefakty przechowywane przez przebieg potoku ciągłej integracji Alicji.
- Potok ciągłego wdrażania zastępuje szablony wartościami specyficznymi dla środowiska i etapuje wszelkie zmiany względem istniejącego stanu klastra w repozytorium GitOps.
- Potok ciągłego wdrażania tworzy żądanie ściągnięcia do repozytorium GitOps z żądanymi zmianami stanu klastra.
- Zespół Alice przegląda i zatwierdza jej żądanie ściągnięcia.
- Zmiana jest scalona z gałęzią docelową odpowiadającą środowisku.
- W ciągu kilku minut flux zauważa zmianę w repozytorium GitOps i ściąga zmianę Alicji.
- Ze względu na zmianę obrazu platformy Docker zasobnik aplikacji wymaga aktualizacji.
- Flux stosuje zmianę do klastra.
- Alice testuje punkt końcowy aplikacji, aby zweryfikować pomyślne ukończenie wdrożenia.
Uwaga
Aby uzyskać więcej środowisk przeznaczonych do wdrożenia, potok ciągłego wdrażania iteruje, tworząc żądanie ściągnięcia dla następnego środowiska i powtarza kroki 4–7. Proces wielu wymaga dodatkowego zatwierdzenia dla bardziej ryzykownych wdrożeń lub środowisk, takich jak zmiana związana z zabezpieczeniami lub środowisko produkcyjne.
- Po pomyślnym wdrożeniu wszystkich środowisk potok zostanie ukończony.
Następne kroki
Dowiedz się więcej o tworzeniu połączeń między klastrem a repozytorium Git jako zasobem konfiguracji przy użyciu platformy Kubernetes z obsługą usługi Azure Arc