Sestavení a nasazení do služby Azure Kubernetes Service s využitím Azure Pipelines

Služby Azure DevOps

Azure Pipelines můžete použít k automatickému nasazení do služby Azure Kubernetes Service (AKS). Azure Pipelines umožňuje sestavovat, testovat a nasazovat s využitím kontinuální integrace (CI) a průběžného doručování (CD) pomocí Azure DevOps.

V tomto článku se dozvíte, jak vytvořit kanál, který průběžně sestavuje a nasazuje vaši aplikaci. Při každé změně kódu v úložišti, které obsahuje soubor Dockerfile, se image nasdílí do služby Azure Container Registry a manifesty se pak nasadí do clusteru AKS.

Požadavky

Získání kódu

Vytvořte fork následujícího úložiště obsahující ukázkovou aplikaci a soubor Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Vytvoření prostředků Azure

Přihlaste se k webu Azure Portal a pak vyberte tlačítko Cloud Shell v pravém horním rohu. K vytvoření clusteru AKS použijte Azure CLI nebo PowerShell.

Vytvoření registru kontejneru

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys

Přihlášení ke službě Azure Pipelines

Přihlaste se ke službě Azure Pipelines. Po přihlášení přejde váš prohlížeč na https://dev.azure.com/my-organization-name řídicí panel Azure DevOps a zobrazí ho.

Ve vybrané organizaci vytvořte projekt. Pokud ve vaší organizaci nemáte žádné projekty, zobrazí se obrazovka Vytvořit projekt, který vám umožní začít . V opačném případě vyberte tlačítko Vytvořit projekt v pravém horním rohu řídicího panelu.

Vytvoření kanálu

Připojení a vyberte úložiště.

  1. Přihlaste se ke své organizaci Azure DevOps a přejděte do svého projektu.

  2. Přejděte na Kanály a pak vyberte Nový kanál.

  3. Kroky průvodce proveďte tak, že nejprve vyberete GitHub jako umístění zdrojového kódu.

  4. Můžete být přesměrováni na GitHub kvůli přihlášení. Pokud ano, zadejte svoje přihlašovací údaje GitHubu.

  5. Až se zobrazí seznam úložišť, vyberte úložiště.

  6. K instalaci aplikace Azure Pipelines můžete být přesměrováni na GitHub. Pokud ano, vyberte Schválit a nainstalovat.

  7. Vyberte Nasadit do služby Azure Kubernetes Service.

  8. Pokud se zobrazí výzva, vyberte předplatné, ve kterém jste vytvořili registr a cluster.

  9. myapp Vyberte cluster.

  10. Jako obor názvů vyberte Existující a pak vyberte výchozí.

  11. Vyberte název registru kontejneru.

  12. Název image můžete nechat nastavený na výchozí.

  13. Nastavte port služby na 8080.

  14. Nastavte zaškrtávací políčko Povolit kontrolu aplikace pro žádosti o přijetí změn pro kontrolu konfigurace související s aplikací, která se má zahrnout do kanálu YAML automaticky vygenerovaného v dalších krocích.

  15. Vyberte Ověřit a nakonfigurovat.

    Jakmile Azure Pipelines vytvoří váš kanál, proces bude:

    • Vytvořte připojení služby registru Dockeru, které vašemu kanálu umožní nasdílení imagí do registru kontejneru.

    • Vytvořte prostředí a prostředek Kubernetes v rámci prostředí. V případě clusteru s podporou RBAC vytvořený prostředek Kubernetes implicitně vytvoří objekty ServiceAccount a RoleBinding v clusteru, aby vytvořený serviceAccount nemohl provádět operace mimo zvolený obor názvů.

    • Vygenerujte soubor azure-pipelines.yml , který definuje váš kanál.

    • Generování souborů manifestu Kubernetes Tyto soubory jsou generovány hydratací šablon deployment.yml a service.yml na základě vámi provedených výběrů. Až budete připraveni, vyberte Uložit a spustit.

  16. Zvolte Uložit a Spustit.

  17. Zprávu Potvrzení můžete změnit na něco jako přidat kanál do našeho úložiště. Až budete připraveni, vyberte Uložit a spusťte potvrzení nového kanálu do úložiště a pak začněte první spuštění nového kanálu.

Zobrazení nasazení aplikace

Při spuštění kanálu sledujte, jak je vaše fáze sestavení a pak fáze nasazení, přejděte od modrého (spuštěného) po zelenou (dokončenou). Můžete vybrat fáze a úlohy a sledovat kanál v akci.

Poznámka:

Pokud používáte agenta hostovaného Microsoftem, musíte do brány firewall přidat rozsah IP adres agenta hostovaného Microsoftem. Získejte týdenní seznam rozsahů IP adres z týdenního souboru JSON, který je publikován každou středu. Nové rozsahy IP adres platí vždy o následujícího pondělí. Další informace viz Agenti hostovaní Microsoftem. Pokud chcete zjistit rozsahy IP adres vyžadované pro vaši organizaci Azure DevOps, podívejte se, jak můžete identifikovat možné rozsahy IP adres pro agenty hostované Microsoftem.

Po dokončení spuštění kanálu prozkoumejte, co se stalo, a pak se podívejte na nasazenou aplikaci. Ze souhrnu kanálu:

  1. Vyberte kartu Prostředí.

  2. Vyberte Zobrazit prostředí.

  3. Vyberte instanci aplikace pro obor názvů, do který jste nasadili. Pokud jste použili výchozí hodnoty, pak se jedná o aplikaci myapp ve výchozím oboru názvů.

  4. Vyberte kartu Služby.

  5. Vyberte a zkopírujte externí IP adresu do schránky.

  6. Otevřete novou kartu nebo okno prohlížeče a zadejte <IP adresu>:8080.

Pokud vytváříte naši ukázkovou aplikaci, zobrazí se v prohlížeči Hello World .

Jak se buildy kanálu

Po dokončení výběru možností a následným pokračováním ověřte a nakonfigurujte kanál Azure Pipelines, který pro vás vytvořil kanál, pomocí šablony Nasazení do služby Azure Kubernetes Service .

Fáze sestavení používá úlohu Dockeru k sestavení a nasdílení image do služby Azure Container Registry.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

Úloha nasazení používá úlohu manifestu Kubernetes k vytvoření imagePullSecret požadovaných uzlů clusteru Kubernetes k načtení z prostředku služby Azure Container Registry. Soubory manifestu pak úloha manifestu Kubernetes používá k nasazení do clusteru Kubernetes. Soubory manifestu service.yml a deployment.ymlpři použití šablony Deploy to Azure Kubernetes Service se vygenerovaly.

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'myenv.aksnamespace' #customize with your environment
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

Vyčištění prostředků

Kdykoli budete hotovi s prostředky, které jste vytvořili, můžete je odstranit pomocí následujícího příkazu:

az group delete --name myapp-rg

Po zobrazení výzvy zadejte y .

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

Azure Pipelines můžete použít k automatickému nasazení do služby Azure Kubernetes Service (AKS). Azure Pipelines umožňuje sestavovat, testovat a nasazovat s využitím kontinuální integrace (CI) a průběžného doručování (CD) pomocí Azure DevOps.

V tomto článku se dozvíte, jak vytvořit kanál, který průběžně sestavuje a nasazuje vaši aplikaci. Při každé změně kódu v úložišti, které obsahuje soubor Dockerfile, se image nasdílí do služby Azure Container Registry a manifesty se pak nasadí do clusteru AKS.

Požadavky

Získání kódu

Vytvořte fork následujícího úložiště obsahující ukázkovou aplikaci a soubor Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Vytvoření prostředků Azure

Přihlaste se k webu Azure Portal a pak vyberte tlačítko Cloud Shell v pravém horním rohu. K vytvoření clusteru AKS použijte Azure CLI nebo PowerShell.

Vytvoření registru kontejneru

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys 

Konfigurace ověřování

Pokud používáte Azure Container Registry (ACR) se službou Azure Kubernetes Service (AKS), musíte vytvořit mechanismus ověřování. Toho lze dosáhnout dvěma způsoby:

  1. Udělte AKS přístup k ACR. Viz Ověřování pomocí služby Azure Container Registry ze služby Azure Kubernetes Service.

  2. Použijte tajný klíč pro vyžádání image Kubernetes. Tajný kód pro vyžádání image je možné vytvořit pomocí úlohy nasazení Kubernetes.

Vytvoření kanálu verze

Kanál buildu použitý k nastavení CI už vytvořil image Dockeru a odeslal ji do služby Azure Container Registry. Také se zabalil a publikoval chart Helm jako artefakt. V kanálu verze nasadíme image kontejneru jako aplikaci Helm do clusteru AKS.

  1. V Azure Pipelines otevřete souhrn sestavení.

  2. V souhrnu buildu zvolte ikonu Verze a spusťte nový kanál verze.

    Pokud jste dříve vytvořili kanál verze, který používá tyto artefakty sestavení, zobrazí se výzva k vytvoření nové verze. V takovém případě přejděte na stránku Vydané verze a začněte odsud nový kanál verze tak, že zvolíte + ikonu.

  3. Vyberte prázdnou šablonu úlohy .

  4. Otevřete stránku Úkoly a vyberte úlohu agenta.

  5. Zvolte + , jestli chcete přidat novou úlohu a přidat úlohu instalačního programu nástroje Helm. Tím se zajistí, že agent, který spustí následující úlohy, má na něm nainstalovaný Helm a Kubectl.

  6. Zvolte + znovu a přidejte balíček a nasaďte úlohu Charty Helm. Nakonfigurujte nastavení pro tento úkol následujícím způsobem:

    • typ Připojení: Výběrem Azure Resource Manageru se připojte ke clusteru AKS pomocí připojení služby Azure. Případně pokud se chcete připojit k libovolnému clusteru Kubernetes pomocí kubeconfig nebo účtu služby, můžete vybrat službu Kubernetes Service Připojení ion. V takovém případě budete muset vytvořit a vybrat připojení ke službě Kubernetes místo předplatného Azure pro následující nastavení.

    • Předplatné Azure: Vyberte připojení ze seznamu v části Dostupná služba Azure Připojení ions nebo vytvořte připojení s více omezenými oprávněními k vašemu předplatnému Azure. Pokud se vedle vstupu zobrazí tlačítko Autorizovat , použijte ho k autorizaci připojení k vašemu předplatnému Azure. Pokud v seznamu předplatných nevidíte požadované předplatné Azure, přečtěte si téma Vytvoření připojení služby Azure pro ruční nastavení připojení.

    • Skupina prostředků: Zadejte nebo vyberte skupinu prostředků obsahující cluster AKS.

    • Cluster Kubernetes: Zadejte nebo vyberte cluster AKS, který jste vytvořili.

    • Příkaz: Vyberte inicializaci jako příkaz Helm. Tím se tiller nainstaluje do spuštěné clusteru Kubernetes. Nastaví se také veškerá potřebná místní konfigurace. Pokud chcete nainstalovat nejnovější předběžnou verzi Tilleru, použijte kanárovou verzi image. Pokud je předinstalovaný, můžete se také rozhodnout upgradovat Tiller. Pokud jsou tyto možnosti povolené, úloha se spustí. helm init --canary-image --upgrade

  7. Zvolte + v úloze agenta a přidejte další balíček a nasaďte úlohu chartů Helm. Nakonfigurujte nastavení pro tento úkol následujícím způsobem:

    • Cluster Kubernetes: Zadejte nebo vyberte cluster AKS, který jste vytvořili.

    • Obor názvů: Zadejte obor názvů clusteru Kubernetes, do kterého chcete aplikaci nasadit. Kubernetes podporuje více virtuálních clusterů zálohovaných stejným fyzickým clusterem. Tyto virtuální clustery se nazývají obory názvů. Obory názvů můžete použít k vytvoření různých prostředí, jako je vývoj, testování a příprava ve stejném clusteru.

    • Příkaz: Vyberte upgrade jako příkaz Helm. Pomocí této úlohy můžete spustit libovolný příkaz Helm a předat možnosti příkazů jako argumenty. Když vyberete upgrade, zobrazí se v úloze několik dalších polí:

      • Typ grafu: Vyberte cestu k souboru. Případně můžete zadat název grafu, pokud chcete zadat adresu URL nebo název grafu. Pokud je stable/mysqlnapříklad název grafu, úloha se spustí. helm upgrade stable/mysql

      • Cesta k grafu: Může to být cesta k zabaleného grafu nebo cesta k rozbalenému adresáři grafu. V tomto příkladu publikujete graf pomocí sestavení CI, takže pomocí výběru souboru vyberte balíček souborů nebo zadejte. $(System.DefaultWorkingDirectory)/**/*.tgz

      • Název verze: Zadejte název vaší verze, například azuredevops

      • Znovu vytvořte pody: Toto políčko zaškrtněte, pokud během vydání dojde ke změně konfigurace a chcete nahradit spuštěný pod novou konfigurací.

      • Resetovat hodnoty: Toto políčko zaškrtněte, pokud chcete, aby hodnoty integrované do grafu přepsaly všechny hodnoty poskytnuté úkolem.

      • Vynutit: Zaškrtněte toto políčko, pokud dojde ke konfliktům, chcete upgradovat a vrátit zpět odstranění, znovu vytvořit prostředek a přeinstalovat úplnou verzi. To je užitečné ve scénářích, kdy použití oprav může selhat (například u služeb, protože IP adresa clusteru je neměnná).

      • Argumenty: Zadejte argumenty příkazu Helm a jejich hodnoty. V tomto příkladu --set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId) V této části najdete popis, proč tyto argumenty používáme.

      • Povolit protokol TLS: Zaškrtnutím tohoto políčka povolíte silná připojení založená na protokolu TLS mezi Helmem a Tillerem.

      • Certifikát certifikační autority: Zadejte certifikát certifikační autority, který se má nahrát a použít k vydávání certifikátů pro klienta Tiller a Helm.

      • Certifikát: Zadejte certifikát Tilleru nebo klientský certifikát Helm.

      • Klíč: Zadejte klíč Tiller nebo klientský klíč Helm.

  8. Na stránce Proměnné kanálu přidejte proměnnou s názvem imageRepoName a nastavte hodnotu na název úložiště image Helm. Obvykle je to ve formátu. example.azurecr.io/coderepository

  9. Uložte kanál verze.

Argumenty použité v úloze upgrade Helmu

V kanálu buildu je image kontejneru označená $(Build.BuildId) a je nasdílená do služby Azure Container Registry. V chartu Helm můžete parametrizovat podrobnosti o imagi kontejneru, jako je název a značka, protože stejný graf se dá použít k nasazení do různých prostředí. Tyto hodnoty lze také zadat v souboru values.yaml nebo je přepsat souborem --set hodnot zadaným uživatelem, který může být přepsán parametry během instalace nebo upgradu Helmu.

V tomto příkladu předáme následující argumenty:

--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)

Hodnota $(imageRepoName) byla nastavena na stránce Proměnné (nebo v oddílu proměnných souboru YAML). Případně ho můžete přímo nahradit názvem úložiště image v argumentech --set hodnoty nebo souboru values.yaml . Příklad:

  image:
    repository: VALUE_TO_BE_OVERRIDDEN
    tag: latest

Další alternativou je nastavení možnosti Nastavit hodnoty úkolu k určení hodnot argumentů jako dvojice klíč-hodnota oddělených čárkami.

Vytvoření verze pro nasazení aplikace

Teď jste připraveni vytvořit verzi, což znamená spuštění procesu spuštění kanálu verze s artefakty vytvořenými konkrétním sestavením. Výsledkem je nasazení sestavení:

  1. Zvolte a uvolněte verzi a vyberte Vytvořit verzi.

  2. Na panelu Vytvořit novou verzi zkontrolujte, jestli je vybraná verze artefaktu, kterou chcete použít, a zvolte Vytvořit.

  3. Ve zprávě informačního panelu zvolte odkaz na vydání verze. Příklad: Verze Release-1 byla vytvořena.

  4. V zobrazení kanálu zvolte odkaz na stav ve fázích kanálu, abyste viděli protokoly a výstup agenta.