Criar AWS EKS Fargate usando Terraform (EFS, HPA, Ingress, ALB, IRSA, Kubernetes, Helm)
Edson Fernandes Cunha
Posted on September 28, 2022
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
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
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
- 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
- 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
- Na segunda janela, basta executar get pods.
watch -n 1 kubectl get pods -n kube-system
Instalando APP de teste
- Use kubectl para aplicar a implantação.
kubectl apply -f k8s/simple-deployment.yaml
- Desta vez podemos aplicar a pasta inteira.
kubectl apply -f k8s/
- 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
- 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
- Vamos obter PDBs no namespace de teste.
kubectl get pdb -n staging
- Verificar classe de entrada criada pelo controlador aws load balancer.
kubectl get ingressclass
- 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
- 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"
- Se não implantar o helm, você pode verificar o status da liberação do helm.
helm list -n kube-system
- 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
- Você pode usar o comando list-open-id-connect-providers para descobrir se o provedor foi criado.
aws iam list-open-id-connect-providers
💖 💪 🙅 🚩
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.