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

efcunha

Edson Fernandes Cunha

Posted on September 28, 2022

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
💖 💪 🙅 🚩
efcunha
Edson Fernandes Cunha

Posted on September 28, 2022

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related