Kurz: Implementace CI/CD s GitOps pomocí clusterů Kubernetes s podporou Azure Arc
Důležité
Tento kurz používá GitOps s Flux v1. GitOps s flux v2 je teď k dispozici pro clustery Kubernetes s podporou Azure Arc a Azure Kubernetes Service (AKS). Přejděte do kurzu, který používá GitOps s Flux v2. Doporučujeme migrovat na Flux v2 co nejdříve.
Podpora prostředků konfigurace clusteru založených na flux v1 vytvořených před 1. lednem 2024 skončí 24. května 2025. Od 1. ledna 2024 nebudete moct vytvářet nové prostředky konfigurace clusteru založené na fluxu v1.
V tomto kurzu nastavíte řešení CI/CD pomocí GitOps s clustery Kubernetes s podporou Azure Arc. Pomocí ukázkové aplikace Azure Vote provedete následující:
- Vytvořte cluster Kubernetes s podporou Azure Arc.
- Připojení vaše aplikace a úložiště GitOps do Azure Repos.
- Import kanálů CI/CD
- Připojení azure Container Registry (ACR) do Azure DevOps a Kubernetes.
- Vytvořte skupiny proměnných prostředí.
- Nasaďte prostředí
dev
astage
prostředí. - Otestujte aplikační prostředí.
Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Azure Cloud Shell
Azure hostí interaktivní prostředí Azure Cloud Shell, které můžete používat v prohlížeči. Pro práci se službami Azure můžete v prostředí Cloud Shell použít buď Bash, nebo PowerShell. Předinstalované příkazy Cloud Shellu můžete použít ke spuštění kódu v tomto článku, aniž byste museli instalovat cokoli do místního prostředí.
Spuštění služby Azure Cloud Shell:
Možnost | Příklad nebo odkaz |
---|---|
Vyberte Vyzkoušet v pravém horním rohu bloku kódu nebo příkazu. Výběrem možnosti Vyzkoušet se kód ani příkaz automaticky nekopíruje do Cloud Shellu. | |
Přejděte na adresu https://shell.azure.com nebo výběrem tlačítka Spustit Cloud Shell otevřete Cloud Shell v prohlížeči. | |
Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. |
Použití Azure Cloud Shellu:
Spusťte Cloud Shell.
Výběrem tlačítka Kopírovat v bloku kódu (nebo bloku příkazů) zkopírujte kód nebo příkaz.
Vložte kód nebo příkaz do relace Cloud Shellu tak, že ve Windows a Linuxu vyberete ctrl+Shift+V nebo vyberete Cmd+Shift+V v macOS.
Stisknutím klávesy Enter spusťte kód nebo příkaz.
Než začnete
V tomto kurzu se předpokládá znalost Azure DevOps, Azure Repos a Pipelines a Azure CLI.
Přihlaste se ke službě Azure DevOps Services.
V předchozím kurzu se dozvíte, jak nasadit GitOps pro prostředí CI/CD.
Seznamte se s výhodami a architekturou této funkce.
Ověřte, že máte:
- Připojený cluster Kubernetes s podporou Azure Arc s názvem arc-cicd-cluster.
- Připojená služba Azure Container Registry (ACR) s integrací AKS nebo bez ověřování clusteru AKS.
- Oprávnění Sestavení Správa a Project Správa pro Azure Repos a Azure Pipelines
Nainstalujte následující rozšíření Rozhraní příkazového řádku Kubernetes s podporou Azure Arc verze >= 1.0.0:
az extension add --name connectedk8s az extension add --name k8s-configuration
Pokud chcete tato rozšíření aktualizovat na nejnovější verzi, spusťte následující příkazy:
az extension update --name connectedk8s az extension update --name k8s-configuration
Import aplikací a úložišť GitOps do Azure Repos
Importujte úložiště aplikací a úložiště GitOps do Azure Repos. Pro účely tohoto kurzu použijte následující ukázková úložiště:
- úložiště aplikace arc-cicd-demo-src
- URL: https://github.com/Azure/arc-cicd-demo-src
- Obsahuje příklad aplikace Azure Vote, kterou nasadíte pomocí GitOps.
- úložiště GitOps arc-cicd-demo-gitops
- URL: https://github.com/Azure/arc-cicd-demo-gitops
- Funguje jako základ pro prostředky clusteru, které jsou součástí aplikace Azure Vote.
Přečtěte si další informace o importu úložišť Git.
Poznámka:
Import a použití dvou samostatných úložišť pro aplikace a úložiště GitOps může zlepšit zabezpečení a jednoduchost. Oprávnění a viditelnost úložiště GitOps aplikace a GitOps je možné ladit jednotlivě. Správce clusteru například nemusí najít změny v kódu aplikace, které jsou relevantní pro požadovaný stav clusteru. Vývojář aplikací naopak nemusí znát konkrétní parametry pro každé prostředí – sada testovacích hodnot, které poskytují pokrytí parametrů, může být dostačující.
Připojení úložiště GitOps
Pokud chcete aplikaci průběžně nasazovat, připojte úložiště aplikace ke clusteru pomocí GitOps. Úložiště GitOps arc-cicd-demo-gitops obsahuje základní prostředky pro zprovoznění aplikace v clusteru arc-cicd-cluster .
Počáteční úložiště GitOps obsahuje pouze manifest , který vytvoří obory názvů pro vývoj a fázi odpovídající prostředím nasazení.
Připojení GitOps, které vytvoříte, automaticky:
- Synchronizujte manifesty v adresáři manifestu.
- Aktualizujte stav clusteru.
Pracovní postup CI/CD naplní adresář manifestu dalšími manifesty pro nasazení aplikace.
Vytvořte nové připojení GitOps k nově importovanému úložišti arc-cicd-demo-gitops v 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'
Zajistěte, aby flux jako základní cestu používal
arc-cicd-cluster/manifests
pouze adresář. Definujte cestu pomocí následujícího parametru operátoru:--git-path=arc-cicd-cluster/manifests
Poznámka:
Pokud používáte připojovací řetězec HTTPS a máte problémy s připojením, ujistěte se, že v adrese URL vynecháte předponu uživatelského jména. Například
https://alice@dev.azure.com/contoso/project/_git/arc-cicd-demo-gitops
musí býtalice@
odebráno. Určuje--https-user
místo toho uživatele, například--https-user alice
.Zkontrolujte stav nasazení na webu Azure Portal.
- V případě úspěchu uvidíte v clusteru vytvořené obory
dev
názvů istage
obory názvů.
- V případě úspěchu uvidíte v clusteru vytvořené obory
Import kanálů CI/CD
Teď, když jste synchronizovali připojení GitOps, budete muset importovat kanály CI/CD, které vytvářejí manifesty.
Úložiště aplikace obsahuje .pipeline
složku s kanály, které budete používat pro žádosti o přijetí změn, CI a CD. Naimportujte a přejmenujte tři kanály, které jsou k dispozici v ukázkovém úložišti:
Název souboru kanálu | Popis |
---|---|
.pipelines/az-vote-pr-pipeline.yaml |
Kanál žádosti o přijetí změn aplikace s názvem arc-cicd-demo-src PR |
.pipelines/az-vote-ci-pipeline.yaml |
Kanál CI aplikace s názvem arc-cicd-demo-src CI |
.pipelines/az-vote-cd-pipeline.yaml |
Kanál CD aplikace s názvem arc-cicd-demo-src CD |
Připojení ACR
Kanály i cluster budou využívat ACR k ukládání a načítání imagí Dockeru.
Připojení ACR do Azure DevOps
Během procesu CI nasadíte kontejnery aplikací do registru. Začněte vytvořením připojení služby Azure:
- V Azure DevOps otevřete stránku připojení služby ze stránky nastavení projektu. V sadě TFS otevřete stránku Služby z ikony nastavení v horním řádku nabídek.
- Zvolte + Nové připojení služby a vyberte typ připojení služby, které potřebujete.
- Vyplňte parametry připojení služby. Pro účely tohoto kurzu:
- Pojmenujte připojení služby arc-demo-acr.
- Jako skupinu prostředků vyberte myResourceGroup .
- Vyberte oprávnění Udělit přístup všem kanálům.
- Tato možnost autorizuje soubory kanálů YAML pro připojení služeb.
- Pokud chcete vytvořit připojení, zvolte OK .
Připojení ACR do Kubernetes
Povolte cluster Kubernetes načítat image z ACR. Pokud je privátní, bude se vyžadovat ověřování.
Připojení ACR do existujících clusterů AKS
Pomocí následujícího příkazu integrujte existující službu ACR se stávajícími clustery AKS:
az aks update -n arc-cicd-cluster -g myResourceGroup --attach-acr arc-demo-acr
Vytvoření tajného kódu pro vyžádání image
Pokud chcete k ACR připojit jiné clustery než AKS a místní clustery, vytvořte tajný klíč pro vyžádání image. Kubernetes používá tajné kódy pro vyžádání image k ukládání informací potřebných k ověření vašeho registru.
Vytvořte tajný kód pro vyžádání image pomocí následujícího kubectl
příkazu. Opakujte pro obory dev
názvů i stage
obory názvů.
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>
Pokud se chcete vyhnout nastavení imagePullSecret pro každý pod, zvažte přidání imagePullSecret do účtu služby v dev
oborech názvů a stage
obory názvů. Další informace najdete v kurzu Kubernetes.
Vytvoření skupin proměnných prostředí
Skupina proměnných úložiště aplikací
Vytvořte skupinu proměnných s názvem az-vote-app-dev. Nastavte následující hodnoty:
Proměnná | Hodnota |
---|---|
AZ_ACR_NAME | (například vaše instance ACR. azurearctest.azurecr.io) |
AZURE_SUBSCRIPTION | (vaše Připojení služby Azure, což by mělo být arc-demo-acr z dřívějšího kurzu) |
AZURE_VOTE_IMAGE_REPO | Úplná cesta k úložišti aplikace Azure Vote, například azurearctest.azurecr.io/azvote |
ENVIRONMENT_NAME | Vývoj |
MANIFESTS_BRANCH | master |
MANIFESTS_FOLDER | azure-vote-manifests |
MANIFESTS_REPO | arc-cicd-demo-gitops |
ORGANIZATION_NAME | Název organizace Azure DevOps |
PROJECT_NAME | Název projektu GitOps v Azure DevOps |
REPO_URL | Úplná adresa URL úložiště GitOps |
SRC_FOLDER | azure-vote |
TARGET_CLUSTER | arc-cicd-cluster |
TARGET_NAMESPACE | dev |
Skupina proměnných prostředí fáze
- Naklonujte skupinu proměnných az-vote-app-dev .
- Změňte název na az-vote-app-stage.
- Ujistěte se, že pro odpovídající proměnné platí následující hodnoty:
Proměnná | Hodnota |
---|---|
ENVIRONMENT_NAME | Fáze |
TARGET_NAMESPACE | stage |
Teď jste připraveni k nasazení do dev
prostředí a stage
prostředí.
Udělení dalších oprávnění službě sestavení
Kanál CD používá token zabezpečení spuštěného sestavení k ověření v úložišti GitOps. Aby kanál vytvořil novou větev, odeslal změny a vytvořil žádosti o přijetí změn, potřebuje další oprávnění.
- Přejděte na
Project settings
hlavní stránku projektu Azure DevOps. - Vyberte možnost
Repositories
. - Vyberte možnost
<GitOps Repo Name>
. - Vyberte možnost
Security
. <Project Name> Build Service (<Organization Name>)
Pro , povolitContribute
,Contribute to pull requests
aCreate branch
.
Další informace naleznete v tématu:
První nasazení vývojového prostředí
Když jsou vytvořené kanály CI a CD, spusťte kanál CI a nasaďte aplikaci poprvé.
Kanál CI
Během počátečního spuštění kanálu CI se může při čtení názvu připojení služby zobrazit chyba autorizace prostředků.
- Ověřte, že je proměnná, ke které se přistupuje, AZURE_SUBSCRIPTION.
- Autorizuje použití.
- Znovu spusťte kanál.
Kanál CI:
- Zajišťuje, že změna aplikace projde všemi automatizovanými kontrolami kvality nasazení.
- Provede jakékoli dodatečné ověření, které se nepodařilo dokončit v kanálu žádosti o přijetí změn.
- Kanál také publikuje artefakty pro potvrzení, které bude kanál CD nasazovat, konkrétně pro GitOps.
- Ověří, že se image Dockeru změnila a nová image se nasdílí.
Kanál CD
Během počátečního spuštění kanálu CD se zobrazí výzva, abyste kanálu poskytli přístup k úložišti GitOps. Po zobrazení výzvy vyberte Zobrazit, že kanál potřebuje oprávnění pro přístup k prostředku. Pak vyberte Povolit udělit oprávnění k používání úložiště GitOps pro aktuální a budoucí spuštění kanálu.
Úspěšné spuštění kanálu CI aktivuje kanál CD, aby se dokončil proces nasazení. Postupně nasadíte do každého prostředí.
Tip
Pokud se kanál CD neaktivuje automaticky:
- Ověřte, že název odpovídá triggeru větve v
.pipelines/az-vote-cd-pipeline.yaml
- Měla by mít hodnotu
arc-cicd-demo-src CI
.
- Měla by mít hodnotu
- Znovu spusťte kanál CI.
Po vygenerování šablony a manifestu v úložišti GitOps kanál CD vytvoří potvrzení, nasdílí ho a vytvoří žádost o přijetí změn ke schválení.
Otevřete odkaz žádosti o přijetí změn zadaný ve výstupu
Create PR
úkolu.Ověřte změny v úložišti GitOps. Měli byste vidět tohle:
- Změny šablony Helm vysoké úrovně
- Manifesty Kubernetes nízké úrovně, které zobrazují základní změny požadovaného stavu. Flux nasadí tyto manifesty.
Pokud všechno vypadá dobře, schvalte a dokončete žádost o přijetí změn.
Po několika minutách flux změnu převezme a spustí nasazení.
Přesměrujte port místně pomocí
kubectl
aplikace a ujistěte se, že aplikace funguje správně pomocí:kubectl port-forward -n dev svc/azure-vote-front 8080:80
Zobrazte aplikaci Azure Vote v prohlížeči na adrese
http://localhost:8080/
.Hlasujte pro své oblíbené položky a připravte se na provedení některých změn v aplikaci.
Nastavení schválení prostředí
Při nasazení aplikace můžete nejen provádět změny kódu nebo šablon, ale také neúmyslně umístit cluster do špatného stavu.
Pokud vývojové prostředí odhalí přerušení po nasazení, zachovejte ho v pozdějších prostředích pomocí schválení prostředí.
- V projektu Azure DevOps přejděte do prostředí, které je potřeba chránit.
- Přejděte na Schválení a Zkontrolujte prostředek.
- Vyberte Vytvořit.
- Zadejte schvalovatele a volitelnou zprávu.
- Dalším výběrem možnosti Vytvořit dokončíte přidání kontroly ručního schvalování.
Další podrobnosti najdete v kurzu Definování schválení a kontrol .
Při příštím spuštění kanálu CD se kanál pozastaví po vytvoření žádosti o přijetí změn GitOps. Ověřte, že se změna správně synchronizovala, a předá základní funkce. Schválením kontroly z kanálu umožníte toku změn do dalšího prostředí.
Provedení změny aplikace
Pomocí této základní sady šablon a manifestů představujících stav v clusteru provedete malou změnu aplikace.
V úložišti arc-cicd-demo-src upravte
azure-vote/src/azure-vote-front/config_file.cfg
soubor.Vzhledem k tomu, že "Kočky vs psi" nedostává dostatek hlasů, změňte ho na "Tabs vs Spaces", aby se počet hlasů zvýšit.
Potvrďte změnu v nové větvi, nasdílejte ji a vytvořte žádost o přijetí změn.
- Toto je typický vývojářský tok, který zahájí životní cyklus CI/CD.
Kanál ověření žádosti o přijetí změn
Kanál žádosti o přijetí změn je první linie obrany proti vadné změně. Běžné kontroly kvality kódu aplikace zahrnují lintování a statickou analýzu. Z pohledu GitOps musíte také zajistit stejnou kvalitu výsledné infrastruktury, která se má nasadit.
Grafy Dockerfile a Helm aplikace můžou podobně jako aplikace používat lintování.
Chyby zjištěné během lintování rozsahu od:
- Nesprávně formátované soubory YAML do
- Návrhy osvědčených postupů, například nastavení limitů procesoru a paměti pro vaši aplikaci
Poznámka:
Pokud chcete dosáhnout nejlepšího pokrytí z lintování Helmu v reálné aplikaci, budete muset nahradit hodnoty, které jsou přiměřeně podobné těm, které se používají ve skutečném prostředí.
Chyby zjištěné během provádění kanálu se zobrazí v části výsledků testu spuštění. Zde můžete:
- Sledujte užitečné statistiky o typech chyb.
- Najděte první potvrzení, u kterého byly zjištěny.
- Odkazy na styl trasování zásobníku na oddíly kódu, které způsobily chybu.
Po dokončení spuštění kanálu jste si zajistili kvalitu kódu aplikace a šablony, která ho nasadí. Nyní můžete žádost o přijetí změn schválit a dokončit. CI se spustí znovu a znovu vygeneruje šablony a manifesty před aktivací kanálu CD.
Tip
Ve skutečném prostředí nezapomeňte nastavit zásady větví, abyste zajistili, že žádost o přijetí změn projde kontrolou kvality. Další informace najdete v článku Nastavení zásad větví.
Schválení procesů CD
Úspěšné spuštění kanálu CI aktivuje kanál CD, aby se dokončil proces nasazení. Podobně jako při prvním spuštění kanálu CD nasadíte do každého prostředí přírůstkově. Tentokrát kanál vyžaduje, abyste schválili každé prostředí nasazení.
- Schvalte nasazení do
dev
prostředí. - Po vygenerování šablony a manifestu v úložišti GitOps kanál CD vytvoří potvrzení, nasdílí ho a vytvoří žádost o přijetí změn ke schválení.
- Otevřete odkaz žádosti o přijetí změn zadaný v úkolu.
- Ověřte změny v úložišti GitOps. Měli byste vidět:
- Změny šablony Helm vysoké úrovně
- Manifesty Kubernetes nízké úrovně, které zobrazují základní změny požadovaného stavu.
- Pokud všechno vypadá dobře, schvalte a dokončete žádost o přijetí změn.
- Počkejte, až se nasazení dokončí.
- Jako základní orientační test přejděte na stránku aplikace a ověřte, že hlasovací aplikace teď zobrazuje tabulátory a mezery.
- Přesměrujte port místně pomocí
kubectl
aplikace a ujistěte se, že aplikace funguje správně pomocí:kubectl port-forward -n dev svc/azure-vote-front 8080:80
- Prohlédněte si aplikaci Azure Vote v prohlížeči http://localhost:8080/ a ověřte, že se možnosti hlasování změnily na Karty a Mezery.
- Přesměrujte port místně pomocí
- Opakujte kroky 1 až 7 pro
stage
prostředí.
Vaše nasazení je teď hotové. Tím se ukončí pracovní postup CI/CD.
Vyčištění prostředků
Pokud nebudete tuto aplikaci dál používat, odstraňte všechny prostředky pomocí následujícího postupu:
Odstraňte připojení konfigurace GitOps služby Azure Arc:
az k8s-configuration delete \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ --cluster-type connectedClusters
dev
Odeberte obor názvů:kubectl delete namespace dev
stage
Odeberte obor názvů:kubectl delete namespace stage
Další kroky
V tomto kurzu jste nastavili úplný pracovní postup CI/CD, který implementuje DevOps z vývoje aplikací prostřednictvím nasazení. Změny aplikace automaticky aktivují ověřování a nasazení, které jsou vyměněny ručními schváleními.
V našem koncepčním článku se dozvíte více o GitOps a konfiguracích s využitím Kubernetes s podporou Azure Arc.