DEV Community

Cover image for Cluster Kubernetes na Azure com Terraform
Cristiano Lemes
Cristiano Lemes

Posted on • Edited on

Cluster Kubernetes na Azure com Terraform

Criando um Cluster Kubernetes na Azure com Terraform e AKS

Neste tutorial, vamos explorar o processo passo a passo para criar um cluster Kubernetes na plataforma Azure usando o Terraform e o Azure Kubernetes Service (AKS). Este guia é especialmente útil para iniciantes que desejam iniciar sua jornada com o Kubernetes na nuvem.

Conteúdo

1. Criação da conta Azure

Criando uma conta na Azure.

Se você ainda não possui uma conta Azure, pode aproveitar os benefícios de recursos gratuitos por 12 meses, além de um crédito de $200 para uso durante 30 dias. Embora os recursos deste tutorial não estejam incluídos na camada gratuita de 12 meses, os $200 podem ser suficientes seguindo os passos e removendo os recursos após o tutorial.

  1. Acesse a página inicial do Azure.
  2. Clique em "Conta Gratuita" no canto superior direito. Azure home
  3. Selecione "Experimente Gratuitamente" e siga as instruções para criar uma nova conta ou fazer login com uma conta existente da Microsoft. Azure crie conta
  4. Na tela de login, você pode logar com uma conta microsoft já existe, ou criar uma conta nova, se você criar uma conta nova, pode usar um email atual de qualquer provedor. Azure crie Senha
  5. Preencha a região e data de nascimento. Azure crie conta
  6. Proceda com a verificação do email. Azure crie conta
  7. Preencha os detalhes do perfil, e confirme o numero de telefone, marque a caixa verificar identidade por telefone e enviar sms, ou receber ligação. Azure perfil Azure crie conta
  8. Preencha os dados do endereço, confirme os termos de uso e clique avançar. Azure crie conta
  9. Adicione os dados do cartão de crédito, e clique em increver-se. Azure crie conta

Caso você não tenha crédito liberado, ou já tenha passado dos limites ou do tempo do uso dos crédito você terá que habilitar o pagamento pelo uso, Pay as you go, para poder acessar os recursos.

2. Configurando o ambiente local

Neste tutorial, usaremos o Windows 11, mas as etapas podem ser seguidas em sistemas Linux ou macOS.

1. Instalando o Azure Cli

Existem várias maneiras de instalar o Azure CLI. Para instalação local:
Windows
Instalar usando o Msi
Azure Cli Msi

Instalar usando um gerenciador de pacotes,
Usando Scoop

scoop install azure-cli
Enter fullscreen mode Exit fullscreen mode

Usando Winget

winget install -e --id Microsoft.AzureCLI

Enter fullscreen mode Exit fullscreen mode

Ubuntu

curl  -sL  https://aka.ms/InstallAzureCLIDeb | sudo  bash
Enter fullscreen mode Exit fullscreen mode

Mac OS

brew  update && brew  install  azure-cli
Enter fullscreen mode Exit fullscreen mode

2. Instalando o Kubectl

Windows

Baixando o binario diretamente, você colocar em qualquer diretorio quie preferir, depois adicione esse diretorio a variavel de sistema PATH , para poder executar de qualquer pasta na linha de comando.

[Kubectl Windows Binario]https://dl.k8s.io/release/v1.29.2/bin/windows/amd64/kubectl.exe

Ulizando um gerenciador de pacotes.
Scoop

scoop install kubectl
Enter fullscreen mode Exit fullscreen mode

Winget

winget install -e --id Kubernetes.kubectl
Enter fullscreen mode Exit fullscreen mode

Linux
Faça o donwload do binario

curl  -LO  "https://dl.k8s.io/release/$(curl  -L  -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
Enter fullscreen mode Exit fullscreen mode

Configure as permissões e mova para pasta bin.

sudo  chmod  +x  kubectl
sudo  mv  ./kubectl  /usr/local/bin/
Enter fullscreen mode Exit fullscreen mode

Mac OS
Instalando usando homebrew

brew  install  kubectl
Enter fullscreen mode Exit fullscreen mode

3. Instalando o Terraform

Windows
Baixando o binario, descompacte o zip e coloque em uma pasta de sua preferencia, lembrando que deve por a pasta na variavel PATH.

Terrafom zip

Usando gerenciador de pacotes.
Scoop

$ scoop  install  terraform
Enter fullscreen mode Exit fullscreen mode

Winget

$ winget install --id=Hashicorp.Terraform -e
Enter fullscreen mode Exit fullscreen mode

Linux
Utilizando o gerenciador de pacotes (Ubuntu)

$ wget -O- https://apt.releases.hashicorp.com/gpg | sudo  gpg  --dearmor  -o  /usr/share/keyrings/hashicorp-archive-keyring.gpg
$ echo  "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release  -cs) main" | sudo  tee  /etc/apt/sources.list.d/hashicorp.list
$ sudo  apt  update && sudo  apt  install  terraform
Enter fullscreen mode Exit fullscreen mode

Mac OS

$ brew  tap  hashicorp/tap
$ brew  install  hashicorp/tap/terraform
Enter fullscreen mode Exit fullscreen mode
  1. Instalando GIT

Windows

Utilizando o instalador.
Execute o instalador, pode manter todas as configurações padrões.
Git Windows Instaler
Utilizando gerenciador de pacotes
Scoop

$ scoop install git
Enter fullscreen mode Exit fullscreen mode

Winget

$ winget install --id Git.Git -e --source winget
Enter fullscreen mode Exit fullscreen mode

Linux
A maioria das distros já vem com git, utilize o gerenciador de pacotes para instalar caso necessário.
Ubuntu

$ apt-get  install  git
Enter fullscreen mode Exit fullscreen mode

Mac OS

$ brew  install  git
Enter fullscreen mode Exit fullscreen mode
  1. Agora precisamos configurar o ambiente local para acessar o Azure.

Fazendo login na conta Azure usando o azure cli, na linha de comando digite.

$ az login
Enter fullscreen mode Exit fullscreen mode

Ele vai abrir o navegador padrão e solicitar as credenciais do azure, entre com as credencias ele automaticamente vai configurar a linha de comando para poder acessar, os dados ficaram salvo na pasta ~./azure.

3. Criando o Cluster

Para criar o cluster, siga estes passos:

  1. Vamos baixar o template AKS da HashiCorp para servir como ponto de partida, clone o repositorio usando o git.
$ git clone https://github.com/hashicorp/learn-terraform-provision-aks-cluster aks-cluster
Enter fullscreen mode Exit fullscreen mode

Para ajustar os arquivos você pode utilizar o editor de código de sua preferencia, eu estarei utilizando o Visual Studio Code.

Com o Vscode aberto, vá em arquivo abrir pasta, escolha a pasta que acabou criar no passo anterior, ou navegue até a pasta usando a linha de comando e digite code .
Azure crie conta

  1. Gerando credenciais para o Terraform

Vá na linha de comando

$ az ad sp create-for-rbac --skip-assignment
Enter fullscreen mode Exit fullscreen mode

Ele vai gerar os dados que vamos usar para configurar o acesso ao Azure utilizando Terraform
Exemplo da saida.

{

"appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"displayName": "azure-cli-2019-04-11-00-46-05",
"password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"tenant": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}

Enter fullscreen mode Exit fullscreen mode
  1. Editando os arquivos do terraform Edite o arquivo terraform.tfvar e adicione os valores de appId e password que você obteve da saida do comando anterior. Edit o arquivo aks-cluster.tf em kubernetes altere para uma versão do kubernetes que seja suportado pelo aks, no momento "1.28.3", para verificar as versões do kubernetes disponiveis use o comando abaixo, eu vou manter a zona com West US2.
$ az aks get-versions --location westus2 --output table

Kubernetes Version Upgrades
------------------- -----------------------

1.28.3 None available
1.28.0  1.28.3
1.27.7  1.28.0, 1.28.3
1.27.3  1.27.7, 1.28.0, 1.28.3
1.26.10  1.27.3, 1.27.7
1.26.6  1.26.10, 1.27.3, 1.27.7
Enter fullscreen mode Exit fullscreen mode

Cada nó do cluster AKS precisa ter no minimo 2vCPU e 4GB de memoria, neste caso vou utilizar a maquina mais barata disponivel com essas configurações que é a Standard_B2s.
para verficar os preços de maquinas pode verificar no site do azure.
O arquivo aks-cluster.tf final fica assim:

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0

resource "random_pet" "prefix" {}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "default" {
  name     = "${random_pet.prefix.id}-rg"
  location = "West US 2"

  tags = {
    environment = "Demo"
  }
}

resource "azurerm_kubernetes_cluster" "default" {
  name                = "${random_pet.prefix.id}-aks"
  location            = azurerm_resource_group.default.location
  resource_group_name = azurerm_resource_group.default.name
  dns_prefix          = "${random_pet.prefix.id}-k8s"
  kubernetes_version  = "1.28.3"

  default_node_pool {
    name            = "default"
    node_count      = 2
    vm_size         = "Standard_B2s"
    os_disk_size_gb = 30
  }

  service_principal {
    client_id     = var.appId
    client_secret = var.password
  }

  role_based_access_control_enabled = true

  tags = {
    environment = "Demo"
  }
}

Enter fullscreen mode Exit fullscreen mode
  1. Agora vamos inicializar o terrform na linha de comando digite:

$ terraform init

Initializing the backend...
Initializing provider plugins...

- Reusing previous version of hashicorp/random from the dependency lock file
- Reusing previous version of hashicorp/azurerm from the dependency lock file
- Installing hashicorp/random v3.5.1...
- Installed hashicorp/random v3.5.1 (signed by HashiCorp)
- Installing hashicorp/azurerm v3.67.0...
- Installed hashicorp/azurerm v3.67.0 (signed by HashiCorp)


Terraform has made some changes to the provider dependency selections recorded
in the .terraform.lock.hcl file. Review those changes and commit them to your
version control system if they represent changes you intended to make.
Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
Enter fullscreen mode Exit fullscreen mode

Com isso o terraform instala todos os modulos necessários.

  1. Agora vamos rodar o terraform plan, o terraform plan vai simular a criação do recursos na cloud, é recomendado salvar o plano em um arquivo para posterior execução do apply.
$ terraform plan --out plan1

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the

following symbols:

+ create
Terraform will perform the following actions:
......
Plan: 3 to add, 0 to change, 0 to destroy.
Changes to Outputs:

+ kubernetes_cluster_name = (known after apply)
+ resource_group_name = (known after apply)
Enter fullscreen mode Exit fullscreen mode
  1. Com o plano sem erros podemos rodar o apply.
$ terraform apply "plan1"
---

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Outputs:

kubernetes_cluster_name = "apt-tortoise-aks"
resource_group_name = "apt-tortoise-rg"
Enter fullscreen mode Exit fullscreen mode
  1. Capture os dados do output para os dados do cluster, e execute o comando abaixo para configurar o kubectl.
az aks get-credentials --resource-group apt-tortoise-rg --name apt-tortoise-aks --file ~/.kube/config
Enter fullscreen mode Exit fullscreen mode
  1. Agora o cluster está rodando, vamos verifcar com o kubectl.
$ kubectl get nodes

NAME STATUS ROLES AGE VERSION
aks-default-27467048-vmss000000 Ready agent 3m17s v1.28.3
aks-default-27467048-vmss000001 Ready agent 3m26s v1.28.3
Enter fullscreen mode Exit fullscreen mode
  1. Vamos fazer um pequeno deploy para testar o nosso cluster de um servidor Nginx.

$ kubectl create deployment website --replicas 3 --image nginx
$ kubectl expose deployment/website --type="LoadBalancer" --port 80

Enter fullscreen mode Exit fullscreen mode
  1. O Loadbalancer do Azure vai disponibilizar um IP publico para o serviço, e nesta configuração padrão não tem regras de segurança, então ele vai estar acessivel de qualquer lugar. Verificando os pods, criado com a quantidade de replicas que solicitamos.

$ kubectl get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 13m
website LoadBalancer 10.0.195.30 x.x.x.x 80:30707/TCP 45s

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
website-6784674d46-6xddr 1/1 Running 0 8m42s
website-6784674d46-7nsl6 1/1 Running 0 8m42s
website-6784674d46-vn5r4 1/1 Running 0 8m42s

Enter fullscreen mode Exit fullscreen mode
  1. Efetuando um curl no ip fornecido você deve receber a pagina padrão do nginx
$ curl 4.246.49.237
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

4. Destruindo o Cluster

  1. Agora para não ficar gerando custos desnecessários para um ambiente de testes, vamos destruir o cluster, sempre que quiser é só criar o cluster novamente rodando o apply.
$ terrafom destroy

Plan: 0 to add, 0 to change, 3 to destroy.

Changes to Outputs:
- kubernetes_cluster_name = "apt-tortoise-aks" -> null
- resource_group_name = "apt-tortoise-rg" -> null

Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
Enter fullscreen mode Exit fullscreen mode

Conclusão

Este guia fornece uma visão geral abrangente para criar e gerenciar um cluster Kubernetes na Azure. Lembre-se de revisar cuidadosamente e adaptar as etapas conforme necessário para atender às suas necessidades específicas e às últimas práticas recomendadas.

Referências

Ilustração

Top comments (0)