O Kubernetes é o padrão ouro para orquestração de containers, mas rodá-lo você mesmo é um overhead operacional que você não precisa. O EKS te dá um plano de controle gerenciado para que você possa focar nos seus workloads em vez de no cluster.
TL;DR: Configure um cluster AWS EKS, faça deploy de workloads, configure rede e storage, e gerencie o cluster com kubectl e AWS CLI.
Stack: AWS EKS, Kubernetes, kubectl, Docker, ECR
Nível: Avançado
Tempo de leitura: ~25 min
Instalar o eksctl
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
Criar o cluster EKS
eksctl create cluster --name meu-cluster --region sa-east-1 --nodes 2 --nodes-min 1 --nodes-max 3 --node-type m5.large
Conceitos principais do Kubernetes
Pense em um cluster Kubernetes como uma cidade. Pods são os prédios (menor unidade deployável), Services são as ruas que roteiam tráfego para os prédios, Deployments são as regras de planejamento urbano que dizem quantos prédios de cada tipo devem existir, e Ingress é a entrada da rodovia que roteia visitantes externos para a rua correta.
Pod
apiVersion: v1
kind: Pod
metadata:
name: meu-pod
spec:
containers:
- name: nginx
image: nginx:latest
Service
apiVersion: v1
kind: Service
metadata:
name: meu-servico
spec:
selector:
app: meu-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: meu-deployment
spec:
replicas: 3
selector:
matchLabels:
app: meu-app
template:
metadata:
labels:
app: meu-app
spec:
containers:
- name: nginx
image: nginx:latest
ConfigMap e Secret
ConfigMaps guardam configuração não sensível (variáveis de ambiente, configurações), Secrets guardam dados sensíveis (senhas, tokens) em formato base64. Ambos podem ser injetados como variáveis de ambiente ou montados como volumes dentro dos pods.
DaemonSet
Garante que um pod rode em cada nó do cluster. Usado para agentes de logging, coletores de monitoramento e plugins de rede. Quando um novo nó entra, o pod do DaemonSet aparece automaticamente.
StatefulSet
Como um Deployment, mas para apps com estado. Cada pod recebe uma identidade estável e storage persistente entre reinicializações. Usado para bancos de dados como PostgreSQL ou Redis.
RBAC (Controle de Acesso Baseado em Roles)
ServiceAccount, Role/ClusterRole e RoleBinding/ClusterRoleBinding trabalham juntos para controlar o que pods e usuários podem fazer no cluster. Um Role é limitado ao namespace, um ClusterRole se aplica a todo o cluster.
Permitir acesso de devs ao cluster
aws eks update-kubeconfig --region sa-east-1 --name meu-cluster
kubectl get configmap aws-auth -n kube-system -o yaml > aws-auth.yaml
Edite o aws-auth.yaml para adicionar usuários IAM em mapUsers com o grupo system:masters, depois aplique de volta.
Comandos úteis
kubectl get pods -A # Todos os pods em todos os namespaces
kubectl get svc -n meu-namespace # Services em um namespace
kubectl describe pod meu-pod # Debugar um pod específico
kubectl logs meu-pod -f # Ver logs do pod em tempo real
kubectl apply -f manifest.yaml # Aplicar um manifest
kubectl delete -f manifest.yaml # Deletar recursos de um manifest
O que você construiu
Um cluster EKS rodando com workloads deployados, rede configurada e as ferramentas prontas para as operações do dia a dia.
Próximos passos
- Use managed node groups para os worker nodes do EKS: a AWS cuida do patching do SO e substituição dos nós, o que reduz bastante o overhead operacional.
- Defina requests e limits de recursos em cada pod. Sem limits, um único pod mal-comportado pode asfixiar o nó inteiro.
- Use o AWS Load Balancer Controller para criar ALBs e NLBs a partir de recursos Ingress e Service do Kubernetes, mantendo o gerenciamento de infraestrutura dentro do cluster.
Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.