DEV Community

Edson Fernandes Cunha
Edson Fernandes Cunha

Posted on

Criar AWS EKS Fargate usando Terraform (EFS, HPA, Ingress, ALB, IRSA, Kubernetes, Helm)

Introdução

Neste projeto, abordaremos as seguintes seções:

  • Criar S3 buckets para armazenar o estado do Terraform
  • Criar AWS VPC usando o Terraform
  • Criar AWS EKS Fargate usando o Terraform
  • Atualize o CoreDNS para execução no AWS Fargate
  • Implantar aplicativo no AWS Fargate
  • Implantar o Metrics Server no AWS Fargate
  • Escala automática com HPA com base na CPU e na memória
  • Melhore a estabilidade com o orçamento de interrupção do pod
  • Criar provedor IAM OIDC usando o Terraform
  • Implantar o AWS Load Balancer Controller usando o Terraform
  • Criar entrada simples
  • Entrada segura com SSL/TLS
  • Criar balanceador de carga de rede
  • Integrar o Amazon EFS ao AWS Fargate

Requisitos de criação do Ambiente

  • Configurar DNS no Route53 ou seu provedor de DNS preferido

  • Criar um certificado SSL/TLS para o domínio

Exemplo: *.exemplo.com
Enter fullscreen mode Exit fullscreen mode

Instalar EKS-Fargate


git clone https://github.com/efcunha/aws-eks-fargate-terraform.git

cd aws-eks-fargate-terraform/terraform-eks/env/

Escolha qual ambiente você deseja criar:

"dev" ou "prod"

terraform init
terraform fmt
terraform validate
terraform plan
terraform apply
Enter fullscreen mode Exit fullscreen mode
  • Depois de provisionar o EKS com o terraform, você precisará atualizar o contexto do Kubernetes para acessar o cluster com o comando a seguir.

  • Basta atualizar a região e o nome do cluster para corresponder ao seu.

aws eks update-kubeconfig --name < dev / prod > --region us-east-1
Enter fullscreen mode Exit fullscreen mode
  • O EKS foi desenvolvido para ser usado como um cluster Kubernetes regular.
  • Ele espera que um pool de nós padrão execute componentes do sistema, como CoreDNS.
  • Se você executar kubectl get pods -A, verá que os pods CoreDNS estão presos em um estado pendente.
  • Antes de prosseguirmos, precisamos resolver esse problema.

  • Você pode verificar se não tem nós usando este comando.

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode
  • Vamos dividir o terminal e, na primeira execução da janela, kubectl get events.
  • É muito útil quando você precisa depurar problemas do Kubernetes.
kubectl get events -w -n kube-system
Enter fullscreen mode Exit fullscreen mode
  • Na segunda janela, basta executar get pods.
watch -n 1 kubectl get pods -n kube-system
Enter fullscreen mode Exit fullscreen mode

Instalando APP de teste

  • Use kubectl para aplicar a implantação.
kubectl apply -f k8s/simple-deployment.yaml
Enter fullscreen mode Exit fullscreen mode
  • Desta vez podemos aplicar a pasta inteira.
kubectl apply -f k8s/
Enter fullscreen mode Exit fullscreen mode
  • Para a demonstração, novamente, divida a tela.
  • Na primeira janela, podemos executar get pods. No momento, temos uma única réplica.
watch -n 1 -t kubectl get pods -n staging
Enter fullscreen mode Exit fullscreen mode
  • No segundo, você pode assistir ao autoescalador de pod horizontal.
  • Leva alguns segundos para o autoescalador atualizar corretamente os destinos.
kubectl get hpa php-apache -w -n staging
Enter fullscreen mode Exit fullscreen mode
  • Vamos obter PDBs no namespace de teste.
kubectl get pdb -n staging
Enter fullscreen mode Exit fullscreen mode
  • Verificar classe de entrada criada pelo controlador aws load balancer.
kubectl get ingressclass
Enter fullscreen mode Exit fullscreen mode
  • Para verificar a entrada, precisamos criar um registro CNAME em seu provedor de hospedagem DNS e apontar para o nome do host do balanceador de carga.
  • Verifique se você pode resolver corretamente o DNS.
dig +short php-apache.exemplo.com
Enter fullscreen mode Exit fullscreen mode
  • Por fim, vamos executar a ferramenta de geração de carga.
  • Ele ativará um pod adicional e executará continuamente tarefas com uso intensivo de CPU no apache.
kubectl run -i --tty -n staging load-generator --pod-running-timeout=5m0s --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
Enter fullscreen mode Exit fullscreen mode
  • Se não implantar o helm, você pode verificar o status da liberação do helm.
helm list -n kube-system
Enter fullscreen mode Exit fullscreen mode
  • Além disso, verifique o status do pod.
  • Caso o pod não possa ser agendado, ele pode falhar no terraform.
kubectl get pods -n kube-system
Enter fullscreen mode Exit fullscreen mode
  • Você pode usar o comando list-open-id-connect-providers para descobrir se o provedor foi criado.
aws iam list-open-id-connect-providers
Enter fullscreen mode Exit fullscreen mode

Oldest comments (0)