Übung: Erstellen einer GitHub-Aktion für die Bereitstellung in AKS
In dieser Übung führen Sie die folgenden Aufgaben aus:
- Erweitern Sie die bestehende GitHub-Aktion um einen Bereitstellungsauftrag.
- Sicherstellen, dass die Änderungen im AKS-Cluster (Azure Kubernetes Service) bereitgestellt werden
- Rollback der Bereitstellung
Aktualisieren des Kubernetes-Manifests für den Produktdienst
Um neue Versionen des eShop-Produktdienstes bereitzustellen, bearbeiten Sie die Datei product.yml so, dass sie auf die Azure Container Registry (ACR) verweist, die Sie in der vorherigen Einheit verwendet haben.
Wählen Sie in Ihrem Forked-Repository die code tab-Datei und dann die product.yml-Datei aus.
Um die Datei zu bearbeiten, wählen Sie das Bearbeitungssymbol (Bleistift).
Bearbeiten Sie die Zeile:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest
Ersetzen Sie den
[replace with your ACR name]
durch Namen Ihres ACR, zum Beispielacseshop186748394.Wählen Sie oben rechts Änderungen übernehmen... aus, dann im Dialogfeld Änderungen übernehmen aus.
Erstellen der Bereitstellungsaktion
Der YAML-Code fügt einen GitHub-Schritt hinzu, der:
Über einen Schritt verfügt, der neue Bilder bereitstellt. Hier sind die Schritte in einem ubuntu-latest
-Runner:
- Überprüft das Repository, in dem sich diese Datei befindet.
- Azure Login meldet sich bei Azure mit den Anmeldedaten des Dienstprinzipals an.
- Das Einrichten von Kubelogin für nicht interaktive Anmeldung konfiguriert die Kubeconfig-Datei für die Azure-Authentifizierung.
- Abrufen des Kontextsatzes von K8s-Kontext legt die Azure Kubernetes Service (AKS)-Anmeldeinformationen in der Datei des Runners .kube/config fest.
- Anwendung bereitstellen stellt die Anwendung auf AKS bereit, wobei das im vorherigen Schritt erstellte Bild und die zuvor bearbeitete Kubernetes-Manifestdatei verwendet werden.
Führen Sie die folgenden Schritte aus, um eine GitHub-Aktion zu erstellen, die den Gutscheindienst bereitstellt:
Wählen Sie in Ihrem Forked Repository auf code tab die Registerkarte .github/workflows aus.
Wählen Sie azure-kubernetes-service.yml aus.
Um die Datei zu bearbeiten, wählen Sie das Bearbeitungssymbol (Bleistift).
Fügen Sie unten in der Datei den folgenden YAML-Code in den Editor ein:
deploy: permissions: actions: read contents: read id-token: write runs-on: ubuntu-latest needs: [buildImage] steps: # Checks out the repository this file is in - uses: actions/checkout@v3 # Logs in with your Azure credentials - name: Azure login uses: azure/login@v1.4.6 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' # Use kubelogin to configure your kubeconfig for Azure auth - name: Set up kubelogin for non-interactive login uses: azure/use-kubelogin@v1 with: kubelogin-version: 'v0.0.25' # Retrieves your Azure Kubernetes Service cluster's kubeconfig file - name: Get K8s context uses: azure/aks-set-context@v3 with: resource-group: ${{ env.RESOURCE_GROUP }} cluster-name: ${{ env.CLUSTER_NAME }} admin: 'false' use-kubelogin: 'true' # Deploys application based on given manifest file - name: Deploys application uses: Azure/k8s-deploy@v4 with: action: deploy manifests: ${{ env.DEPLOYMENT_MANIFEST_PATH }} images: | ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} pull-images: false
Wählen Sie oben rechts Änderungen übernehmen... aus, dann im Dialogfeld Änderungen übernehmen aus.
Auslösen einer Bereitstellung
Durch das Aktualisieren der azure-kubernetes-service.yml-Datei und das Übernehmen der Änderungen wird automatisch eine andere Bereitstellung ausgelöst. Sehen Sie sich nun an, wie eine Codeänderung eine andere Bereitstellung auslöst.
Sie haben ein neues Produkt, das Ihr Marketingteam dem Katalog hinzufügen möchte.
Wählen Sie in Ihrem Forked Repository auf code tab den Ordner Products aus.
Wählen Sie den Ordner Data aus.
Wählen Sie die Datei ProductDataContext.c aus.
Um die Datei zu bearbeiten, wählen Sie das Bearbeitungssymbol (Bleistift).
Fügen Sie unten in der Datei dem Produktarray ein neues Produkt hinzu:
new Product { Name = "Camping Tent 2", Description = "This updated tent is improved and cheaper, perfect for your next trip.", Price = 79.99m, ImageUrl = "product9.png" },
Wählen Sie oben rechts Änderungen übernehmen... aus, dann im Dialogfeld Änderungen übernehmen aus.
Überwachen der Bereitstellung
Um den Fortschritt der Bereitstellung zu überwachen, wählen Sie die Registerkarte Actions aus.
Wählen Sie die letzte Workflowausführung aus, die für den Build and deploy an app to AKS-Workflow aufgeführt wird. Die im vorherigen Schritt verwendete Commitnachricht wird zum Namen der Ausführung.
Wählen Sie den deploy-Auftrag aus, um Details für diese Workflowausführung anzuzeigen.
Kehren Sie zum Terminal zurück, und führen Sie den folgenden Befehl aus, um die Coupondienstpods in Ihrem AKS-Cluster zu überwachen. Das
--selector
-Flag filtert die Liste nur auf Pods für den Gutscheindienst, und das--watch
-Flag weistkubectl
an, auf Änderungen zu überwachen.kubectl get pods --selector=app=productservice --watch
Während der Bereitstellung wird eine Variation der folgenden Ausgabe angezeigt:
NAME READY STATUS RESTARTS AGE productservice-7979d4c47-xlcrr 1/1 Running 0 17m productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 ContainerCreating 0 0s productservice-ff98b6d8d-7wmsh 1/1 Running 0 4s productservice-7979d4c47-xlcrr 1/1 Terminating 0 19m
Beachten Sie in der vorherigen Ausgabe, dass ein neuer ProductService-Pod erstellt wird. Wenn der neue Pod fertig ist, wird der alte beendet. Durch diesen Vorgang erfolgt der Übergang zur neuen Version so reibungslos wie möglich.
Überprüfen der App
Führen Sie die folgenden Schritte aus, um zu überprüfen, ob Ihre App weiterhin funktioniert:
Zeigen Sie den bereitgestellten eShop an, indem Sie diesen Befehl im Terminal ausführen:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Der obige Befehl gibt die externe IP-Adresse für die Webanwendung zurück. Halten Sie STRG gedrückt und wählen Sie den Link aus, um die Anwendung auf einer neuen Registerkarte zu öffnen.
Wechseln Sie zur Produktseite, um das neue Zelt anzuzeigen, das unten auf der Seite aufgeführt ist.
Rollback der Bereitstellung
Bei Produktionsproblemen besteht eine häufige Entschärfung darin, eine Bereitstellung auf eine als gut funktionierend bekannte Bereitstellung zurückzusetzen. Kubernetes verwaltet einen Bereitstellungsverlauf, den Sie zum Zurücksetzen auf eine frühere Version Ihrer Anwendung verwenden können.
Führen Sie in Ihrem Terminal diesen Befehl aus, um das neue Zelt zu entfernen, das Sie soeben der Website hinzugefügt haben:
kubectl rollout undo deployment/productservice
Diese Konsolenmeldung sollte angezeigt werden:
deployment.apps/productservice rolled back
Aktualisieren Sie die Produktseite in Ihrem Browser und das neue Zelt sollte nicht mehr aufgeführt werden.
Hinweis
In einem realen Szenario stellen Sie die Artefakte des Builds in mehreren Umgebungen bereit. Beispielsweise könnten Sie Entwicklungs-, Test- und Stagingumgebungen verwenden. Sie können Bereitstellungsworkflows durch Ereignisse wie das Zusammenführen von PRs auslösen. Qualitäts- oder Genehmigungsgates, z. B. die PR-Genehmigung eines Beteiligten, können hinzugefügt werden, um unerwartete Bereitstellungen in der Produktion zu verhindern.