Ćwiczenie — tworzenie akcji usługi GitHub w celu wdrożenia w usłudze AKS
W tym ćwiczeniu wykonasz następujące zadania:
- Rozszerz istniejącą akcję usługi GitHub, aby uwzględnić zadanie wdrożenia.
- Sprawdź, czy zmiany są wdrażane w klastrze usługi Azure Kubernetes Service (AKS).
- Wycofaj wdrożenie.
Aktualizowanie manifestu platformy Kubernetes dla usługi produktu
Aby wdrożyć nowe wersje usługi produktu eShop, zmodyfikuj plik product.yml , aby wskazać usługę Azure Container Registry (ACR) użytą w poprzedniej lekcji.
W rozwidlonym repozytorium wybierz plik code tab, a następnie wybierz product.yml plik.
Aby edytować plik, wybierz ikonę edycji (ołówek).
Edytuj wiersz:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest
Zastąp ciąg
[replace with your ACR name]
nazwą rekordu ACR, na przykład acseshop186748394.W prawym górnym rogu wybierz pozycję Zatwierdź zmiany... a następnie w oknie dialogowym wybierz pozycję Zatwierdź zmiany.
Tworzenie akcji wdrożenia
Kod YAML dodaje krok usługi GitHub, który:
Ma jeden krok, który wdraża nowe obrazy. Oto kroki modułu uruchamiającego ubuntu-latest
:
- Wyewidencjonuj repozytorium, w których znajduje się ten plik.
- Logowanie do platformy Azure loguje się na platformie Azure przy użyciu poświadczeń jednostki usługi.
- Konfigurowanie narzędzia kubelogin na potrzeby logowania nieinterakcyjnego konfiguruje plik kubeconfig na potrzeby uwierzytelniania platformy Azure.
- Pobieranie kontekstu zestawu kontekstowego K8s ustawia poświadczenia usługi Azure Kubernetes Service (AKS) w pliku modułu .kube/config uruchamiającego.
- Wdraża aplikację w usłudze AKS przy użyciu obrazu wbudowanego w poprzednim kroku i edytowanego wcześniej pliku manifestu Kubernetes.
Wykonaj następujące kroki, aby utworzyć akcję usługi GitHub, która wdraża usługę kuponową:
W rozwidlonym repozytorium na code tabkarcie wybierz kartę .github/workflows .
Wybierz opcję azure-kubernetes-service.yml.
Aby edytować plik, wybierz ikonę edycji (ołówek).
W dolnej części pliku wklej następujący kod YAML do edytora:
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 prawym górnym rogu wybierz pozycję Zatwierdź zmiany..., a następnie w oknie dialogowym wybierz pozycję Zatwierdź zmiany.
Wyzwalanie wdrożenia
azure-kubernetes-service.yml Aktualizowanie pliku i zatwierdzanie zmian powoduje automatyczne wyzwolenie innego wdrożenia. Teraz zobacz, jak wprowadzenie zmiany kodu wyzwala kolejne wdrożenie.
Masz nowy produkt, który twój zespół marketingowy chce dodać do katalogu.
W rozwidlonym repozytorium wybierz folder w folderze code tabProducts .
Wybierz folder Data.
ProductDataContext.c Wybierz plik.
Aby edytować plik, wybierz ikonę edycji (ołówek).
W dolnej części pliku dodaj nowy produkt do tablicy products :
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 prawym górnym rogu wybierz pozycję Zatwierdź zmiany... a następnie w oknie dialogowym wybierz pozycję Zatwierdź zmiany.
Monitorowanie wdrożenia
Aby monitorować postęp wdrożenia, wybierz kartę Actions .
Wybierz najnowszy przebieg przepływu pracy wymieniony dla przepływu pracy Build and deploy an app to AKS. Nazwa przebiegu to komunikat zatwierdzenia użyty w poprzednim kroku.
Wybierz zadanie, deploy aby wyświetlić szczegółowe informacje dotyczące tego przebiegu przepływu pracy.
W terminalu uruchom następujące polecenie, aby monitorować zasobniki usługi kuponowej w klastrze usługi AKS. Flaga
--selector
filtruje listę tylko do zasobników dla usługi kuponu, a flaga--watch
nakazujekubectl
obserwowanie zmian.kubectl get pods --selector=app=productservice --watch
Podczas wdrażania zostanie wyświetlona odmiana następujących danych wyjściowych:
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
W poprzednich danych wyjściowych zwróć uwagę, że zostanie utworzony nowy zasobnik usługi productservice . Gdy nowy zasobnik będzie gotowy, stary zostanie zakończony. Ten proces sprawia, że przejście do nowej wersji jest jak najpłynniejsze.
Weryfikowanie aplikacji
Wykonaj następujące kroki, aby sprawdzić, czy aplikacja nadal działa:
Wyświetl wdrożony sklep eShop, uruchamiając to polecenie w terminalu:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Powyższe polecenie zwraca zewnętrzny adres IP aplikacji internetowej. Przytrzymaj klawisze CTRL i wybierz link, aby otworzyć aplikację na nowej karcie.
Przejdź do strony produktów, aby wyświetlić nowy namiot wymieniony w dolnej części strony.
Wycofywanie wdrożenia
Jednym z typowych problemów związanych z produkcją jest przywrócenie znanego dobrego wdrożenia. Platforma Kubernetes utrzymuje historię wdrażania, której można użyć do wycofania poprzedniej wersji aplikacji.
W terminalu uruchom to polecenie, aby usunąć nowy namiot, który właśnie został dodany do witryny internetowej:
kubectl rollout undo deployment/productservice
Powinien zostać wyświetlony następujący komunikat konsoli:
deployment.apps/productservice rolled back
Odśwież stronę produktów w przeglądarce, a nowy namiot nie powinien już być wyświetlany.
Uwaga
W rzeczywistym scenariuszu wdrażasz artefakty kompilacji w wielu środowiskach. Na przykład mogą istnieć środowiska deweloperskie, testowe i przejściowe. Przepływy pracy wdrażania można wyzwalać według zdarzeń, takich jak scalanie żądania ściągnięcia. Możesz dodać bramy dotyczące jakości lub zatwierdzenia, takie jak zatwierdzenie żądania ściągnięcia uczestnika projektu, aby zapobiec nieoczekiwanym wdrożeniom w środowisku produkcyjnym.