Cvičení – vytvoření akce GitHubu pro nasazení do AKS

Dokončeno

V tomto cvičení dokončíte následující úkoly:

  • Vylepšete stávající akci GitHubu tak, aby zahrnovala úlohu nasazení.
  • Ověřte, že se změny nasazují do clusteru Azure Kubernetes Service (AKS).
  • Vraťte nasazení zpět.

Aktualizace manifestu Kubernetes pro produktovou službu

Pokud chcete nasadit nové verze produktové služby eShop, upravte soubor product.yml tak, aby odkazovat na službu Azure Container Registry (ACR), kterou jste použili v předchozí lekci.

  1. V rozvětvovém úložišti vyberte soubor code taba pak ho product.yml vyberte.

  2. Pokud chcete soubor upravit, vyberte ikonu pro úpravy (tužku).

  3. Upravte řádek:

    containers:
      - image: [replace with your ACR name].azurecr.io/productservice:latest
    

    [replace with your ACR name] Nahraďte názvem služby ACR, například acseshop186748394.

  4. V pravém horním rohu vyberte Potvrdit změny... pak v dialogovém okně vyberte Potvrdit změny.

Vytvoření zaváděcí akce

Kód YAML přidá krok GitHubu, který:

Obsahuje jeden krok, který nasazuje nové image. Tady je postup ve spouštěči ubuntu-latest :

  1. Zkontroluje úložiště, ve které je tento soubor.
  2. Přihlášení k Azure se přihlásí k Azure pomocí přihlašovacích údajů instančního objektu.
  3. Nastavení kubeloginu pro neinteraktivní přihlášení konfiguruje soubor kubeconfig pro ověřování Azure.
  4. Získání kontextové sady K8s nastaví přihlašovací údaje služby Azure Kubernetes Service (AKS) v souboru spouštěče .kube/config .
  5. Nasadí aplikaci do AKS pomocí image vytvořené v předchozím kroku a souboru manifestu Kubernetes, který jste upravili dříve.

Provedením následujících kroků vytvořte akci GitHubu, která nasadí kuponovou službu:

  1. Ve forku úložiště vyberte .github/workflows na kartě code tabkartu.

  2. Vyberte možnost azure-kubernetes-service.yml.

  3. Pokud chcete soubor upravit, vyberte ikonu pro úpravy (tužku).

  4. V dolní části souboru vložte do editoru následující kód YAML:

    
      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
    
    
  5. V pravém horním rohu vyberte Potvrdit změny... a pak v dialogovém okně vyberte Potvrdit změny.

Aktivace nasazení

azure-kubernetes-service.yml Aktualizace souboru a potvrzení změn automaticky aktivuje jiné nasazení. Teď se podívejte, jak změna kódu aktivuje jiné nasazení.

Máte nový produkt, který chce marketingový tým přidat do katalogu.

  1. V rozvětvovém úložišti code tabvyberte složku Products .

  2. Vyberte složku Data.

  3. ProductDataContext.c Vyberte soubor.

  4. Pokud chcete soubor upravit, vyberte ikonu pro úpravy (tužku).

  5. V dolní části souboru přidejte nový produkt do pole produktů :

    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" },
    
  6. V pravém horním rohu vyberte Potvrdit změny... pak v dialogovém okně vyberte Potvrdit změny.

Monitorování nasazení

  1. Pokud chcete monitorovat průběh nasazení, vyberte Actions kartu.

  2. Vyberte nejnovější běh pracovního postupu Build and deploy an app to AKS. Název spuštění je zpráva potvrzení, kterou jste použili v předchozím kroku.

  3. deploy Výběrem úlohy zobrazíte podrobnosti o spuštění tohoto pracovního postupu.

    Screenshot that shows the deploy job selected with a list of all the steps.

  4. V terminálu spusťte následující příkaz, který monitoruje pody kuponové služby v clusteru AKS. Příznak --selector filtruje seznam jenom na pody pro kuponovou službu a příznak --watch dává pokyn kubectl , aby sledoval změny.

    kubectl get pods --selector=app=productservice --watch
    

    Během nasazení se zobrazí varianta následujícího výstupu:

    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
    

    V předchozím výstupu si všimněte, že se vytvoří nový pod productservice . Až bude nový pod připravený, starý pod se ukončí. Díky tomuto procesu bude přechod na novou verzi co nejplynulejší.

Ověření aplikace

Provedením následujících kroků ověřte, že vaše aplikace stále funguje:

  • Spuštěním tohoto příkazu v terminálu zobrazte nasazený eShop:

    echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    

    Výše uvedený příkaz vrátí externí IP adresu webové aplikace. Podržte klávesu CTRL a vyberte odkaz, aby se aplikace otevřela na nové kartě.

Přejděte na stránku produktů a zobrazte nový stan uvedený v dolní části stránky.

Vrácení nasazení

Jedním z běžných zmírnění problémů v produkčním prostředí je vrátit se ke známému dobrému nasazení. Kubernetes udržuje historii nasazení, kterou můžete použít k vrácení zpět na předchozí verzi aplikace.

Spuštěním tohoto příkazu v terminálu odeberte nový stan, který jste právě přidali na web:

kubectl rollout undo deployment/productservice

Měla by se zobrazit tato zpráva konzoly:

deployment.apps/productservice rolled back

Aktualizujte stránku produktů v prohlížeči a nový stan by už neměl být uvedený.

Poznámka:

V reálném scénáři nasadíte artefakty sestavení do více prostředí. Můžete mít třeba vývojové, testovací a přípravné prostředí. Pracovní postupy nasazení můžete aktivovat událostmi, jako je sloučení žádostí o přijetí změn. Pokud chcete zabránit neočekávaným nasazením do produkčního prostředí, můžete přidat kvalitu nebo schvalovací brány, jako je schválení žádostí o přijetí změn účastníků.

Kontrola znalostí

1.

Jaké je nejlepší místo pro ukládání citlivých informací, jako jsou přihlašovací údaje, pro GitHub Actions?

2.

Jaký je účel vytvoření instančního objektu Azure Active Directory pro GitHub Actions?

3.

Proč AKS během nasazování upgradu vytvoří nový kontejner, zatímco starý kontejner stále běží?