Pracovní postup CI/CD s využitím GitOps (Flux v2)
Moderní nasazení Kubernetes obsahují více aplikací, clusterů a prostředí. Pomocí GitOps můžete snadněji spravovat tato složitá nastavení a sledovat požadovaný stav prostředí Kubernetes deklarativně pomocí Gitu. Pomocí běžných nástrojů Gitu můžete deklarovat stav clusteru, zvýšit odpovědnost, usnadnit šetření chyb a umožnit automatizaci pro správu prostředí.
Tento článek popisuje, jak GitOps zapadá do celého životního cyklu změn aplikací pomocí Azure Arc, Azure Repos a Azure Pipelines. Poskytuje také příklad jedné změny aplikace na prostředí Kubernetes řízená GitOps.
Architektura
Tento diagram znázorňuje pracovní postup CI/CD pro aplikaci nasazenou do jednoho nebo více prostředí Kubernetes.
Úložiště kódu aplikace
Úložiště aplikací obsahuje kód aplikace, na který vývojáři pracují během vnitřní smyčky. Šablony nasazení aplikace jsou v tomto úložišti v obecné podobě, například Helm nebo Kustomize. Hodnoty specifické pro prostředí se v úložišti neukládají.
Změny v tomto úložišti vyvolávají kanál ŽÁDOSTI o přijetí změn nebo CI, který spouští proces nasazení.
Registr kontejneru
Registr kontejneru obsahuje všechny image první a třetí strany používané v prostředích Kubernetes. Image aplikací první strany jsou označené značkami, které jsou čitelné pro člověka, a potvrzení Gitu použité k sestavení image. Image třetích stran se můžou ukládat do mezipaměti, aby pomohly se zabezpečením, rychlostí a odolností. Nastavte plán pro včasné testování a integraci aktualizací zabezpečení.
Další informace najdete v tématu Jak využívat a udržovat veřejný obsah pomocí úloh služby Azure Container Registry.
Kanál žádosti o přijetí změn
Žádosti o přijetí změn od vývojářů provedených v úložišti aplikací se zasunou při úspěšném spuštění kanálu žádosti o přijetí změn. Tento kanál spouští základní brány kvality, jako je lintování a testy jednotek v kódu aplikace. Kanál testuje aplikaci a lints Dockerfiles a šablony Helm používané k nasazení do prostředí Kubernetes. Image Dockeru by se měly sestavit a testovat, ale neměly by se nasdílet. Ponechte dobu trvání kanálu relativně krátkou, aby byla povolena rychlá iterace.
Kanál CI
Kanál CI aplikace spouští všechny kroky kanálu žádosti o přijetí změn a rozšiřuje kontroly testování a nasazení. Kanál je možné spustit pro každé potvrzení do hlavního stavu nebo může běžet v pravidelném tempu se skupinou potvrzení.
V této fázi je možné provádět testy aplikací, které jsou pro kanál žádosti o přijetí změn příliš náročné, včetně těchto:
- Odesílání imagí do registru kontejneru
- Vytváření, lintování a testování obrázků
- Generování nezpracovaných souborů YAML šablon
Na konci sestavení CI se vygenerují artefakty. Tyto artefakty je možné použít v kroku CD ke zpracování při přípravě na nasazení.
Rozšíření clusteru Flux
Flux je agent, který běží v každém clusteru jako rozšíření clusteru. Toto rozšíření clusteru Flux zodpovídá za udržování požadovaného stavu. Agent se dotazuje úložiště GitOps v uživatelem definovaném intervalu a pak odsouhlasí stav clusteru se stavem deklarovaným v úložišti Git.
Další informace najdete v tématu Kurz: Nasazení aplikací pomocí GitOps s flux v2.
Kanál CD
Kanál CD se automaticky aktivuje úspěšnými sestaveními CI. V tomto prostředí kanálu se hodnoty specifické pro prostředí nahradí dříve publikovanými šablonami a v úložišti GitOps se vytvoří nová žádost o přijetí změn s těmito hodnotami. Tato žádost o přijetí změn obsahuje navrhované změny požadovaného stavu jednoho nebo více clusterů Kubernetes. Správci clusteru kontrolují žádost o přijetí změn a schvalují sloučení do úložiště GitOps. Kanál čeká na sloučení žádosti o přijetí změn, po které flux synchronizuje a použije změny stavu.
Úložiště GitOps
Úložiště GitOps představuje aktuální požadovaný stav všech prostředí napříč clustery. Všechny změny v tomto úložišti přebírá služba Flux v každém clusteru a nasadí se. Změny požadovaného stavu clusterů se zobrazí jako žádosti o přijetí změn, které se pak zkontrolují a nakonec se sloučí po schválení změn. Tyto žádosti o přijetí změn obsahují změny šablon nasazení a výsledné vykreslené manifesty Kubernetes. Vykreslené manifesty nízké úrovně umožňují pečlivější kontrolu změn, které obvykle nevidíte na úrovni šablony.
Konektor GitOps
Konektor GitOps vytvoří připojení mezi agentem Flux a kanálem úložiště GitOps/CD. Když se změny použijí v clusteru, Flux upozorní konektor GitOps na všechny provedené změny fáze a kontrolu stavu. Tato komponenta slouží jako adaptér. Rozumí tomu, jak komunikovat s úložištěm Git a aktualizuje stav potvrzení Gitu, aby průběh synchronizace byl viditelný v úložišti GitOps. Po dokončení nasazení (bez ohledu na to, jestli je úspěšné nebo neúspěšné), konektor upozorní kanál CD, aby mohl pokračovat, aby kanál mohl provádět aktivity po nasazení, jako je testování integrace.
Clustery Kubernetes
Alespoň jeden cluster Kubernetes s podporou Azure Arc nebo Azure Kubernetes Service (AKS) obsluhuje různá prostředí potřebná aplikací. Jeden cluster může například sloužit prostředí pro vývoj i kontrolu kvality prostřednictvím různých oborů názvů. Druhý cluster může poskytovat snadnější oddělení prostředí a jemněji odstupňované řízení.
Ukázkový pracovní postup
Jako vývojář aplikací Alice:
- Zapíše kód aplikace.
- Určuje způsob spuštění aplikace v kontejneru Dockeru.
- Definuje šablony, které spouští kontejner a závislé služby v clusteru Kubernetes.
Alice chce zajistit, aby aplikace mohla běžet ve více prostředích, ale nezná konkrétní nastavení pro každé prostředí.
Předpokládejme, že Alice chce provést změnu aplikace, která změní image Dockeru použitou v šabloně nasazení aplikace.
Alice změní šablonu nasazení, odešle ji do vzdálené větve volané
alice
v úložišti aplikace a otevře žádost o přijetí změn ke kontrole vemain
větvi.Alice požádá svůj tým, aby změnu zkontroloval.
- Kanál žádosti o přijetí změn spouští ověření.
- Po úspěšném spuštění kanálu žádosti o přijetí změn a schválení týmu se tato změna sloučí.
Kanál CI se pak spustí a ověří změnu Alice a úspěšně se dokončí.
- Změna je bezpečná pro nasazení do clusteru a artefakty se ukládají do spuštění kanálu CI.
Úspěšné spuštění kanálu CI aktivuje kanál CD.
- Kanál CD vybere artefakty uložené spuštěním kanálu CI Alice.
- Kanál CD nahradí šablony hodnotami specifickými pro prostředí a připraví všechny změny proti existujícímu stavu clusteru v úložišti GitOps.
- Kanál CD vytvoří žádost o přijetí změn v produkční větvi úložiště GitOps s požadovanými změnami stavu clusteru.
Alice tým zkontroluje a schválí žádost o přijetí změn.
- Změna se sloučí do cílové větve odpovídající prostředí.
Během několika minut si Flux všimne změny v úložišti GitOps a načítá změnu Alice.
- Kvůli změně image Dockeru vyžaduje pod aplikace aktualizaci.
- Flux použije změnu v clusteru.
- Flux hlásí stav nasazení zpět do úložiště GitOps prostřednictvím konektoru GitOps.
Kanál CD spouští automatizované testy pro ověření úspěšného dokončení nového nasazení a funguje podle očekávání.
Poznámka:
V případě dalších prostředí cílených na nasazení kanál CD iteruje vytvořením žádosti o přijetí změn pro další prostředí a zopakuje kroky 4 až 7. Proces, který mnoho vyžaduje dodatečné schválení pro riziková nasazení nebo prostředí, například změnu související se zabezpečením nebo produkční prostředí.
Když všechna prostředí obdržela úspěšná nasazení, kanál se dokončí.
Další kroky
- Projděte si náš kurz implementace CI/CD s GitOps.
- Přečtěte si o vytváření připojení mezi clusterem a úložištěm Git pomocí konfigurací Flux.