Erstellen, Testen und Bereitstellen von Containern für den Azure Kubernetes Service (AKS) mithilfe von GitHub Actions

GitHub Actions bietet Ihnen die Flexibilität, einen automatisierten Workflow für den Softwareentwicklungs-Lebenszyklus zu erstellen. Sie können mehrere Kubernetes-Aktionen verwenden, um Container von Azure Container Registry (ACR) zu Azure Kubernetes Service (AKS) mit GitHub Actions bereitzustellen.

Voraussetzungen

GitHub Actions für AKS

Mit GitHub Actions können Sie Ihre Softwareentwicklungsworkflows innerhalb von GitHub automatisieren. Weitere Informationen finden Sie unter GitHub Actions für Azure.

Die folgende Tabelle enthält die verfügbaren Aktionen für AKS:

Name BESCHREIBUNG Weitere Informationen
azure/aks-set-context Legen Sie den AKS-Zielclusterkontext fest, den andere Aktionen verwenden sollen, oder führen Sie beliebige kubectl-Befehle aus. azure/aks-set-context
azure/k8s-set-context Legen Sie den Kubernetes-Zielclusterkontext fest, den andere Aktionen verwenden sollen, oder führen Sie beliebige kubectl-Befehle aus. azure/k8s-set-context
azure/k8s-bake Erstellen Sie eine Manifestdatei, die Sie für Bereitstellungen mithilfe von Helm, kustomize oder kompose verwenden möchten. azure/k8s-bake
azure/k8s-create-secret Erstellen Sie ein generisches Geheimnis oder docker-registry-Geheimnis im Kubernetes-Cluster. azure/k8s-create-secret
azure/k8s-deploy Stellen Sie Manifeste in Kubernetes-Clustern bereit. azure/k8s-deploy
azure/k8s-lint Überprüfen (Lint) Sie die Manifestdateien. azure/k8s-lint
azure/setup-helm Installieren Sie eine bestimmte Version der Helm-Binärdatei auf dem Runner. azure/setup-helm
azure/setup-kubectl Installiert eine bestimmte Version von kubectl auf dem Runner. azure/setup-kubectl
azure/k8s-artifact-substitute Aktualisieren Sie das Tag oder den Digest für Containerimages. azure/k8s-artifact-substitute
azure/aks-create-action Erstellen Sie einen AKS-Cluster mithilfe von Terraform. azure/aks-create-action
azure/aks-github-runner Richten Sie selbstgehostete Agents für GitHub Actions ein. azure/aks-github-runner
azure/acr-build Erstellt Container mithilfe von ACR. azure/acr-build

GitHub Actions mit AKS

Sie können z. B. GitHub Actions verwenden, um eine Anwendung auf Ihrem AKS-Cluster bereitzustellen, sobald eine Änderung in Ihr GitHub-Repository gepusht wird. In diesem Beispiel wird die Azure Vote-Anwendung verwendet.

Hinweis

In diesem Beispiel wird ein Dienstprinzipal für die Authentifizierung bei Ihrem ACR- und AKS-Cluster verwendet. Alternativ können Sie auch Open ID Connect (OIDC) konfigurieren und die Aktion azure/login aktualisieren, um OIDC zu verwenden. Weitere Informationen finden Sie unter Einrichten der Azure-Anmeldung mit OpenID Connect-Authentifizierung.

Forken und Aktualisieren des Repositorys

  1. Navigieren Sie zum Azure Vote-Repository, und wählen Sie Fork aus.

  2. Aktualisieren Sie die Datei azure-vote-all-in-one-redis.yaml so, dass Ihr ACR für das azure-vote-front-Image verwendet wird. Ersetzen Sie <registryName> durch den Namen Ihrer Registrierung.

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. Commiten Sie die aktualisierte azure-vote-all-in-one-redis.yaml-Datei für Ihr Repository.

Erstellen von Geheimnissen

  1. Erstellen Sie mithilfe des Befehls az ad sp create-for-rbac einen Dienstprinzipal, um mit der Rolle Contributor auf Ihre Ressourcengruppe zuzugreifen. Ersetzen Sie <SUBSCRIPTION_ID> durch die Abonnement-ID Ihres Azure-Kontos und <RESOURCE_GROUP> durch den Namen der Ressourcengruppe, die Ihren ACR enthält.

    az ad sp create-for-rbac \
        --name "ghActionAzureVote" \
        --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
        --role Contributor \
        --json-auth
    

    Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:

    {
      "clientId": <clientId>,
      "clientSecret": <clientSecret>,
      "subscriptionId": <subscriptionId>,
      "tenantId": <tenantId>,
      ...
    }
    
  2. Navigieren Sie zu den Einstellungen Ihres GitHub-Repositorys, und wählen Sie Sicherheit>Geheimnisse und Variablen>Aktionen aus.

  3. Wählen Sie für jedes Geheimnis Neues Repositorygeheimnis aus, und geben Sie den Namen und den Wert des Geheimnisses ein.

    Geheimnisname Geheimniswert
    AZURE_CREDENTIALS Die gesamte JSON-Ausgabe des az ad sp create-for-rbac-Befehls.
    service_principal Der Wert von <clientId>.
    service_principal_password Der Wert von <clientSecret>.
    Abonnement Der Wert von <subscriptionId>.
    tenant Der Wert von <tenantId>.
    Registrierung Der Name Ihrer Registry.
    repository azuredocs
    resource_group Der Name Ihrer Ressourcengruppe.
    cluster_name Der Name Ihres Clusters.

Weitere Informationen zum Erstellen von Geheimnissen finden Sie unter Verschlüsselte Geheimnisse.

Aktionsdatei erstellen

  1. Erstellen Sie in Ihrem Repository eine .github/workflows/main.yml-Datei, und fügen Sie den folgenden Inhalt ein:

    name: build_deploy_aks
    on:
      push:
        paths:
          - "azure-vote/**"
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout source code 
            uses: actions/checkout@v3
          - name: ACR build
            id: build-push-acr
            uses: azure/acr-build@v1
            with:
              service_principal: ${{ secrets.service_principal }}
              service_principal_password: ${{ secrets.service_principal_password }}
              tenant: ${{ secrets.tenant }}
              registry: ${{ secrets.registry }}
              repository: ${{ secrets.repository }}
              image:  azure-vote-front
              folder: azure-vote
              branch: master
              tag: ${{ github.sha }}
          - name: Azure login
            id: login
            uses: azure/login@v1.4.3
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
          - name: Set AKS context
            id: set-context
            uses: azure/aks-set-context@v3
            with:
              resource-group: '${{ secrets.resource_group }}' 
              cluster-name: '${{ secrets.cluster_name }}'
          - name: Setup kubectl
            id: install-kubectl
            uses: azure/setup-kubectl@v3
          - name: Deploy to AKS
            id: deploy-aks
            uses: Azure/k8s-deploy@v4
            with:
              namespace: 'default'
              manifests: |
                 azure-vote-all-in-one-redis.yaml
              images: '${{ secrets.registry }}.azurecr.io/${{ secrets.repository }}/azure-vote-front:${{ github.sha }}'
              pull-images: false 
    

    Der on-Abschnitt enthält das Ereignis, das die Aktion auslöst. In der Beispieldatei wird die Aktion ausgelöst, wenn eine Änderung in das Verzeichnis azure-vote gepusht wird.

    Der steps-Abschnitt enthält jede einzelne Aktion:

    1. Quellcode auschecken verwendet die Aktion „Auschecken“ von GitHub Actions, um das Repository zu klonen.
    2. ACR erstellen verwendet die Aktion „Erstellen“ von Azure Container Registry, um das Image zu erstellen und es in Ihre Registrierung hochzuladen.
    3. Azure-Anmeldung verwendet die Azure-Aktion „Anmelden“ für die Anmeldung bei Ihrem Azure-Konto.
    4. AKS-Kontext festlegen verwendet die Aktion „Kontext festlegen“ von Azure AKS, um den Kontext für Ihren AKS-Cluster festzulegen.
    5. kubectl einrichten verwendet die Aktion „Kubectl einrichten“ von Azure AKS, um kubectl auf Ihrem Runner zu installieren.
    6. In AKS bereitstellen verwendet die Aktion „Bereitstellen“ von Azure Kubernetes, um die Anwendung in Ihrem Kubernetes-Cluster bereitzustellen.
  2. Committen Sie die .github/workflows/main.yml-Datei in Ihr Repository.

  3. Um zu bestätigen, dass die Aktion funktioniert, aktualisieren Sie die azure-vote/azure-vote/config_file.cfg-Datei mit dem folgenden Inhalt:

    # UI Configurations
    TITLE = 'Azure Voting App'
    VOTE1VALUE = 'Fish'
    VOTE2VALUE = 'Dogs'
    SHOWHOST = 'false'
    
  4. Commiten Sie die aktualisierte azure-vote/azure-vote/config_file.cfg-Datei für Ihr Repository.

  5. Wählen Sie in Ihrem Repository Aktionen aus, und bestätigen Sie, dass ein Workflow ausgeführt wird. Vergewissern Sie sich dann, dass der Workflow mit einem grünen Häkchen versehen ist und die aktualisierte Anwendung in Ihrem Cluster bereitgestellt wurde.

Nächste Schritte

Überprüfen Sie die folgenden Startworkflows für AKS. Weitere Informationen finden Sie unter Verwenden von Startworkflows.