Exercício – Criar uma ação do GitHub para implantar no AKS
Neste exercício, você vai concluir as seguintes tarefas:
- Aprimore a ação existente do GitHub para incluir um trabalho de implantação.
- Verificar se as alterações são implantadas no cluster do AKS (Serviço de Kubernetes do Azure).
- Reverter a implantação.
Atualizar o manifesto do Kubernetes para o serviço do produto
Para implantar novas versões do serviço de produto da eShop, edite o arquivo product.yml para apontar para o Registro de Contêiner do Azure (ACR) que você usou na unidade anterior.
Em seu repositório bifurcado, selecione code tab e, 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 ACR, por exemplo, acseshop186748394.No canto superior direito, selecione Fazer commit das alterações... em seguida, na caixa de diálogo, selecione Fazer commit das 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. Estas são as etapas em um executor ubuntu-latest
:
- Verifica o repositório no qual este arquivo se encontra.
- Logon do Azure entra no Azure com as credenciais da entidade de serviço.
- Configurar o kubelogin para logon não interativo configura o arquivo kubeconfig para autenticação do Azure.
- Obter o contexto do K8s define as credenciais do AKS (Serviço de Kubernetes do Azure) no arquivo do executor .kube/config.
- Implantar 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.
Realize as seguintes etapas para criar uma ação do GitHub que implanta o serviço de cupom:
No repositório bifurcado, no code tab selecione a guia .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... e, na caixa de diálogo, selecione Confirmar alterações.
Disparar uma implantação
Atualizar o arquivo azure-kubernetes-service.yml e fazer commit das alterações dispara automaticamente outra implantação. Agora veja como a alteração do código dispara outra implementação.
Você tem um novo produto que sua equipe de marketing gostaria de adicionar ao catálogo.
No repositório bifurcado, 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 arquivo, adicione um novo produto à matriz 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" },
No canto superior direito, selecione Fazer commit das alterações... em seguida, na caixa de diálogo, selecione Fazer commit das alterações.
Monitorar a implantação
Para monitorar o andamento da implantação, selecione a guia Actions.
Selecione a execução do fluxo de trabalho mais recente listada para o fluxo de trabalho Build and deploy an app to AKS. O nome da execução é a mensagem de commit usada na etapa anterior.
Selecione o trabalho deploy para ver os detalhes desta execução do fluxo de trabalho.
No terminal, execute o comando a seguir para monitorar os pods do serviço de cupom no cluster do AKS. O sinalizador
--selector
filtra a lista para mostrar apenas os pods do serviço de cupom e o sinalizador--watch
instrui okubectl
a inspecionar as alterações.kubectl get pods --selector=app=productservice --watch
Durante a implantação, uma variação da seguinte saída é exibida:
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 foi criado. Quando o novo pod estiver pronto, o antigo será encerrado. Esse processo torna a transição para a nova versão o mais tranquila possível.
Verificar o aplicativo
Realize as seguintes etapas para verificar se o aplicativo ainda funciona:
Visualize o eShop implantado 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 CTRL pressionado e selecione o link para abrir o aplicativo em uma nova guia.
Vá para a página de produtos para exibir a nova tenda listada na parte inferior da página.
Reverter a implantação
Uma mitigação comum para problemas de produção é reverter para uma implantação válida conhecida. O Kubernetes mantém um histórico de implantação que pode ser usado para reverter para uma versão anterior do seu aplicativo.
Em seu terminal, execute este comando para remover a nova tenda que você acabou de adicionar ao site:
kubectl rollout undo deployment/productservice
Você deverá ver esta mensagem de console:
deployment.apps/productservice rolled back
Atualize a página de produtos no navegador e a nova tenda não deverá mais estar listada.
Observação
Em um cenário da vida real, você implanta os artefatos do build em vários ambientes. Por exemplo, você pode ter ambientes de desenvolvimento, teste e preparo. Você pode disparar fluxos de trabalho de implantação por eventos como mesclagem de PRs. Você pode adicionar condições de qualidade ou aprovação, como a aprovação do PR por um stakeholder, para evitar implantações inesperadas na produção.