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 a stage 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. Screenshot that shows an example of Try It for Azure Cloud Shell.
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. Button to launch Azure Cloud Shell.
Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. Screenshot that shows the Cloud Shell button in the Azure portal

Použití Azure Cloud Shellu:

  1. Spusťte Cloud Shell.

  2. Výběrem tlačítka Kopírovat v bloku kódu (nebo bloku příkazů) zkopírujte kód nebo příkaz.

  3. 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.

  4. 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:

  • 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ě:

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.

  1. 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'
    
  2. 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ýt alice@ odebráno. Určuje --https-user místo toho uživatele, například --https-user alice.

  3. Zkontrolujte stav nasazení na webu Azure Portal.

    • V případě úspěchu uvidíte v clusteru vytvořené obory dev názvů i stage obory názvů.

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:

  1. 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.
  2. Zvolte + Nové připojení služby a vyberte typ připojení služby, které potřebujete.
  3. 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 .
  4. 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.
  5. 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

  1. Naklonujte skupinu proměnných az-vote-app-dev .
  2. Změňte název na az-vote-app-stage.
  3. 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í.

  1. Přejděte na Project settings hlavní stránku projektu Azure DevOps.
  2. Vyberte možnost Repositories.
  3. Vyberte možnost <GitOps Repo Name>.
  4. Vyberte možnost Security.
  5. <Project Name> Build Service (<Organization Name>)Pro , povolit Contribute, Contribute to pull requestsa Create 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ů.

  1. Ověřte, že je proměnná, ke které se přistupuje, AZURE_SUBSCRIPTION.
  2. Autorizuje použití.
  3. 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:

  1. 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.
  2. 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í.

  1. Otevřete odkaz žádosti o přijetí změn zadaný ve výstupu Create PR úkolu.

  2. 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.
  3. Pokud všechno vypadá dobře, schvalte a dokončete žádost o přijetí změn.

  4. Po několika minutách flux změnu převezme a spustí nasazení.

  5. 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

  6. Zobrazte aplikaci Azure Vote v prohlížeči na adrese http://localhost:8080/.

  7. 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í.

  1. V projektu Azure DevOps přejděte do prostředí, které je potřeba chránit.
  2. Přejděte na Schválení a Zkontrolujte prostředek.
  3. Vyberte Vytvořit.
  4. Zadejte schvalovatele a volitelnou zprávu.
  5. 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.

  1. V úložišti arc-cicd-demo-src upravte azure-vote/src/azure-vote-front/config_file.cfg soubor.

  2. 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.

  3. 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í.

  1. Schvalte nasazení do dev prostředí.
  2. 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í.
  3. Otevřete odkaz žádosti o přijetí změn zadaný v úkolu.
  4. 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.
  5. Pokud všechno vypadá dobře, schvalte a dokončete žádost o přijetí změn.
  6. Počkejte, až se nasazení dokončí.
  7. 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.
  8. 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:

  1. 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
    
  2. dev Odeberte obor názvů:

    • kubectl delete namespace dev
  3. 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.