Samouczek: implementowanie ciągłej integracji/ciągłego wdrażania za pomocą usługi GitOps przy użyciu klastrów Kubernetes z obsługą usługi Azure Arc
Ważne
W tym samouczku jest używana usługa GitOps z rozwiązaniem 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; Przejdź do samouczka korzystającego z 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.
W tym samouczku skonfigurujesz rozwiązanie ciągłej integracji/ciągłego wdrażania przy użyciu metodyki GitOps z klastrami Kubernetes z włączoną usługą Azure Arc. Korzystając z przykładowej aplikacji Azure Vote, wykonasz następujące elementy:
- Utwórz klaster Kubernetes z włączoną usługą Azure Arc.
- Połączenie repozytoriów aplikacji i repozytoriów GitOps do usługi Azure Repos.
- Zaimportuj potoki ciągłej integracji/ciągłego wdrażania.
- Połączenie usługi Azure Container Registry (ACR) do usług Azure DevOps i Kubernetes.
- Utwórz grupy zmiennych środowiskowych.
dev
Wdrażanie środowisk istage
.- Przetestuj środowiska aplikacji.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Azure Cloud Shell
Na platforma Azure hostowane jest Azure Cloud Shell, interaktywne środowisko powłoki, z którego można korzystać w przeglądarce. Do pracy z usługami platformy Azure można używać programu Bash lub PowerShell w środowisku Cloud Shell. Aby uruchomić kod w tym artykule, możesz użyć wstępnie zainstalowanych poleceń usługi Cloud Shell bez konieczności instalowania niczego w środowisku lokalnym.
Aby uruchomić środowisko Azure Cloud Shell:
Opcja | Przykład/link |
---|---|
Wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu lub polecenia. Wybranie pozycji Wypróbuj nie powoduje automatycznego skopiowania kodu lub polecenia do usługi Cloud Shell. | |
Przejdź do witryny https://shell.azure.com lub wybierz przycisk Uruchom Cloud Shell, aby otworzyć środowisko Cloud Shell w przeglądarce. | |
Wybierz przycisk Cloud Shell na pasku menu w prawym górnym rogu witryny Azure Portal. |
Aby użyć usługi Azure Cloud Shell:
Uruchom usługę Cloud Shell.
Wybierz przycisk Kopiuj w bloku kodu (lub bloku poleceń), aby skopiować kod lub polecenie.
Wklej kod lub polecenie do sesji usługi Cloud Shell, wybierając klawisze Ctrl+Shift V w systemach Windows i Linux lub wybierając pozycję Cmd+Shift++V w systemie macOS.
Wybierz klawisz Enter, aby uruchomić kod lub polecenie.
Zanim rozpoczniesz
W tym samouczku założono, że znajomość usług Azure DevOps, Azure Repos i Pipelines oraz interfejsu wiersza polecenia platformy Azure.
Zaloguj się do usługi Azure DevOps Services.
Ukończ poprzedni samouczek, aby dowiedzieć się, jak wdrożyć metodyę GitOps dla środowiska ciągłej integracji/ciągłego wdrażania.
Poznaj korzyści i architekturę tej funkcji.
Sprawdź, czy masz:
- Połączony klaster Kubernetes z obsługą usługi Azure Arc o nazwie arc-cicd-cluster.
- Połączona usługa Azure Container Registry (ACR) z integracją usługi AKS lub uwierzytelnianiem klastra spoza usługi AKS.
- Uprawnienia "Build Administracja" i "Project Administracja" dla usług Azure Repos i Azure Pipelines.
Zainstaluj następujące rozszerzenia interfejsu wiersza polecenia platformy >Kubernetes z obsługą usługi Azure Arc = 1.0.0:
az extension add --name connectedk8s az extension add --name k8s-configuration
Aby zaktualizować te rozszerzenia do najnowszej wersji, uruchom następujące polecenia:
az extension update --name connectedk8s az extension update --name k8s-configuration
Importowanie repozytoriów aplikacji i repozytoriów GitOps do usługi Azure Repos
Zaimportuj repozytorium aplikacji i repozytorium GitOps do usługi Azure Repos. Na potrzeby tego samouczka użyj następujących przykładowych repozytoriów:
- arc-cicd-demo-src application repo
- URL: https://github.com/Azure/arc-cicd-demo-src
- Zawiera przykład aplikacji Azure Vote, która zostanie wdrożona przy użyciu metodyki GitOps.
- arc-cicd-demo-gitops repozytorium GitOps
- URL: https://github.com/Azure/arc-cicd-demo-gitops
- Działa jako podstawa dla zasobów klastra, które mieszczą aplikację Azure Vote.
Dowiedz się więcej na temat importowania repozytoriów Git.
Uwaga
Importowanie i używanie dwóch oddzielnych repozytoriów dla repozytoriów aplikacji i repozytoriów GitOps może poprawić bezpieczeństwo i prostotę. Uprawnienia i widoczność repozytoriów GitOps aplikacji i repozytoriów GitOps można dostroić indywidualnie. Na przykład administrator klastra może nie znaleźć zmian w kodzie aplikacji odpowiednich dla żądanego stanu klastra. Z drugiej strony deweloper aplikacji nie musi znać określonych parametrów dla każdego środowiska — zestaw wartości testowych zapewniających pokrycie parametrów może być wystarczający.
Połączenie repozytorium GitOps
Aby stale wdrażać aplikację, połącz repozytorium aplikacji z klastrem przy użyciu metodyki GitOps. Repozytorium GitOps arc-cicd-demo-gitops zawiera podstawowe zasoby, które umożliwiają uruchomienie aplikacji w klastrze arc-cicd-cluster .
Początkowe repozytorium GitOps zawiera tylko manifest , który tworzy przestrzenie nazw deweloperskich i etapowych odpowiadających środowisku wdrażania.
Utworzone połączenie GitOps spowoduje automatyczne:
- Zsynchronizuj manifesty w katalogu manifestu.
- Zaktualizuj stan klastra.
Przepływ pracy ciągłej integracji/ciągłego wdrażania wypełni katalog manifestu dodatkowymi manifestami w celu wdrożenia aplikacji.
Utwórz nowe połączenie GitOps z nowo zaimportowanym repozytorium arc-cicd-demo-gitops w usłudze Azure Repos.
az k8s-configuration create \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ --operator-instance-name cluster-config \ --operator-namespace cluster-config \ --repository-url https://dev.azure.com/<Your organization>/<Your project>/_git/arc-cicd-demo-gitops \ --https-user <Azure Repos username> \ --https-key <Azure Repos PAT token> \ --scope cluster \ --cluster-type connectedClusters \ --operator-params='--git-readonly --git-path=arc-cicd-cluster/manifests'
Upewnij się, że platforma Flux używa
arc-cicd-cluster/manifests
tylko katalogu jako ścieżki podstawowej. Zdefiniuj ścieżkę przy użyciu następującego parametru operatora:--git-path=arc-cicd-cluster/manifests
Uwaga
Jeśli używasz parametry połączenia HTTPS i masz problemy z połączeniem, upewnij się, że pominięto prefiks nazwy użytkownika w adresie URL. Na przykład
https://alice@dev.azure.com/contoso/project/_git/arc-cicd-demo-gitops
musi zostaćalice@
usunięty. Parametr--https-user
określa użytkownika, na przykład--https-user alice
.Sprawdź stan wdrożenia w witrynie Azure Portal.
- W przypadku powodzenia zobaczysz zarówno przestrzenie nazw, jak
dev
istage
utworzone w klastrze.
- W przypadku powodzenia zobaczysz zarówno przestrzenie nazw, jak
Importowanie potoków ciągłej integracji/ciągłego wdrażania
Po zsynchronizowaniu połączenia GitOps należy zaimportować potoki ciągłej integracji/ciągłego wdrażania, które tworzą manifesty.
Repozytorium aplikacji zawiera .pipeline
folder z potokami, których będziesz używać w przypadku żądania ściągnięcia, ciągłej integracji i ciągłego wdrażania. Zaimportuj i zmień nazwę trzech potoków dostępnych w repozytorium przykładowym:
Nazwa pliku potoku | opis |
---|---|
.pipelines/az-vote-pr-pipeline.yaml |
Potok żądania ściągnięcia aplikacji o nazwie arc-cicd-demo-src PR |
.pipelines/az-vote-ci-pipeline.yaml |
Potok ciągłej integracji aplikacji o nazwie arc-cicd-demo-src CI |
.pipelines/az-vote-cd-pipeline.yaml |
Potok ciągłego wdrażania aplikacji o nazwie arc-cicd-demo-src CD |
Połączenie usługi ACR
Zarówno potoki, jak i klaster będą używać usługi ACR do przechowywania i pobierania obrazów platformy Docker.
Połączenie usługi ACR do usługi Azure DevOps
Podczas procesu ciągłej integracji wdrożysz kontenery aplikacji w rejestrze. Zacznij od utworzenia połączenia z usługą platformy Azure:
- W usłudze Azure DevOps otwórz stronę Połączenia z usługą na stronie ustawień projektu. W programie TFS otwórz stronę Usługi z ikony ustawień na górnym pasku menu.
- Wybierz pozycję + Nowe połączenie z usługą i wybierz typ potrzebnego połączenia usługi.
- Wypełnij parametry połączenia z usługą. Na potrzeby tego samouczka:
- Nadaj połączeniu usługi nazwę arc-demo-acr.
- Wybierz grupę zasobów myResourceGroup .
- Wybierz uprawnienie Udziel dostępu do wszystkich potoków.
- Ta opcja autoryzuje pliki potoków YAML dla połączeń usług.
- Wybierz przycisk OK , aby utworzyć połączenie.
Połączenie ACR do platformy Kubernetes
Włącz klaster Kubernetes w celu ściągania obrazów z usługi ACR. Jeśli jest to prywatne, wymagane będzie uwierzytelnianie.
Połączenie usługi ACR do istniejących klastrów usługi AKS
Zintegruj istniejącą usługę ACR z istniejącymi klastrami usługi AKS przy użyciu następującego polecenia:
az aks update -n arc-cicd-cluster -g myResourceGroup --attach-acr arc-demo-acr
Tworzenie wpisu tajnego ściągania obrazu
Aby połączyć klastry inne niż AKS i lokalne z usługą ACR, utwórz wpis tajny ściągania obrazu. Platforma Kubernetes używa wpisów tajnych ściągania obrazu do przechowywania informacji potrzebnych do uwierzytelniania rejestru.
Utwórz wpis tajny ściągania obrazu za pomocą następującego kubectl
polecenia. Powtórz zarówno dla przestrzeni nazw, jak dev
i stage
.
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<container-registry-name>.azurecr.io \
--docker-username=<service-principal-ID> \
--docker-password=<service-principal-password>
Aby uniknąć konieczności ustawiania obrazuPullSecret dla każdego zasobnika, rozważ dodanie obrazuPullSecret do konta usługi w dev
przestrzeniach nazw i stage
. Aby uzyskać więcej informacji, zobacz samouczek dotyczący platformy Kubernetes.
Tworzenie grup zmiennych środowiskowych
Grupa zmiennych repozytorium aplikacji
Utwórz grupę zmiennych o nazwie az-vote-app-dev. Ustaw następujące wartości:
Zmienna | Wartość |
---|---|
AZ_ACR_NAME | (twoje wystąpienie usługi ACR, na przykład azurearctest.azurecr.io) |
AZURE_SUBSCRIPTION | (twoja Połączenie usługi platformy Azure, która powinna być arc-demo-acr z wcześniejszej wersji samouczka) |
AZURE_VOTE_IMAGE_REPO | Pełna ścieżka do repozytorium aplikacji Azure Vote App, na przykład azurearctest.azurecr.io/azvote |
ENVIRONMENT_NAME | Deweloper |
MANIFESTS_BRANCH | master |
MANIFESTS_FOLDER | azure-vote-manifests |
MANIFESTS_REPO | arc-cicd-demo-gitops |
ORGANIZATION_NAME | Nazwa organizacji usługi Azure DevOps |
PROJECT_NAME | Nazwa projektu GitOps w usłudze Azure DevOps |
REPO_URL | Pełny adres URL repozytorium GitOps |
SRC_FOLDER | azure-vote |
TARGET_CLUSTER | arc-cicd-cluster |
TARGET_NAMESPACE | dev |
Etap grupy zmiennych środowiskowych
- Sklonuj grupę zmiennych az-vote-app-dev .
- Zmień nazwę na az-vote-app-stage.
- Upewnij się, że następujące wartości dla odpowiednich zmiennych:
Zmienna | Wartość |
---|---|
ENVIRONMENT_NAME | Etap |
TARGET_NAMESPACE | stage |
Teraz możesz przystąpić do wdrażania w dev
środowiskach i stage
.
Nadaj więcej uprawnień usłudze kompilacji
Potok ciągłego wdrażania używa tokenu zabezpieczającego uruchomionej kompilacji do uwierzytelniania w repozytorium GitOps. Do utworzenia nowej gałęzi, wypychania zmian i tworzenia żądań ściągnięcia potrzebnych jest więcej uprawnień potoku.
- Przejdź do
Project settings
strony głównej projektu DevOps platformy Azure. - Wybierz opcję
Repositories
. - Wybierz opcję
<GitOps Repo Name>
. - Wybierz opcję
Security
. - W przypadku elementu
<Project Name> Build Service (<Organization Name>)
zezwalaj naContribute
wartości , iContribute to pull requests
Create branch
.
Aby uzyskać więcej informacji, zobacz:
Wdrażanie środowiska deweloperskiego po raz pierwszy
Po utworzeniu potoków ciągłej integracji i ciągłego wdrażania uruchom potok ciągłej integracji, aby wdrożyć aplikację po raz pierwszy.
Potok ciągłej integracji
Podczas początkowego uruchomienia potoku ciągłej integracji może wystąpić błąd autoryzacji zasobów podczas odczytywania nazwy połączenia z usługą.
- Sprawdź, czy uzyskiwany dostęp do zmiennej jest AZURE_SUBSCRIPTION.
- Autoryzowanie użycia.
- Uruchom ponownie potok.
Potok ciągłej integracji:
- Zapewnia, że zmiana aplikacji przechodzi wszystkie zautomatyzowane kontrole jakości wdrożenia.
- Czy nie można ukończyć dodatkowej weryfikacji w potoku żądania ściągnięcia.
- Specyficzny dla usługi GitOps potok publikuje również artefakty dla zatwierdzenia, które zostaną wdrożone przez potok ciągłego wdrażania.
- Sprawdza, czy obraz platformy Docker został zmieniony, a nowy obraz jest wypychany.
Potok ciągłego wdrażania
Podczas początkowego uruchomienia potoku ciągłego wdrażania zostanie wyświetlony monit o udzielenie potokowi dostępu do repozytorium GitOps. Po wyświetleniu monitu wybierz pozycję Wyświetl, aby potok potrzebował uprawnień dostępu do zasobu. Następnie wybierz pozycję Zezwól, aby udzielić uprawnień do używania repozytorium GitOps dla bieżących i przyszłych uruchomień potoku.
Pomyślne uruchomienie potoku ciągłej integracji wyzwala potok ciągłej integracji w celu ukończenia procesu wdrażania. Wdrożysz w każdym środowisku przyrostowo.
Napiwek
Jeśli potok ciągłego wdrażania nie jest wyzwalany automatycznie:
- Sprawdź, czy nazwa jest zgodna z wyzwalaczem gałęzi w
.pipelines/az-vote-cd-pipeline.yaml
- Powinna ona mieć wartość
arc-cicd-demo-src CI
.
- Powinna ona mieć wartość
- Uruchom ponownie potok ciągłej integracji.
Po wygenerowaniu szablonu i manifestu w repozytorium GitOps potok ciągłego wdrażania utworzy zatwierdzenie, wypchnie je i utworzy żądanie ściągnięcia do zatwierdzenia.
Otwórz link żądania ściągnięcia podany w danych wyjściowych
Create PR
zadania.Sprawdź zmiany w repozytorium GitOps. Powinien zostać wyświetlony następujący ekran:
- Zmiany szablonu programu Helm wysokiego poziomu.
- Manifesty platformy Kubernetes niskiego poziomu, które pokazują podstawowe zmiany w żądanym stanie. Flux wdraża te manifesty.
Jeśli wszystko wygląda dobrze, zatwierdź i ukończ żądanie ściągnięcia.
Po kilku minutach platforma Flux pobiera zmianę i uruchamia wdrożenie.
Przekaż port lokalnie przy użyciu polecenia
kubectl
i upewnij się, że aplikacja działa prawidłowo przy użyciu:kubectl port-forward -n dev svc/azure-vote-front 8080:80
Wyświetl aplikację Azure Vote w przeglądarce pod adresem
http://localhost:8080/
.Zagłosuj na ulubione i przygotuj się, aby wprowadzić pewne zmiany w aplikacji.
Konfigurowanie zatwierdzeń środowiska
Podczas wdrażania aplikacji można nie tylko wprowadzać zmiany w kodzie lub szablonach, ale także przypadkowo umieścić klaster w złym stanie.
Jeśli środowisko deweloperskie ujawni przerwę po wdrożeniu, należy zachować możliwość przechodzenia do późniejszych środowisk przy użyciu zatwierdzeń środowiska.
- W projekcie usługi Azure DevOps przejdź do środowiska, które musi być chronione.
- Przejdź do Zatwierdzenia i sprawdź, czy zasób jest sprawdzany.
- Wybierz pozycję Utwórz.
- Podaj osoby zatwierdzające i opcjonalny komunikat.
- Wybierz ponownie pozycję Utwórz , aby ukończyć dodawanie sprawdzania ręcznego zatwierdzania.
Aby uzyskać więcej informacji, zobacz samouczek Definiowanie zatwierdzenia i sprawdzania .
Przy następnym uruchomieniu potoku ciągłego wdrażania potok zostanie wstrzymany po utworzeniu żądania ściągnięcia usługi GitOps. Sprawdź, czy zmiana została prawidłowo zsynchronizowana i przekazuje podstawowe funkcje. Zatwierdź sprawdzanie z potoku, aby umożliwić zmianę przepływu do następnego środowiska.
Wprowadzanie zmian w aplikacji
W przypadku tego zestawu szablonów i manifestów reprezentujących stan klastra wprowadzisz niewielką zmianę w aplikacji.
W repozytorium arc-cicd-demo-src edytuj
azure-vote/src/azure-vote-front/config_file.cfg
plik.Ponieważ "Koty vs Psy" nie otrzymuje wystarczającej liczby głosów, zmień ją na "Tabs vs Spaces", aby zwiększyć liczbę głosów.
Zatwierdź zmianę w nowej gałęzi, wypchnij ją i utwórz żądanie ściągnięcia.
- Jest to typowy przepływ dewelopera, który rozpocznie cykl życia ciągłej integracji/ciągłego wdrażania.
Potok weryfikacji żądania ściągnięcia
Potok żądania ściągnięcia jest pierwszą linią obrony przed wadliwą zmianą. Zwykłe kontrole jakości kodu aplikacji obejmują linting i analizę statyczną. Z perspektywy metodyki GitOps należy również zapewnić tę samą jakość dla wynikowej infrastruktury, która ma zostać wdrożona.
Wykresy Dockerfile i Helm aplikacji mogą używać lintingu w podobny sposób do aplikacji.
Błędy występujące podczas lintingu wahają się od:
- Niepoprawnie sformatowane pliki YAML do
- Sugestie dotyczące najlepszych rozwiązań, takie jak ustawianie limitów procesora CPU i pamięci dla aplikacji.
Uwaga
Aby uzyskać najlepsze pokrycie z linting programu Helm w rzeczywistej aplikacji, należy zastąpić wartości, które są w rozsądnie podobne do tych używanych w rzeczywistym środowisku.
Błędy znalezione podczas wykonywania potoku są wyświetlane w sekcji wyników testu przebiegu. W tym miejscu możesz:
- Śledź przydatne statystyki dotyczące typów błędów.
- Znajdź pierwsze zatwierdzenie, na którym zostały wykryte.
- Styl śledzenia stosu łączy się z sekcjami kodu, które spowodowały błąd.
Po zakończeniu przebiegu potoku masz pewność, że jakość kodu aplikacji i szablonu, który go wdroży. Teraz możesz zatwierdzić i ukończyć żądanie ściągnięcia. Ciągła integracja zostanie uruchomiona ponownie, ponownie wygenerując szablony i manifesty przed wyzwoleniem potoku ciągłego wdrażania.
Napiwek
W rzeczywistym środowisku nie zapomnij ustawić zasad gałęzi w celu zapewnienia, że żądanie ściągnięcia przejdzie testy jakości. Aby uzyskać więcej informacji, zobacz artykuł Ustawianie zasad gałęzi.
Zatwierdzenia procesów ciągłego wdrażania
Pomyślne uruchomienie potoku ciągłej integracji wyzwala potok ciągłej integracji w celu ukończenia procesu wdrażania. Podobnie jak w przypadku pierwszego potoku ciągłego wdrażania, wdrożysz je w każdym środowisku przyrostowo. Tym razem potok wymaga zatwierdzenia każdego środowiska wdrażania.
- Zatwierdź wdrożenie w
dev
środowisku. - Po wygenerowaniu szablonu i manifestu w repozytorium GitOps potok ciągłego wdrażania utworzy zatwierdzenie, wypchnie je i utworzy żądanie ściągnięcia do zatwierdzenia.
- Otwórz link żądania ściągnięcia podany w zadaniu.
- Sprawdź zmiany w repozytorium GitOps. Powinny zostać wyświetlone następujące informacje:
- Zmiany szablonu programu Helm wysokiego poziomu.
- Manifesty platformy Kubernetes niskiego poziomu, które pokazują podstawowe zmiany w żądanym stanie.
- Jeśli wszystko wygląda dobrze, zatwierdź i ukończ żądanie ściągnięcia.
- Zaczekaj na zakończenie wdrażania.
- Jako podstawowy test weryfikacyjny kompilacji przejdź do strony aplikacji i sprawdź, czy aplikacja do głosowania wyświetla teraz karty a miejsca.
- Przekaż port lokalnie przy użyciu polecenia
kubectl
i upewnij się, że aplikacja działa prawidłowo przy użyciu:kubectl port-forward -n dev svc/azure-vote-front 8080:80
- Wyświetl aplikację Azure Vote w przeglądarce pod adresem http://localhost:8080/ i sprawdź, czy opcje głosowania zostały zmienione na karty a miejsca.
- Przekaż port lokalnie przy użyciu polecenia
- Powtórz kroki 1–7 dla
stage
środowiska.
Wdrożenie zostało ukończone. Spowoduje to zakończenie przepływu pracy ciągłej integracji/ciągłego wdrażania.
Czyszczenie zasobów
Jeśli nie zamierzasz nadal korzystać z tej aplikacji, usuń wszystkie zasoby, wykonując następujące czynności:
Usuń połączenie konfiguracji usługi GitOps usługi Azure Arc:
az k8s-configuration delete \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ --cluster-type connectedClusters
dev
Usuń przestrzeń nazw:kubectl delete namespace dev
stage
Usuń przestrzeń nazw:kubectl delete namespace stage
Następne kroki
W tym samouczku skonfigurowaliśmy pełny przepływ pracy ciągłej integracji/ciągłego wdrażania, który implementuje metodykę DevOps z tworzenia aplikacji za pośrednictwem wdrożenia. Zmiany w aplikacji automatycznie wyzwalają walidację i wdrażanie, za pomocą ręcznych zatwierdzeń.
Przejdź do naszego artykułu koncepcyjnego, aby dowiedzieć się więcej na temat metodyki GitOps i konfiguracji za pomocą platformy Kubernetes z obsługą usługi Azure Arc.