1
resposta

[Sugestão] iac aws

Criando e Gerenciando a Aplicação com Terraform no Kubernetes

Agora que sabemos como funciona a criação e o gerenciamento de recursos no Kubernetes usando YAML, podemos declarar nossa aplicação de forma mais automatizada utilizando o Terraform. Com o Terraform, conseguimos criar a infraestrutura do Kubernetes de maneira declarativa, permitindo que nossa aplicação seja gerenciada e versionada diretamente com código.

Declarando a Aplicação com Terraform

A primeira etapa é declarar a aplicação no Terraform de modo que ele possa criar todos os recursos necessários, como Deployments, Services e outras dependências, utilizando a própria linguagem do Terraform. Isso garante que todo o processo de provisionamento seja replicável, escalável e facilmente versionado.

Em Terraform, podemos usar o provedor Kubernetes para criar os mesmos recursos que teríamos no arquivo YAML do Kubernetes, mas em uma sintaxe Terraform. Aqui está um exemplo simples de como declarar um Deployment no Terraform:

resource "kubernetes_deployment" "app_deployment" {
metadata {
name = "my-app"
labels = {
app = "my-app"
}
}

spec {
replicas = 3

selector {
  match_labels = {
    app = "my-app"
  }
}

template {
  metadata {
    labels = {
      app = "my-app"
    }
  }

  spec {
    container {
      name  = "my-app-container"
      image = "nginx:1.7.8"
      ports {
        container_port = 80
      }
    }
  }
}

}
}

Esse código declara um Deployment para nossa aplicação my-app no Kubernetes, com 3 réplicas do container nginx:1.7.8. O Terraform usa a sintaxe HCL (HashiCorp Configuration Language), que é altamente legível e fácil de entender.

Preparando a Liveness Probe

Uma parte importante para garantir que nossa aplicação esteja sempre funcionando corretamente é o uso de sondas, como a liveness probe. A liveness probe é uma verificação periódica que o Kubernetes realiza para garantir que a aplicação esteja viva. Se a aplicação não responder de forma correta à sonda, o Kubernetes a reiniciará automaticamente.

Abaixo, adicionamos a configuração da liveness probe no nosso Deployment no Terraform:

resource "kubernetes_deployment" "app_deployment" {
metadata {
name = "my-app"
}

spec {
replicas = 3

selector {
  match_labels = {
    app = "my-app"
  }
}

template {
  metadata {
    labels = {
      app = "my-app"
    }
  }

  spec {
    container {
      name  = "my-app-container"
      image = "nginx:1.7.8"
      ports {
        container_port = 80
      }

      liveness_probe {
        http_get {
          path = "/health"
          port = 80
        }
        initial_delay_seconds = 5
        period_seconds        = 10
      }
    }
  }
}

}
}

No exemplo acima, adicionamos a liveness probe com uma requisição HTTP para o endpoint /health. Isso garante que o Kubernetes irá verificar periodicamente se a aplicação está respondendo corretamente, usando o código de resposta HTTP. Caso a aplicação não responda ou retorne um erro, o Kubernetes reiniciará o pod.

Criando a Aplicação no Cluster

Com a configuração do Terraform e a sonda de vida em mãos, podemos agora criar a aplicação no nosso cluster do Kubernetes. Para isso, basta executar os seguintes comandos no terminal:

Inicializar o Terraform (caso ainda não tenha feito isso):

terraform init

Aplicar a configuração do Terraform para criar os recursos no Kubernetes:

terraform apply

Após executar o terraform apply, o Terraform irá criar o Deployment e outros recursos necessários no Kubernetes, como definido no código. O Terraform irá comparar a configuração atual com o que já foi provisionado e apresentará um plano com as alterações. Se tudo estiver certo, basta digitar yes para confirmar a criação.

Verificando os Recursos no Cluster

Uma vez que a aplicação tenha sido criada, podemos verificar se tudo foi provisionado corretamente. Para isso, basta executar o seguinte comando:

kubectl get deployments

Esse comando irá listar todos os deployments no cluster, e você deve ver o deployment da sua aplicação com o número de réplicas desejado (neste caso, 3). Também podemos verificar o status dos PODs com o comando:

kubectl get pods

1 resposta

Oi, Ubirajara!

Agradeço por compartilhar.

Achei ótima a forma como você mostrou a transição do YAML para o uso do Terraform, destacando como o provedor Kubernetes ajuda a manter o provisionamento mais organizado e versionado. O exemplo com a liveness probe deixou claro como aplicar boas práticas de monitoramento direto no código.

Continue avançando nessa abordagem, ela traz muito valor em cenários reais de automação.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!