Exercício - Crie uma ação do GitHub para implantar no AKS

Concluído

Neste exercício, você concluirá as seguintes tarefas:

  • Aprimore a ação existente do GitHub para incluir um trabalho de implantação.
  • Verifique se as alterações são implantadas no cluster do Serviço Kubernetes do Azure (AKS).
  • Reverter a implantação.

Atualizar o manifesto do Kubernetes para o serviço do produto

Para implantar novas versões do serviço do produto eShop, edite o arquivo de product.yml para apontar para o Registro de Contêiner do Azure (ACR) usado na unidade anterior.

  1. No repositório bifurcado, selecione o code tabarquivo e, em seguida, selecione o product.yml arquivo.

  2. Para editar o arquivo, selecione o ícone de edição (lápis).

  3. Edite a linha:

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

    Substitua o [replace with your ACR name] pelo nome do seu ACR, por exemplo, acseshop186748394.

  4. No canto superior direito, selecione Confirmar alterações e , em seguida, na caixa de diálogo, selecione Confirmar alterações.

Criar a ação de implementação

O código YAML adiciona uma etapa do GitHub que:

Tem uma etapa que implanta novas imagens. Aqui estão os passos em um ubuntu-latest corredor:

  1. Faz check-out do repositório em que este arquivo está.
  2. O Logon do Azure entra no Azure com as credenciais da entidade de serviço.
  3. Configurar kubelogin para logon não interativo configura o arquivo kubeconfig para autenticação do Azure.
  4. Obter o contexto do conjunto de contexto do K8s define as credenciais do Serviço Kubernetes do Azure (AKS) no arquivo do .kube/config corredor.
  5. Implanta o aplicativo implanta o aplicativo no AKS, usando a imagem criada na etapa anterior e o arquivo de manifesto do Kubernetes que você editou anteriormente.

Conclua as seguintes etapas para criar uma ação do GitHub que implante o serviço de cupom:

  1. No repositório bifurcado, no code tab, selecione a .github/workflows guia.

  2. Selecione azure-kubernetes-service.yml.

  3. Para editar o arquivo, selecione o ícone de edição (lápis).

  4. Na parte inferior do arquivo, cole o seguinte código YAML no editor:

    
      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. No canto superior direito, selecione Confirmar alterações..., em seguida, na caixa de diálogo, selecione Confirmar alterações.

Acionar uma implementação

Atualizar o azure-kubernetes-service.yml arquivo e confirmar as alterações aciona automaticamente outra implantação. Agora veja como fazer uma alteração de código aciona outra implantação.

Você tem um novo produto que sua equipe de marketing gostaria de adicionar ao catálogo.

  1. No repositório bifurcado, no code tab, selecione a Products pasta.

  2. Selecione a pasta Data.

  3. Selecione o ProductDataContext.c arquivo.

  4. Para editar o arquivo, selecione o ícone de edição (lápis).

  5. Na parte inferior do arquivo, adicione um novo produto à matriz de produtos :

    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. No canto superior direito, selecione Confirmar alterações e , em seguida, na caixa de diálogo, selecione Confirmar alterações.

Monitorizar a implementação

  1. Para monitorar o progresso da implantação, selecione a Actions guia.

  2. Selecione a execução de fluxo de trabalho mais recente listada para o fluxo de trabalho de Build and deploy an app to AKS. O nome da execução é a mensagem de confirmação usada na etapa anterior.

  3. Selecione o trabalho para ver os deploy detalhes da execução deste fluxo de trabalho.

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

  4. No terminal, execute o seguinte comando para monitorar os pods de serviço de cupom em seu cluster AKS. O --selector sinalizador filtra a lista apenas para pods para o serviço de cupom, e o --watch sinalizador instrui kubectl a observar as alterações.

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

    Durante a implantação, uma variação da seguinte saída aparece:

    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
    

    Na saída anterior, observe que um novo pod productservice é criado. Quando o novo pod estiver pronto, o antigo será encerrado. Este processo torna a transição para a nova versão o mais estável possível.

Verificar o aplicativo

Conclua as seguintes etapas para verificar se seu aplicativo ainda funciona:

  • Veja a eShop implantada executando este comando no terminal:

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

    O comando acima retorna o endereço IP externo do aplicativo Web. Mantenha pressionada a tecla CTRL e selecione o link para abrir o aplicativo em uma nova guia.

Vá para a página de produtos para ver a nova tenda listada na parte inferior da página.

Reverter a implementação

Uma atenuação comum para problemas de produção é reverter para uma implantação em boas condições. O Kubernetes mantém um histórico de implantação que você pode usar para reverter para uma versão anterior do seu aplicativo.

No seu terminal, execute este comando para remover a nova tenda que você acabou de adicionar ao site:

kubectl rollout undo deployment/productservice

Deverá ver esta mensagem da consola:

deployment.apps/productservice rolled back

Atualize a página de produtos no seu navegador e a nova tenda não deve mais ser listada.

Nota

Em um cenário da vida real, você implanta os artefatos da compilação em vários ambientes. Por exemplo, pode ter ambientes de desenvolvimento, teste e preparação. Você pode acionar fluxos de trabalho de implantação por eventos como mesclar RPs. Você pode adicionar portas de qualidade ou aprovação, como a aprovação de relações públicas de uma parte interessada, para evitar implantações inesperadas na produção.

Verifique o seu conhecimento

1.

Qual é o melhor lugar para armazenar informações confidenciais, como credenciais, para as Ações do GitHub?

2.

Qual é a finalidade da criação de uma entidade de serviço do Azure Ative Directory para as Ações do GitHub usarem?

3.

Durante a implantação da atualização, por que o AKS cria um novo contêiner enquanto o antigo ainda está em execução?