O Objetivo deste exemplo é praticar o Deploy de uma aplicação em um Azure Kubernetes Cluster (AKS) através de um arquivo de manifesto (.YAML). Além do exemplo original, foi adicionado o provisionamento de recursos no Provedor Azure usando o Terraform. Conhecimento Adquiridos:
- Azure Cloud Provider
- Containers: Docker, Azure Container Registry (ACR);
- Kubernetes: Azure Kubernetes Cluster (AKS);
- Terraform;
Este exemplo cria uma imagem local da aplicação, utilizando o docker-compose.yaml
, provisionamento automático de recursos Azure usando Terraform, em seguida a imagem local é enviada para cloud em um diretório privado (ACR) e a partir deste a imagem é consumida por um Azure Kubenertes Cluster. A interface do aplicativo foi construída usando Python / Flask. O componente de dados está usando o Redis.
- Realize o fork do projeto e em seguida no seu terminal git bash dê o comando
git clone
para copiar o repositório para sua máquina local. docker-compose up -d
-> dar este comando no seu terminal do linux ou WSL2 no diretória da aplicação;docker images
-> lista as imagens geradasdocker ps
-> -> lista os containers criados- http://localhost:8080 -> testa a aplicaçao local
docker-compose down
-> destroi os containersaz login
-> faz o login no Azure CLI usando o powershellterraform init
-> inicializa o terraformterraform fmt
-> formato os arquivos .tfterraform plan -out tfplan
-> verifica as mudanças antes de dar o applyterraform apply tfplan
-> aplica o plano para criação dos recursosaz acr login --name <ACRname_created>
docker tag mcr.microsoft.com/azuredocs/azure-vote-front:v1 <ACRname_created>.azurecr.io/azure-vote-front:v1
docker push <ACRname_created>.azurecr.io/azure-vote-front:v1
-> envia a imagem para o ACRaz aks get-credentials --resource-group <ResourceGroupName> --name <AKSClusterName>
-> pega as credenciais do Cluster AKSkubectl get nodes
-> lista os nós em execução- Atualiza para o novo endereço da imagem na linha 60 do manifesto
azure-vote-all-in-one-redis.yaml
kubectl apply -f azure-vote-all-in-one-redis.yaml
-> Aplica o manifesto no Kubenerteskubectl get services
-> lista os serviços em execução, acessar a aplicação usando o IP Externo no seu browserterraform destroy
-> Deleta os recursos criados
- VS Code v1.72.2
- WSL2 para Windows
- Docker Desktop
- Terraform v1.3.2
- provider registry.terraform.io/hashicorp/azurerm v3.30.0
- Kubectl v4.5.7
- Foi add um recurso "role_acrpull" em
main.tf
para criar uma atribuição de função para autorizar o cluster do AKS a se conectar ao Registro de Contêiner do Azure. Sem este recurso, a aplicação não executa. - Add
depends_on
em alguns recursos dependentes devido apresentar falha durante o provisionamentoterraform apply