Tutorial: Atualizar uma aplicação no Serviço Kubernetes do Azure (AKS)
Depois de a aplicação ser implementada no Kubernetes, pode ser atualizada, ao especificar uma nova imagem de contentor ou uma versão de imagem. Uma atualização é faseada para que apenas uma parte da implementação seja atualizada ao mesmo tempo. Esta atualização testada permite que a aplicação continue a ser executada durante a atualização. Também apresenta um mecanismo de reversão se ocorrer uma falha de implementação.
Neste tutorial, parte seis de sete, a aplicação Azure Vote de exemplo é atualizada. Saiba como:
- Atualizar o código da aplicação de front-end
- Criar uma imagem de contentor atualizada
- Colocar a imagem de contentor no Azure Container Registry
- Implementar a imagem de contentor atualizada
Antes de começar
Nos tutoriais anteriores, uma aplicação foi empacotada numa imagem de contentor. Esta imagem foi carregada para Azure Container Registry e criou um cluster do AKS. Em seguida, a aplicação foi implementada no cluster do AKS.
Também foi clonado um repositório de aplicações que inclui o código de origem da aplicação e foi utilizado um ficheiro do Docker Compose pré-criado neste tutorial. Verifique se criou um clone do repositório e alterou os diretórios para o diretório clonado. Se ainda não tiver concluído estes passos e quiser acompanhar, comece com o Tutorial 1 – Criar imagens de contentor.
Este tutorial requer a execução da versão 2.0.53 ou posterior da CLI do Azure. Executar az --version
para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
Atualizar uma aplicação
Vamos fazer uma alteração à aplicação de exemplo e, em seguida, atualizar a versão já implementada no cluster do AKS. Certifique-se de que está no diretório azure-voting-app-redis clonado. O código fonte da aplicação de exemplo pode ser encontrado no diretório azure-vote . Abra o ficheiro config_file.cfg com um editor, como o vi
:
vi azure-vote/azure-vote/config_file.cfg
Altere os valores de VOTE1VALUE e VOTE2VALUE para valores diferentes, como cores. O exemplo seguinte mostra os valores atualizados:
# UI Configurations
TITLE = 'Azure Voting App'
VOTE1VALUE = 'Blue'
VOTE2VALUE = 'Purple'
SHOWHOST = 'false'
Guarde e feche o ficheiro. Em vi
, utilize :wq
.
Atualizar a imagem de contentor
Para voltar a criar a imagem de front-end e testar a aplicação atualizada, utilize docker-compose. O argumento --build
serve para instruir o Docker Compose para voltar a criar a imagem de aplicação:
docker-compose up --build -d
Testar a aplicação localmente
Para verificar se a imagem de contentor atualizada mostra as alterações, abra um browser local em http://localhost:8080
.
Os valores atualizados fornecidos no ficheiro config_file.cfg são apresentados na sua aplicação em execução.
Etiquetar e enviar a imagem
Para utilizar corretamente a imagem atualizada, etiquete a imagem azure-vote-front com o nome do servidor de início de sessão do registo do ACR. Obtenha o nome do servidor de início de sessão com o comando az acr list :
az acr list --resource-group myResourceGroup --query "[].{acrLoginServer:loginServer}" --output table
Utilize a etiqueta do docker para etiquetar a imagem. Substitua <acrLoginServer>
pelo nome do servidor de início de sessão do ACR ou pelo nome de anfitrião do registo público e atualize a versão da imagem para :v2 da seguinte forma:
docker tag mcr.microsoft.com/azuredocs/azure-vote-front:v1 <acrLoginServer>/azure-vote-front:v2
Agora, utilize docker push para carregar a imagem para o registo. Substitua <acrLoginServer>
pelo nome do servidor de início de sessão do ACR.
Nota
Se tiver problemas ao enviar para o registo do ACR, certifique-se de que ainda tem sessão iniciada. Execute o comando az acr login com o nome da sua Azure Container Registry que criou no passo Criar uma Azure Container Registry. Por exemplo, az acr login --name <azure container registry name>
.
docker push <acrLoginServer>/azure-vote-front:v2
Implementar a aplicação atualizada
Para fornecer o máximo de tempo de atividade, várias instâncias do pod da aplicação têm de estar em execução. Verifique se o número de instâncias de front-end em execução com o comando kubectl get pods:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
azure-vote-back-217588096-5w632 1/1 Running 0 10m
azure-vote-front-233282510-b5pkz 1/1 Running 0 10m
azure-vote-front-233282510-dhrtr 1/1 Running 0 10m
azure-vote-front-233282510-pqbfk 1/1 Running 0 10m
Se não tiver vários pods de front-end, dimensione a implementação azure-vote-front da seguinte forma:
kubectl scale --replicas=3 deployment/azure-vote-front
Para atualizar a aplicação, utilize o comando kubectl set. Atualize <acrLoginServer>
com o nome do anfitrião ou do servidor de início de sessão do registo de contentor e especifique a versão da aplicação v2:
kubectl set image deployment azure-vote-front azure-vote-front=<acrLoginServer>/azure-vote-front:v2
Para monitorizar a implementação, utilize o comando kubectl get pod. Uma vez que a aplicação atualizada é implementada, os seus pods são terminados e recriados com a nova imagem de contentor.
kubectl get pods
O resultado de exemplo seguinte mostra os pods a serem terminados e as novas instâncias em execução à medida que a implementação avança:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
azure-vote-back-2978095810-gq9g0 1/1 Running 0 5m
azure-vote-front-1297194256-tpjlg 1/1 Running 0 1m
azure-vote-front-1297194256-tptnx 1/1 Running 0 5m
azure-vote-front-1297194256-zktw9 1/1 Terminating 0 1m
Testar a aplicação atualizada
Para ver a aplicação atualizada, obtenha primeiro o endereço IP externo do serviço azure-vote-front
:
kubectl get service azure-vote-front
Agora, abra um browser para o endereço IP do seu serviço:
Passos seguintes
Neste tutorial, atualizou uma aplicação e implementou esta atualização no cluster do AKS. Aprendeu a:
- Atualizar o código da aplicação de front-end
- Criar uma imagem de contentor atualizada
- Colocar a imagem de contentor no Azure Container Registry
- Implementar a imagem de contentor atualizada
Avance para o próximo tutorial para saber como atualizar um cluster do AKS para uma nova versão do Kubernetes.