Skapa och distribuera till Azure Kubernetes Service med Azure Pipelines

Azure DevOps Services

Använd Azure Pipelines för att automatiskt distribuera till Azure Kubernetes Service (AKS). Med Azure Pipelines kan du skapa, testa och distribuera med kontinuerlig integrering (CI) och kontinuerlig leverans (CD) med Hjälp av Azure DevOps.

I den här artikeln får du lära dig hur du skapar en pipeline som kontinuerligt skapar och distribuerar din app. Varje gång du ändrar koden på en lagringsplats som innehåller en Dockerfile skickas avbildningarna till Azure Container Registry och manifesten distribueras sedan till aks-klustret.

Förutsättningar

Hämta koden

Förgrena följande lagringsplats som innehåller ett exempelprogram och en Dockerfile:

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

Skapa Azure-resurserna

Logga in på Azure-portalen och välj sedan knappen Cloud Shell i det övre högra hörnet. Använd Azure CLI eller PowerShell för att skapa ett AKS-kluster.

Skapa ett containerregister

# 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

Logga in på Azure Pipelines

Logga in på Azure Pipelines. När du har loggat in går webbläsaren till https://dev.azure.com/my-organization-name och visar din Azure DevOps-instrumentpanel.

Skapa ett projekt i den valda organisationen. Om du inte har några projekt i din organisation visas skärmen Skapa ett projekt för att komma igång . Annars väljer du knappen Skapa projekt i det övre högra hörnet på instrumentpanelen.

Skapa pipelinen

Anslut och välj din lagringsplats

  1. Logga in på din Azure DevOps-organisation och gå till projektet.

  2. Gå till Pipelines och välj sedan Ny pipeline.

  3. Utför stegen i guiden genom att först välja GitHub som plats för källkoden.

  4. Du kan omdirigeras till GitHub för att logga in. I så fall anger du dina GitHub-autentiseringsuppgifter.

  5. När du ser listan över lagringsplatser väljer du din lagringsplats.

  6. Du kan omdirigeras till GitHub för att installera Azure Pipelines-appen. I så fall väljer du Godkänn och installera.

  7. Välj Distribuera till Azure Kubernetes Service.

  8. Om du uppmanas att göra det väljer du den prenumeration där du skapade registret och klustret.

  9. Välj klustret myapp .

  10. För Namnområde väljer du Befintlig och sedan standard.

  11. Välj namnet på containerregistret.

  12. Du kan lämna avbildningsnamnet inställt på standardvärdet.

  13. Ange tjänstporten till 8080.

  14. Ange kryssrutan Aktivera granskningsapp för pull-begäranden för granskning av apprelaterad konfiguration som ska ingå i yaml-pipelinen som genereras automatiskt i efterföljande steg.

  15. Välj Verifiera och konfigurera.

    När Azure Pipelines skapar din pipeline kommer processen att:

    • Skapa en Docker-registertjänstanslutning för att aktivera pipelinen för att skicka avbildningar till containerregistret.

    • Skapa en miljö och en Kubernetes-resurs i miljön. För ett RBAC-aktiverat kluster skapar den skapade Kubernetes-resursen implicit ServiceAccount- och RoleBinding-objekt i klustret så att det skapade ServiceAccount inte kan utföra åtgärder utanför det valda namnområdet.

    • Generera en azure-pipelines.yml-fil som definierar din pipeline.

    • Generera Kubernetes-manifestfiler. Dessa filer genereras genom att mallarna deployment.yml och service.yml återfuktas baserat på de val du har gjort. När du är klar väljer du Spara och kör.

  16. Välj Spara och kör.

  17. Du kan ändra incheckningsmeddelandet till något som liknar Lägg till pipeline till vår lagringsplats. När du är klar väljer du Spara och kör för att checka in den nya pipelinen på lagringsplatsen och påbörjar sedan den första körningen av den nya pipelinen!

Se din appdistribution

När pipelinen körs kan du titta som byggfas och sedan gå från blått (körs) till grönt (slutfört). Du kan välja faser och jobb för att se hur din pipeline fungerar.

Kommentar

Om du använder en Microsoft-värdbaserad agent måste du lägga till IP-intervallet för den Microsoft-värdbaserade agenten i brandväggen. Hämta veckolistan med IP-intervall från den veckovisa JSON-filen som publiceras varje onsdag. De nya IP-intervallen börjar gälla följande måndag. Mer information finns i Agenter med Microsoft som värd. Om du vill hitta de IP-intervall som behövs för din Azure DevOps-organisation kan du lära dig hur du identifierar möjliga IP-intervall för agenter med Microsoft som värd.

När pipelinekörningen är klar kan du utforska vad som hände och sedan gå och se din app distribuerad. Från pipelinesammanfattningen:

  1. Välj fliken miljöer.

  2. Välj Visa miljö.

  3. Välj instansen av din app för det namnområde som du distribuerade till. Om du använde standardvärdena är det myapp-appen i standardnamnområdet .

  4. Välj fliken Tjänster .

  5. Välj och kopiera den externa IP-adressen till Urklipp.

  6. Öppna en ny webbläsarflik eller ett nytt fönster och ange <IP-adress>:8080.

Om du skapar vår exempelapp visas Hello World i webbläsaren.

Så här bygger pipelinen

När du var klar med att välja alternativ och sedan fortsatte med att verifiera och konfigurera pipelinen skapade Azure Pipelines en pipeline åt dig med hjälp av mallen Distribuera till Azure Kubernetes Service .

Byggfasen använder Docker-uppgiften för att skapa och skicka avbildningen till 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'

Distributionsjobbet använder Kubernetes-manifestaktiviteten för att skapa de imagePullSecret kubernetes-klusternoder som krävs för att hämta från Azure Container Registry-resursen. Manifestfiler används sedan av Kubernetes-manifestuppgiften för att distribuera till Kubernetes-klustret. Manifestfilerna service.yml och deployment.yml, genererades när du använde mallen Distribuera till Azure Kubernetes Service .

- 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)

Rensa resurser

När du är klar med de resurser du skapade kan du använda följande kommando för att ta bort dem:

az group delete --name myapp-rg

Ange y när du uppmanas att göra det.

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

Använd Azure Pipelines för att automatiskt distribuera till Azure Kubernetes Service (AKS). Med Azure Pipelines kan du skapa, testa och distribuera med kontinuerlig integrering (CI) och kontinuerlig leverans (CD) med Hjälp av Azure DevOps.

I den här artikeln får du lära dig hur du skapar en pipeline som kontinuerligt skapar och distribuerar din app. Varje gång du ändrar koden på en lagringsplats som innehåller en Dockerfile skickas avbildningarna till Azure Container Registry och manifesten distribueras sedan till aks-klustret.

Förutsättningar

Hämta koden

Förgrena följande lagringsplats som innehåller ett exempelprogram och en Dockerfile:

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

Skapa Azure-resurserna

Logga in på Azure-portalen och välj sedan knappen Cloud Shell i det övre högra hörnet. Använd Azure CLI eller PowerShell för att skapa ett AKS-kluster.

Skapa ett containerregister

# 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 

Konfigurera autentisering

När du använder Azure Container Registry (ACR) med Azure Kubernetes Service (AKS) måste du upprätta en autentiseringsmekanism. Detta kan uppnås på två sätt:

  1. Bevilja AKS åtkomst till ACR. Se Autentisera med Azure Container Registry från Azure Kubernetes Service.

  2. Använd en Kubernetes-avbildningshämtningshemlighet. En avbildningshämtningshemlighet kan skapas med hjälp av Kubernetes-distributionsuppgiften.

Skapa en versionspipeline

Bygg-pipelinen som används för att konfigurera CI har redan skapat en Docker-avbildning och push-överfört den till ett Azure Container Registry. Det paketerade och publicerade också ett Helm-diagram som en artefakt. I versionspipelinen distribuerar vi containeravbildningen som ett Helm-program till AKS-klustret.

  1. Öppna sammanfattningen för din version i Azure Pipelines .

  2. I versionssammanfattningen väljer du versionsikonen för att starta en ny versionspipeline.

    Om du tidigare har skapat en versionspipeline som använder dessa byggartefakter uppmanas du att skapa en ny version i stället. I så fall går du till sidan Versioner och startar en ny versionspipeline därifrån genom att + välja ikonen .

  3. Välj mallen Tomt jobb .

  4. Öppna sidan Uppgifter och välj Agentjobb.

  5. Välj + att lägga till en ny uppgift och lägga till en Helm-verktygsinstallationsuppgift . Detta säkerställer att den agent som kör efterföljande uppgifter har Helm och Kubectl installerade på den.

  6. Välj + igen och lägg till en åtgärd för paket och distribuera Helm-diagram . Konfigurera inställningarna för den här uppgiften enligt följande:

    • Anslut ionstyp: Välj Azure Resource Manager för att ansluta till ett AKS-kluster med hjälp av en Azure-tjänstanslutning. Om du vill ansluta till kubernetes-kluster med kubeconfig eller ett tjänstkonto kan du också välja Kubernetes Service Anslut ion. I det här fallet måste du skapa och välja en Kubernetes-tjänstanslutning i stället för en Azure-prenumeration för följande inställning.

    • Azure-prenumeration: Välj en anslutning i listan under Tillgängliga Azure Service-Anslut eller skapa en mer begränsad behörighetsanslutning till din Azure-prenumeration. Om du ser knappen Auktorisera bredvid indata använder du den för att auktorisera anslutningen till din Azure-prenumeration. Om du inte ser den nödvändiga Azure-prenumerationen i listan över prenumerationer kan du läsa Skapa en Azure-tjänstanslutning för att konfigurera anslutningen manuellt.

    • Resursgrupp: Ange eller välj den resursgrupp som innehåller AKS-klustret.

    • Kubernetes-kluster: Ange eller välj det AKS-kluster som du skapade.

    • Kommando: Välj init som Helm-kommando. Detta installerar Tiller i det Kubernetes-kluster som körs. Den kommer också att konfigurera alla nödvändiga lokala konfigurationer. Markera Använd canary image-versionen för att installera den senaste förhandsversionen av Tiller. Du kan också välja att uppgradera Tiller om det är förinstallerat genom att markera Uppgradera tiller. Om de här alternativen är aktiverade körs aktiviteten helm init --canary-image --upgrade

  7. Välj + i agentjobbetoch lägg till ett annat paket och distribuera Helm-diagramaktivitet. Konfigurera inställningarna för den här uppgiften enligt följande:

    • Kubernetes-kluster: Ange eller välj det AKS-kluster som du skapade.

    • Namnområde: Ange ditt Kubernetes-klusternamnområde där du vill distribuera ditt program. Kubernetes stöder flera virtuella kluster som backas upp av samma fysiska kluster. Dessa virtuella kluster kallas namnområden. Du kan använda namnområden för att skapa olika miljöer, till exempel utveckling, testning och mellanlagring i samma kluster.

    • Kommando: Välj uppgradera som Helm-kommando. Du kan köra valfritt Helm-kommando med den här uppgiften och skicka in kommandoalternativ som argument. När du väljer uppgraderingen visar aktiviteten några fler fält:

      • Diagramtyp: Välj Filsökväg. Du kan också ange diagramnamn om du vill ange en URL eller ett diagramnamn. Om diagramnamnet till exempel är stable/mysqlkörs aktiviteten helm upgrade stable/mysql

      • Diagramsökväg: Det här kan vara en sökväg till ett paketerat diagram eller en sökväg till en uppackad diagramkatalog. I det här exemplet publicerar du diagrammet med hjälp av en CI-version, så välj filpaketet med filväljaren eller ange $(System.DefaultWorkingDirectory)/**/*.tgz

      • Versionsnamn: Ange ett namn för din version, till exempel azuredevops

      • Återskapa poddar: Markera den här kryssrutan om det sker en konfigurationsändring under lanseringen och du vill ersätta en podd som körs med den nya konfigurationen.

      • Återställ värden: Markera den här kryssrutan om du vill att de inbyggda värdena i diagrammet ska åsidosätta alla värden som tillhandahålls av aktiviteten.

      • Framtvinga: Markera den här kryssrutan om du vill uppgradera och återställa om konflikter skulle uppstå för att ta bort, återskapa resursen och installera om den fullständiga versionen. Detta är användbart i scenarier där tillämpning av korrigeringar kan misslyckas (till exempel för tjänster eftersom klustrets IP-adress är oföränderlig).

      • Argument: Ange Helm-kommandoargumenten och deras värden. I det här exemplet --set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId) I det här avsnittet finns en beskrivning av varför vi använder dessa argument.

      • Aktivera TLS: Markera den här kryssrutan för att aktivera starka TLS-baserade anslutningar mellan Helm och Tiller.

      • CA-certifikat: Ange ett CA-certifikat som ska laddas upp och användas för att utfärda certifikat för Tiller- och Helm-klienten.

      • Certifikat: Ange Tiller-certifikatet eller Helm-klientcertifikatet

      • Nyckel: Ange Tiller-nyckeln eller Helm-klientnyckeln

  8. På sidan Variabler i pipelinen lägger du till en variabel med namnet imageRepoName och anger värdet till namnet på helm-avbildningslagringsplatsen. Detta är vanligtvis i formatet example.azurecr.io/coderepository

  9. Spara versionspipelinen.

Argument som används i Helm-uppgraderingsaktiviteten

I bygg-pipelinen taggas containeravbildningen med $(Build.BuildId) och den skickas till ett Azure Container Registry. I ett Helm-diagram kan du parametrisera information om containeravbildningen, till exempel namn och tagg eftersom samma diagram kan användas för att distribuera till olika miljöer. Dessa värden kan också anges i filen values.yaml eller åsidosättas av en värdefil som tillhandahålls av användaren, som i sin tur kan åsidosättas av --set parametrar under Helm-installationen eller uppgraderingen.

I det här exemplet skickar vi följande argument:

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

Värdet $(imageRepoName) för angavs på sidan Variabler (eller avsnittet variabler i YAML-filen). Du kan också ersätta den direkt med namnet på avbildningslagringsplatsen i --set argumentvärdet eller filen values.yaml . Till exempel:

  image:
    repository: VALUE_TO_BE_OVERRIDDEN
    tag: latest

Ett annat alternativ är att ange alternativet Ange värden för aktiviteten för att ange argumentvärdena som kommaavgränsade nyckel/värde-par.

Skapa en version för att distribuera din app

Nu är du redo att skapa en version, vilket innebär att du kan starta processen med att köra versionspipelinen med artefakterna som skapas av en specifik version. Detta resulterar i distribution av bygget:

  1. Välj + Släpp och välj Skapa en version.

  2. I panelen Skapa en ny version kontrollerar du att den artefaktversion som du vill använda är markerad och väljer Skapa.

  3. Välj versionslänken i informationsfältets meddelande. Till exempel: "Release Release-1 has been created".

  4. I pipelinevyn väljer du statuslänken i stegen i pipelinen för att se loggarna och agentutdata.