Exercício - Crie uma ação do GitHub para implantar no AKS
- 10 minutos
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 implementação.
Atualizar o manifesto do Kubernetes para o serviço de produto
Para desplegar novas versões do serviço de produto eShop, edite o ficheiro product.yml para que aponte para o Registro de Contêiner do Azure (ACR) utilizado na unidade anterior.
No repositório bifurcado, selecione o code tabe, em seguida, selecione o arquivo product.yml.
Para editar o arquivo, selecione o ícone de edição (lápis).
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.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 implantaçã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 corredor ubuntu-latest
:
- Faz check-out do repositório em que este arquivo está.
- inicia sessão no Azure com as credenciais da entidade de serviço.
- Configurar kubelogin para logon não interativo configura o arquivo kubeconfig para autenticação do Azure.
- Obter o contexto de K8s define as credenciais do Serviço Kubernetes do Azure (AKS) no arquivo de execução no .kube/config.
- 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:
No seu repositório bifurcado, no code tab, selecione o separador .github/workflows.
Selecione azure-kubernetes-service.yml.
Para editar o arquivo, selecione o ícone de edição (lápis).
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
No canto superior direito, selecione Confirmar alterações..., em seguida, na caixa de diálogo, selecione Confirmar alterações.
Desencadear uma implantação
Atualizar o arquivo azure-kubernetes-service.yml 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.
No seu repositório ramificado, no code tab, selecione a pasta Products.
Selecione a pasta Data.
Selecione o arquivo ProductDataContext.c.
Para editar o arquivo, selecione o ícone de edição (lápis).
Na parte inferior do ficheiro, 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" },
No canto superior direito, selecione Confirmar alterações e , em seguida, na caixa de diálogo, selecione Confirmar alterações.
Monitorar a implantação
Para monitorar o progresso da implantação, selecione a guia Actions.
Selecione a execução mais recente do fluxo de trabalho listada para o fluxo de trabalho Build and deploy an app to AKS. O nome da execução é a mensagem de confirmação usada na etapa anterior.
Selecione o trabalho deploy para ver os detalhes da execução deste fluxo de trabalho.
No terminal, execute o seguinte comando para monitorar os pods de serviço de cupom em seu cluster AKS. O sinalizador
--selector
filtra a lista somente para pods do serviço de cupom, e o sinalizador--watch
instruikubectl
a monitorizar 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 suave 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 implantaçã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.
Observação
Em um cenário da vida real, você implanta os artefatos da compilação em vários ambientes. Por exemplo, você pode ter ambientes de desenvolvimento, teste e preparação. Você pode acionar fluxos de trabalho de implementação por meio de eventos como mesclar PRs. 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.