Übung – Erstellen einer GitHub-Aktion zum Bereitstellen in AKS
- 10 Minuten
In dieser Übung führen Sie die folgenden Aufgaben aus:
- Verbessern Sie die vorhandene GitHub-Aktion, um einen Bereitstellungsauftrag einzuschließen.
- Überprüfen Sie, ob die Änderungen im Azure Kubernetes Service (AKS)-Cluster bereitgestellt werden.
- Rollback der Bereitstellung
Aktualisieren des Kubernetes-Manifests für den Produktdienst
Um neue Versionen des eShop-Produktdiensts bereitzustellen, bearbeiten Sie die product.yml Datei, um auf die Azure Container Registry (ACR) zu verweisen, die Sie in der vorherigen Einheit verwendet haben.
Wählen Sie in Ihrem Fork-Repository das code tab aus und dann die product.yml Datei.
Um die Datei zu bearbeiten, wählen Sie das Bearbeitungssymbol (Bleistift) aus.
Bearbeiten Sie die Zeile:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latestErsetzen Sie
[replace with your ACR name]durch den Namen Ihres ACR, z. B. acseshop186748394.Wählen Sie oben rechts Änderungen übernehmen... und dann im Dialogfeld Änderungen übernehmen aus.
Erstellen der Bereitstellungsaktion
Der YAML-Code fügt einen GitHub-Schritt hinzu, der einen Schritt enthält, der neue Images bereitstellt. Hier sind die Schritte in einem ubuntu-latest-Runner:
- Checkt das Repository aus, in dem sich diese Datei befindet.
- Azure Login meldet sich bei Azure an mit den Anmeldedaten des Dienstprincipals.
- 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.
- Stellt die Anwendung bereit, stellt die Anwendung in AKS bereit, wobei das im vorherigen Schritt integrierte Image und die Kubernetes-Manifestdatei verwendet werden, die Sie zuvor bearbeitet haben.
Führen Sie die folgenden Schritte aus, um eine GitHub-Aktion zu erstellen, die den Coupondienst bereitstellt:
Wählen Sie in Ihrem geforkten Repository auf code tab die Registerkarte .github/workflows aus.
Wählen Sie azure-kubernetes-service.ymlaus.
Um die Datei zu bearbeiten, wählen Sie das Bearbeitungssymbol (Bleistift) aus.
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: falseWählen Sie oben rechts Änderungen übernehmen... und dann im Dialogfeld Änderungen übernehmen aus.
Auslösen einer Bereitstellung
Durch das Aktualisieren der azure-kubernetes-service.yml Datei und das Commit 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 geforkten Repository auf code tab den Ordner Products aus.
Wählen Sie den Ordner Data aus.
Wählen Sie die ProductDataContext.c Datei aus.
Um die Datei zu bearbeiten, wählen Sie das Bearbeitungssymbol (Bleistift) aus.
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... und dann im Dialogfeld Änderungen übernehmen aus.
Überwachen der Bereitstellung
Um den Fortschritt der Bereitstellung zu überwachen, wählen Sie die Actions Registerkarte aus.
Wählen Sie die neueste Workflowausführung aus, die für den Build and deploy an app to AKS Workflow aufgeführt ist. 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.
Führen Sie im Terminal den folgenden Befehl aus, um die Coupondienst-Pods in Ihrem AKS-Cluster zu überwachen. Das
--selector-Flag filtert die Liste nur auf Pods für den Gutscheindienst, und das--watch-Flag weistkubectlan, auf Änderungen zu überwachen.kubectl get pods --selector=app=productservice --watchWä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 19mBeachten Sie in der vorherigen Ausgabe, dass ein neuer ProductService-Pod erstellt wird. Wenn der neue Pod bereit ist, wird das alte beendet. Dieser Prozess macht den Ü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 Befehl gibt die externe IP-Adresse für die Web-App zurück. Halten Sie STRG gedrückt, und wählen Sie den Link aus, um die App 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 App 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. Sie können z. B. Entwicklungs-, Test- und Stagingumgebungen haben. 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.
