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 din 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 Portal och välj sedan knappen Cloud Shell i det övre högra hörnet.

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 & installation.

  7. Välj Distribuera för att 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 granskningsappens relaterade konfiguration som ska inkluderas 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 distribuera mallarna deployment.yml och service.yml 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 din pipeline körs tittar du som byggfas och sedan ditt distributionssteg, går 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.

Anteckning

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 över 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 Microsoft-värdbaserade agenter. Om du vill hitta de IP-intervall som krävs för din Azure DevOps-organisation kan du lära dig hur du identifierar möjliga IP-intervall för Microsoft-värdbaserade agenter.

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 har hållit dig till standardvärdena som vi nämnde ovan blir 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 push-överföra 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 den Azure Container Registry resursen. Manifestfiler används sedan av Kubernetes-manifestuppgiften för att distribuera till Kubernetes-klustret.

- 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 som du skapade kan du ta bort dem med följande kommando:

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 din 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 Portal och välj sedan knappen Cloud Shell i det övre högra hörnet.

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. Ge 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 en 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-verktygsinstallationsaktivitet . 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 på följande sätt:

    • Anslutningstyp: 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 ett Kubernetes-kluster med kubeconfig eller ett tjänstkonto kan du också välja Kubernetes-tjänstanslutning. 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-tjänstanslutningar 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 läser du 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 konfigurerar också alla nödvändiga lokala konfigurationer. Tick Använd canary image version 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 uppgiften helm init --canary-image --upgrade

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

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

    • Namnområde: Ange det Kubernetes-klusternamnområde där du vill distribuera programmet. 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 uppgiften 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; t.ex. 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 värden som är inbyggda 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 inte kan ändras).

      • Argument: Ange Helm-kommandoargumenten och deras värden. för 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 en Azure Container Registry. I ett Helm-diagram kan du parameterisera containeravbildningsinformationen, 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 . 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 skapats av en specifik version. Detta resulterar i att bygget distribueras:

  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 har skapats".

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