Bouwen en implementeren naar Azure Kubernetes Service met Azure Pipelines

Azure DevOps Services

Gebruik Azure Pipelines om automatisch te implementeren in Azure Kubernetes Service (AKS). Met Azure Pipelines kunt u bouwen, testen en implementeren met continue integratie (CI) en continue levering (CD) met behulp van Azure DevOps.

In dit artikel leert u hoe u een pijplijn maakt waarmee uw app continu wordt gebouwd en geïmplementeerd. Telkens wanneer u uw code wijzigt in een opslagplaats die een Dockerfile bevat, worden de installatiekopieën naar uw Azure Container Registry gepusht en worden de manifesten vervolgens geïmplementeerd in uw AKS-cluster.

Vereisten

Code ophalen

Fork de volgende opslagplaats met een voorbeeldtoepassing en een Dockerfile:

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

De Azure-resources maken

Meld u aan bij de Azure Portal en selecteer vervolgens de knop Cloud Shell in de rechterbovenhoek.

Een containerregister maken

# 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

Aanmelden bij Azure Pipelines

Meld u aan bij Azure Pipelines. Nadat u zich hebt aangemeld, gaat uw browser naar https://dev.azure.com/my-organization-name en wordt uw Azure DevOps-dashboard weergegeven.

Maak binnen de geselecteerde organisatie een project. Als u geen projecten in uw organisatie hebt, ziet u het scherm Een project maken om aan de slag te gaan . Selecteer anders de knop Project maken in de rechterbovenhoek van het dashboard.

Maak de pijplijn

Verbinding maken en uw opslagplaats selecteren

  1. Meld u aan bij uw Azure DevOps-organisatie en ga naar uw project.

  2. Ga naar Pijplijnen en selecteer nieuwe pijplijn.

  3. Voer de stappen van de wizard uit door eerst GitHub te selecteren als de locatie van uw broncode.

  4. U wordt mogelijk omgeleid naar GitHub om u aan te melden. Voer in dat geval uw GitHub-referenties in.

  5. Wanneer u de lijst met opslagplaatsen ziet, selecteert u uw opslagplaats.

  6. U wordt mogelijk omgeleid naar GitHub om de Azure Pipelines-app te installeren. Als dat het zo is, selecteert u Installatie goedkeuren&.

  7. Selecteer Implementeren naar Azure Kubernetes Service.

  8. Als u hierom wordt gevraagd, selecteert u het abonnement waarin u het register en cluster hebt gemaakt.

  9. Selecteer het myapp cluster.

  10. Selecteer bij Naamruimtede optie Bestaande en selecteer vervolgens standaard.

  11. Selecteer de naam van het containerregister.

  12. U kunt de naam van de installatiekopieën op de standaardwaarde laten staan.

  13. Stel de servicepoort in op 8080.

  14. Stel het selectievakje App controleren voor pull-aanvragen inschakelen in om de configuratie van de app te controleren die in de volgende stappen automatisch wordt gegenereerd in de pijplijn YAML.

  15. Selecteer Valideren en configureren.

    Wanneer Azure Pipelines uw pijplijn maakt, gebeurt het volgende:

    • Maak een Docker-registerserviceverbinding om uw pijplijn in staat te stellen installatiekopieën naar uw containerregister te pushen.

    • Maak een omgeving en een Kubernetes-resource binnen de omgeving. Voor een cluster met RBAC maakt de gemaakte Kubernetes-resource impliciet ServiceAccount- en RoleBinding-objecten in het cluster, zodat het gemaakte ServiceAccount geen bewerkingen buiten de gekozen naamruimte kan uitvoeren.

    • Genereer een bestand azure-pipelines.yml , waarmee uw pijplijn wordt gedefinieerd.

    • Kubernetes-manifestbestanden genereren. Deze bestanden worden gegenereerd door de sjablonen deployment.yml en service.yml te hydrateren op basis van de selecties die u hebt gemaakt. Wanneer u klaar bent, selecteert u Opslaan en uitvoeren.

  16. Selecteer Opslaan en uitvoeren.

  17. U kunt het doorvoerbericht wijzigen in iets als Pijplijn toevoegen aan onze opslagplaats. Wanneer u klaar bent, selecteert u Opslaan en uitvoeren om de nieuwe pijplijn door te voeren in uw opslagplaats en begint u met de eerste uitvoering van de nieuwe pijplijn.

Uw app zien implementeren

Terwijl uw pijplijn wordt uitgevoerd, bekijkt u hoe uw buildfase en vervolgens de implementatiefase van blauw (actief) naar groen (voltooid) gaat. U kunt de fasen en taken selecteren om uw pijplijn in actie te zien.

Notitie

Als u een Microsoft-gehoste agent gebruikt, moet u het IP-bereik van de Microsoft-gehoste agent toevoegen aan uw firewall. Haal de wekelijkse lijst met IP-bereiken op uit het wekelijkse JSON-bestand, dat elke woensdag wordt gepubliceerd. De nieuwe IP-bereiken worden de volgende maandag van kracht. Zie Microsoft gehoste agents voor meer informatie. Als u de IP-bereiken wilt vinden die vereist zijn voor uw Azure DevOps-organisatie, leert u hoe u de mogelijke IP-bereiken voor Microsoft gehoste agents kunt identificeren.

Nadat de pijplijn is uitgevoerd, verkent u wat er is gebeurd en bekijkt u de geïmplementeerde app. Uit het pijplijnoverzicht:

  1. Selecteer het tabblad Omgevingen .

  2. Selecteer Omgeving weergeven.

  3. Selecteer het exemplaar van uw app voor de naamruimte waarnaar u hebt geïmplementeerd. Als u de hierboven genoemde standaardwaarden hebt behouden, is dit de myapp-app in de standaardnaamruimte .

  4. Selecteer het tabblad Services .

  5. Selecteer en kopieer het externe IP-adres naar het klembord.

  6. Open een nieuw browsertabblad of -venster en voer <IP-adres>:8080 in.

Als u onze voorbeeld-app bouwt, wordt Hallo wereld weergegeven in uw browser.

Hoe de pijplijn wordt gebouwd

Wanneer u klaar bent met het selecteren van opties en vervolgens doorging met het valideren en configureren van de pijplijn, heeft Azure Pipelines een pijplijn voor u gemaakt met behulp van de sjabloon Implementeren in Azure Kubernetes Service.

In de buildfase wordt de Docker-taak gebruikt om de installatiekopieën te bouwen en naar de Azure Container Registry te pushen.

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

De implementatietaak maakt gebruik van de Kubernetes-manifesttaak om de imagePullSecret vereiste Kubernetes-clusterknooppunten te maken die moeten worden opgehaald uit de Azure Container Registry resource. Manifestbestanden worden vervolgens door de Kubernetes-manifesttaak gebruikt om te implementeren in het Kubernetes-cluster.

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

Resources opschonen

Wanneer u klaar bent met de resources die u hebt gemaakt, kunt u deze met de volgende opdracht verwijderen:

az group delete --name myapp-rg

Voer in y wanneer u hierom wordt gevraagd.

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

Gebruik Azure Pipelines om automatisch te implementeren in Azure Kubernetes Service (AKS). Met Azure Pipelines kunt u bouwen, testen en implementeren met continue integratie (CI) en continue levering (CD) met behulp van Azure DevOps.

In dit artikel leert u hoe u een pijplijn maakt waarmee uw app continu wordt gebouwd en geïmplementeerd. Telkens wanneer u uw code wijzigt in een opslagplaats die een Dockerfile bevat, worden de installatiekopieën naar uw Azure Container Registry gepusht en worden de manifesten vervolgens geïmplementeerd in uw AKS-cluster.

Vereisten

Code ophalen

Fork de volgende opslagplaats met een voorbeeldtoepassing en een Dockerfile:

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

De Azure-resources maken

Meld u aan bij de Azure Portal en selecteer vervolgens de knop Cloud Shell in de rechterbovenhoek.

Een containerregister maken

# 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 

Verificatie configureren

Wanneer u Azure Container Registry (ACR) gebruikt met Azure Kubernetes Service (AKS), moet u een verificatiemechanisme instellen. Dit kan op twee manieren worden bereikt:

  1. AKS toegang verlenen tot ACR. Zie Verifiëren met Azure Container Registry vanuit Azure Kubernetes Service.

  2. Gebruik een pull-geheim voor kubernetes-installatiekopieën. Een pull-geheim voor installatiekopieën kan worden gemaakt met behulp van de Kubernetes-implementatietaak.

Een release-pijplijn maken

De build-pijplijn die wordt gebruikt voor het instellen van CI, heeft al een Docker-installatiekopieën gemaakt en deze naar een Azure Container Registry gepusht. Er is ook een Helm-grafiek als artefact verpakt en gepubliceerd. In de release-pijplijn implementeren we de containerinstallatiekopieën als een Helm-toepassing in het AKS-cluster.

  1. Open in Azure Pipelines de samenvatting voor uw build.

  2. Kies in het build-overzicht het pictogram Release om een nieuwe release-pijplijn te starten.

    Als u eerder een release-pijplijn hebt gemaakt die gebruikmaakt van deze buildartefacten, wordt u gevraagd om in plaats daarvan een nieuwe release te maken. Ga in dat geval naar de pagina Releases en start daar een nieuwe release-pijplijn door het + pictogram te kiezen.

  3. Selecteer de sjabloon Lege taak .

  4. Open de pagina Taken en selecteer Agenttaak.

  5. Kies ervoor + om een nieuwe taak toe te voegen en een helm-hulpprogramma-installatietaak toe te voegen. Dit zorgt ervoor dat helm en Kubectl zijn geïnstalleerd op de agent die de volgende taken uitvoert.

  6. Kies + opnieuw en voeg de taak Helm-grafieken inpakken en implementeren toe. Configureer de instellingen voor deze taak als volgt:

    • Verbindingstype: selecteer Azure Resource Manager om verbinding te maken met een AKS-cluster met behulp van een Azure-serviceverbinding. Als u verbinding wilt maken met een Kubernetes-cluster met behulp van kubeconfig of een serviceaccount, kunt u ook Kubernetes-serviceverbinding selecteren. In dit geval moet u een Kubernetes-serviceverbinding maken en selecteren in plaats van een Azure-abonnement voor de volgende instelling.

    • Azure-abonnement: selecteer een verbinding in de lijst onder Beschikbare Azure-serviceverbindingen of maak een verbinding met meer beperkte machtigingen voor uw Azure-abonnement. Als u een knop Autoriseren ziet naast de invoer, gebruikt u deze om de verbinding met uw Azure-abonnement te autoriseren. Als u het vereiste Azure-abonnement niet in de lijst met abonnementen ziet, raadpleegt u Een Azure-serviceverbinding maken om de verbinding handmatig in te stellen.

    • Resourcegroep: voer de resourcegroep in die uw AKS-cluster bevat of selecteer deze.

    • Kubernetes-cluster: voer het AKS-cluster dat u hebt gemaakt in of selecteer dit.

    • Opdracht: selecteer init als de Helm-opdracht. Hiermee wordt Tiller geïnstalleerd in uw actieve Kubernetes-cluster. Er wordt ook eventuele benodigde lokale configuratie ingesteld. Tik op Canary-installatiekopieënversie gebruiken om de meest recente voorlopige versie van Tiller te installeren. U kunt er ook voor kiezen om Tiller te upgraden als deze vooraf is geïnstalleerd door Tiller upgraden aan te vinken. Als deze opties zijn ingeschakeld, wordt de taak uitgevoerd helm init --canary-image --upgrade

  7. Kies + in de agenttaak en voeg een andere taak Inpakken en implementeren van Helm-grafieken toe. Configureer de instellingen voor deze taak als volgt:

    • Kubernetes-cluster: voer het AKS-cluster dat u hebt gemaakt in of selecteer dit.

    • Naamruimte: voer de naamruimte van uw Kubernetes-cluster in waar u uw toepassing wilt implementeren. Kubernetes ondersteunt meerdere virtuele clusters die worden ondersteund door hetzelfde fysieke cluster. Deze virtuele clusters worden naamruimten genoemd. U kunt naamruimten gebruiken om verschillende omgevingen te maken, zoals ontwikkelen, testen en faseren in hetzelfde cluster.

    • Opdracht: selecteer Upgraden als de Helm-opdracht. U kunt elke Helm-opdracht uitvoeren met behulp van deze taak en opdrachtopties doorgeven als argumenten. Wanneer u de upgrade selecteert, worden in de taak nog enkele velden weergegeven:

      • Grafiektype: Selecteer Bestandspad. U kunt ook Grafieknaam opgeven als u een URL of grafieknaam wilt opgeven. Als de grafieknaam bijvoorbeeld is stable/mysql, wordt de taak uitgevoerd helm upgrade stable/mysql

      • Grafiekpad: dit kan een pad zijn naar een verpakte grafiek of een pad naar een uitgepakte grafiekmap. In dit voorbeeld publiceert u de grafiek met behulp van een CI-build, dus selecteer het bestandspakket met behulp van bestandskiezer of voer in $(System.DefaultWorkingDirectory)/**/*.tgz

      • Releasenaam: Voer een naam in voor uw release; bijvoorbeeld azuredevops

      • Pods opnieuw maken: schakel dit selectievakje in als er een configuratiewijziging is tijdens de release en u een actieve pod wilt vervangen door de nieuwe configuratie.

      • Waarden opnieuw instellen: schakel dit selectievakje in als u wilt dat de ingebouwde waarden in de grafiek alle waarden van de taak overschrijven.

      • Forceren: schakel dit selectievakje in als u, als er conflicten optreden, wilt upgraden en terugdraaien om de resource te verwijderen, de resource opnieuw te maken en de volledige release opnieuw te installeren. Dit is handig in scenario's waarin het toepassen van patches kan mislukken (bijvoorbeeld voor services omdat het IP-adres van het cluster onveranderbaar is).

      • Argumenten: Voer de Helm-opdrachtargumenten en de bijbehorende waarden in; voor dit voorbeeld--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId) Zie deze sectie voor een beschrijving van waarom we deze argumenten gebruiken.

      • TLS inschakelen: schakel dit selectievakje in om sterke TLS-verbindingen tussen Helm en Tiller in te schakelen.

      • CA-certificaat: geef een CA-certificaat op dat moet worden geüpload en gebruikt om certificaten voor Tiller en Helm-client uit te geven.

      • Certificaat: geef het Tiller-certificaat of helm-clientcertificaat op

      • Sleutel: geef de Tiller-sleutel of Helm-clientsleutel op

  8. Voeg op de pagina Variabelen van de pijplijn een variabele toe met de naam imageRepoName en stel de waarde in op de naam van de Opslagplaats voor Helm-installatiekopieën. Dit is meestal in de indeling example.azurecr.io/coderepository

  9. Sla de release-pijplijn op.

Argumenten die worden gebruikt in de Helm-upgradetaak

In de build-pijplijn wordt de containerinstallatiekopieën gelabeld met $(Build.BuildId) en deze wordt gepusht naar een Azure Container Registry. In een Helm-grafiek kunt u de details van de containerinstallatiekopieën, zoals de naam en tag, parametriseren, omdat dezelfde grafiek kan worden gebruikt om te implementeren in verschillende omgevingen. Deze waarden kunnen ook worden opgegeven in het bestand values.yaml of worden overschreven door een door de gebruiker opgegeven waardenbestand, dat op zijn beurt kan worden overschreven door --set parameters tijdens de installatie of upgrade van Helm.

In dit voorbeeld geven we de volgende argumenten door:

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

De waarde van $(imageRepoName) is ingesteld op de pagina Variabelen (of de sectie variabelen van uw YAML-bestand). U kunt deze ook rechtstreeks vervangen door de naam van de opslagplaats voor de installatiekopieën in het --set bestand argumentwaarde of values.yaml . Bijvoorbeeld:

  image:
    repository: VALUE_TO_BE_OVERRIDDEN
    tag: latest

Een ander alternatief is om de optie Waarden instellen van de taak in te stellen om de argumentwaarden op te geven als door komma's gescheiden sleutel-waardeparen.

Een release maken om uw app te implementeren

U bent nu klaar om een release te maken. Dit betekent dat u het proces van het uitvoeren van de release-pijplijn moet starten met de artefacten die door een specifieke build worden geproduceerd. Dit resulteert in het implementeren van de build:

  1. Kies + Release en selecteer Een release maken.

  2. Controleer in het deelvenster Een nieuwe release maken of de artefactversie die u wilt gebruiken, is geselecteerd en kies Maken.

  3. Kies de releasekoppeling in het informatiebalkbericht. Bijvoorbeeld: 'Release Release-1 is gemaakt'.

  4. Kies in de pijplijnweergave de statuskoppeling in de fasen van de pijplijn om de logboeken en agentuitvoer te bekijken.