Criar AWS EKS Fargate usando Terraform (EFS, HPA, Ingress, ALB, IRSA, Kubernetes, Helm)
Published: 2022-09-28 23:06:28

## 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
```sh
Exemplo: *.exemplo.com
```
## Instalar EKS-Fargate
```sh

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.
```sh
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.
```sh
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.
```sh
kubectl get events -w -n kube-system
```
- Na segunda janela, basta executar get pods.
```sh
watch -n 1 kubectl get pods -n kube-system
```
## Instalando APP de teste

- Use kubectl para aplicar a implantação.
```sh
kubectl apply -f k8s/simple-deployment.yaml
```
- Desta vez podemos aplicar a pasta inteira.
```sh
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.
```sh
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.
```sh
kubectl get hpa php-apache -w -n staging
```
- Vamos obter PDBs no namespace de teste.
```sh
kubectl get pdb -n staging
```
- Verificar classe de entrada criada pelo controlador aws load balancer.
```sh
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.
```sh
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.
```sh
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.
```sh
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.
```sh
kubectl get pods -n kube-system
```
- Você pode usar o comando list-open-id-connect-providers para descobrir se o provedor foi criado.
```sh
aws iam list-open-id-connect-providers
```