Teilen über


Erstellen und Bereitstellen in Azure Kubernetes Service mit Azure Pipelines

Azure DevOps Services

Verwenden Sie Azure Pipelines für das automatische Bereitstellen in Azure Kubernetes Service (AKS). Mit Azure Pipelines können Sie mithilfe von Azure DevOps mit Continuous Integration (CI) und Continuous Delivery (CD) Lösungen erstellen, testen und bereitstellen.

In diesem Artikel erfahren Sie, wie Sie eine Pipeline erstellen, die Ihre App kontinuierlich erstellt und bereitstellt. Sobald Sie Ihren Code in einem Repository ändern, das ein Dockerfile enthält, werden die Images an Ihre Azure Container Registry-Instanz gepusht und die Manifeste werden anschließend in Ihrem AKS-Cluster bereitgestellt.

Voraussetzungen

Abrufen des Codes

Forken Sie das folgende Repository, das eine Beispielanwendung und ein Dockerfile enthält:

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

Erstellen der Azure-Ressourcen

Melden Sie sich beim Azure-Portal an, und wählen Sie dann in der oberen rechten Ecke die Schaltfläche Cloud Shell aus. Verwenden Sie die Azure CLI oder PowerShell, um einen AKS-Cluster zu erstellen.

Erstellen einer Containerregistrierung

# 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

Anmelden bei Azure Pipelines

Melden Sie sich bei Azure Pipelines an. Nach der Anmeldung wechselt Ihr Browser zu https://dev.azure.com/my-organization-name und zeigt Ihr Azure DevOps-Dashboard an.

Erstellen Sie in Ihrer ausgewählten Organisation ein Projekt. Sollten in Ihrer Organisation noch keine Projekte vorhanden sein, wird der Bildschirm Erstellen Sie als ersten Schritt ein Projekt. angezeigt. Wählen Sie andernfalls in der rechten oberen Ecke des Dashboards die Schaltfläche Projekt erstellen aus.

Erstellen der Pipeline

Verbinden und Auswählen Ihres Repositorys

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie zu Ihrem Projekt.

  2. Navigieren Sie zu Pipelines, und wählen Sie Neue Pipeline aus.

  3. Führen Sie die Schritte des Assistenten aus. Dabei wählen Sie zuerst GitHub als Speicherort Ihres Quellcodes aus.

  4. Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.

  5. Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Repository aus.

  6. Sie werden möglicherweise zu GitHub weitergeleitet, um die Azure Pipelines-App zu installieren. Wählen Sie in diesem Fall Genehmigen & installieren aus.

  7. Wählen Sie In Azure Kubernetes Service bereitstellen aus.

  8. Wenn Sie dazu aufgefordert werden, wählen Sie das Abonnement aus, in dem Sie Ihre Registrierung und Ihren Cluster erstellt haben.

  9. Wählen Sie den Cluster myapp aus.

  10. Wählen Sie unter Namespace die Option Vorhanden und dann Standard aus.

  11. Wählen Sie den Namen Ihrer Containerregistrierung aus.

  12. Sie können den Imagenamen auf dem Standardwert belassen.

  13. Legen Sie den Dienstport auf 8080 fest.

  14. Legen Sie das Kontrollkästchen Prüfungs-App für Pull Requests aktivieren für die Prüfungs-App-bezogene Konfiguration so fest, dass sie in dem Pipeline-YAML-Code enthalten ist, der in nachfolgenden Schritten automatisch generiert wird.

  15. Wählen Sie Überprüfen und konfigurieren aus.

    Während Azure Pipelines Ihre Pipeline erstellt, führt der Prozess folgende Schritte aus:

    • Erstellt eine Dienstverbindung für Docker-Registrierung, damit Ihre Pipeline Images in Ihre Containerregistrierung pushen kann.

    • Erstellt eine Umgebung und eine Kubernetes-Ressource innerhalb der Umgebung. Bei einem RBAC-fähigen Cluster erstellt die erstellte Kubernetes-Ressource implizit ServiceAccount- und RoleBinding-Objekte im Cluster, sodass das erstellte ServiceAccount keine Vorgänge außerhalb des ausgewählten Namespace ausführen kann.

    • Generiert eine Datei azure-pipelines.yml, die Ihre Pipeline definiert.

    • Generiert Kubernetes-Manifestdateien. Diese Dateien werden generiert, indem die Vorlagen deployment.yml und service.yml basierend auf der von Ihnen getroffenen Auswahl aktiviert werden. Wenn Sie so weit sind, wählen Sie Speichern und ausführen aus.

  16. Klicken Sie auf Speichern und ausführen.

  17. Sie können die Commit-Nachricht in einen Text wie Pipeline zu unserem Repository hinzufügen ändern. Wenn Sie so weit sind, wählen Sie Speichern und ausführen aus, um die neue Pipeline in Ihr Repository zu committen, und beginnen Sie dann mit der ersten Ausführung Ihrer neuen Pipeline.

Beobachten der App-Bereitstellung

Während Ihre Pipeline ausgeführt wird, sehen Sie die Buildphase und dann die Bereitstellungsphase von blau (wird ausgeführt) zu grün (abgeschlossen) wechseln. Sie können die Phasen und Aufträge auswählen, um ihre Pipeline in Aktion zu sehen.

Hinweis

Wenn Sie einen von Microsoft gehosteten Agent verwenden, müssen Sie Ihrer Firewall den IP-Adressbereich des von Microsoft gehosteten Agents hinzufügen. Rufen Sie die wöchentliche Liste der IP-Adressbereiche aus der wöchentlichen JSON-Datei ab, die jeden Mittwoch veröffentlicht wird. Die neuen IP-Adressbereiche treten am folgenden Montag in Kraft. Weitere Informationen finden Sie unter Von Microsoft gehostete Agents. Um die IP-Adressbereiche zu ermitteln, die für Ihre Azure DevOps-Organisation erforderlich sind, informieren Sie sich über das Ermitteln der möglichen IP-Adressbereiche für von Microsoft gehostete Agents.

Nachdem die Pipeline ausgeführt wurde, können Sie die Vorgänge untersuchen und anschließend die Bereitstellung der App beobachten. Gehen Sie in der Pipelinezusammenfassung wie folgt vor:

  1. Wählen Sie die Registerkarte Umgebungen aus.

  2. Wählen Sie Umgebung anzeigen aus.

  3. Wählen Sie die Instanz Ihrer App für den Namespace aus, in dem die Bereitstellung erfolgte. Wenn Sie die Standardwerte verwendet haben, ist dies die App myapp im Namespace default.

  4. Wählen Sie die Registerkarte Dienste aus.

  5. Wählen Sie die externe IP-Adresse aus, und kopieren Sie sie in Ihre Zwischenablage.

  6. Öffnen Sie eine neue Registerkarte oder ein neues Fenster im Browser, und geben Sie „<IP-Adresse>:8080“ ein.

Wenn Sie unsere Beispiel-App erstellen, wird Hello World in Ihrem Browser angezeigt.

Erstellung der Pipeline

Nachdem Sie die Optionen ausgewählt und anschließend die Pipeline überprüft und konfiguriert haben, hat Azure Pipelines mithilfe der Vorlage In Azure Kubernetes Service bereitstellen eine Pipeline für Sie erstellt.

In der Buildphase wird die Docker-Aufgabe verwendet, um das Image zu erstellen und an Azure Container Registry zu 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'

Der Bereitstellungsauftrag verwendet die Kubernetes-Manifestaufgabe, um das imagePullSecret zu erstellen, das von Kubernetes-Clusterknoten zum Abrufen aus der Azure Container Registry-Ressource benötigt wird. Manifestdateien werden dann von der Kubernetes-Manifestaufgabe für die Bereitstellung im Kubernetes-Cluster verwendet. Die Manifestdateien service.yml und deployment.yml wurden generiert, als Sie die Vorlage Bereitstellen für Azure Kubernetes Service verwendet haben.

- 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@1
            displayName: Create imagePullSecret
            inputs:
              action: 'createSecret'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              secretType: 'dockerRegistry'
              secretName: '$(imagePullSecret)'
              dockerRegistryEndpoint: '$(dockerRegistryServiceConnection)'

          - task: KubernetesManifest@1
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: 'deploy'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              containers: '$(containerRegistry)/$(imageRepository):$(tag)'
              imagePullSecrets: '$(imagePullSecret)'

Bereinigen von Ressourcen

Wenn Sie die erstellten Ressourcen nicht mehr benötigen, können Sie sie mit dem folgenden Befehl löschen:

az group delete --name myapp-rg

Geben Sie y ein, wenn Sie dazu aufgefordert werden.