Kubernetes para Desenvolvedores
🚀 Visão Geral
Kubernetes (K8s) é uma plataforma de orquestração de containers open-source que automatiza o deploy, scaling e gerenciamento de aplicações containerizadas.
📋 Conceitos Fundamentais
Cluster
O que é: Conjunto de máquinas (nodes) que executam aplicações containerizadas.
Componentes:
- Master Node: Controla o cluster
- Worker Nodes: Executam as aplicações
- Control Plane: Gerencia o estado do cluster
Pod
O que é: Menor unidade deployável no Kubernetes.
Características:
- Pode conter um ou mais containers
- Compartilha rede e storage
- Lifecycle efêmero
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80Deployment
O que é: Recurso que gerencia replicas de Pods.
Benefícios:
- Rolling updates
- Rollback automático
- Scaling horizontal
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80Service
O que é: Abstração que expõe aplicações rodando em Pods.
Tipos:
- ClusterIP: Acesso interno
- NodePort: Acesso externo via porta do node
- LoadBalancer: Acesso externo via load balancer
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: LoadBalancer🏗️ Arquitetura do Cluster
Control Plane Components
kube-apiserver
- API REST do Kubernetes
- Ponto de entrada para todas as operações
- Valida e processa requests
etcd
- Banco de dados distribuído
- Armazena configuração do cluster
- Fonte única da verdade
kube-scheduler
- Escolhe nodes para novos Pods
- Considera recursos disponíveis
- Políticas de scheduling
kube-controller-manager
- Gerencia controllers do cluster
- Node controller, replication controller
- Mantém estado desejado
Worker Node Components
kubelet
- Agente em cada node
- Gerencia Pods no node
- Comunica com API server
kube-proxy
- Proxy de rede
- Implementa Service concept
- Load balancing
Container Runtime
- Docker, containerd, CRI-O
- Executa containers
- Gerencia isolamento
📦 Recursos Principais
ConfigMap
O que é: Armazena dados de configuração não-confidenciais.
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "postgresql://localhost:5432/mydb"
log_level: "INFO"Secret
O que é: Armazena dados sensíveis (senhas, tokens).
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
username: YWRtaW4= # base64 encoded
password: cGFzc3dvcmQ=PersistentVolume (PV)
O que é: Recurso de storage no cluster.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"PersistentVolumeClaim (PVC)
O que é: Request por storage persistente.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi🔄 Networking
Pod Network
- Cada Pod tem IP único
- Comunicação direta entre Pods
- CNI (Container Network Interface)
Service Network
- Abstração sobre Pods
- Load balancing automático
- DNS interno
Ingress
O que é: Gerencia acesso externo aos serviços.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80📊 Monitoramento e Observabilidade
Liveness Probe
O que é: Verifica se aplicação está viva.
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10Readiness Probe
O que é: Verifica se aplicação está pronta para receber tráfego.
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5Resource Limits
O que é: Define limites de recursos para containers.
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"🚀 Deploy e Scaling
Horizontal Pod Autoscaler (HPA)
O que é: Escala automaticamente baseado em métricas.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70Rolling Update
O que é: Atualiza aplicação sem downtime.
kubectl set image deployment/app-deployment app=nginx:1.20Rollback
O que é: Reverte para versão anterior.
kubectl rollout undo deployment/app-deployment🔧 Ferramentas e Comandos
kubectl - Comandos Essenciais
Informações do Cluster
kubectl cluster-info
kubectl get nodes
kubectl get pods --all-namespacesGerenciamento de Pods
kubectl get pods
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl exec -it <pod-name> -- /bin/bashDeploy e Scaling
kubectl apply -f deployment.yaml
kubectl scale deployment <name> --replicas=5
kubectl rollout status deployment/<name>Debugging
kubectl port-forward <pod-name> 8080:80
kubectl top pods
kubectl get events🛠️ Desenvolvimento Local
Minikube
O que é: Cluster Kubernetes local para desenvolvimento.
# Instalar Minikube
minikube start
minikube dashboard
# Parar cluster
minikube stopDocker Desktop
O que é: Inclui Kubernetes local integrado.
kind (Kubernetes in Docker)
O que é: Ferramenta para criar clusters locais usando Docker.
# Criar cluster
kind create cluster
# Listar clusters
kind get clusters
# Deletar cluster
kind delete cluster📚 Helm
O que é Helm
Package manager para Kubernetes que simplifica deploy de aplicações complexas.
Conceitos
- Chart: Pacote Helm
- Release: Instância de Chart
- Repository: Repositório de Charts
Comandos Básicos
# Instalar aplicação
helm install my-app ./chart
# Listar releases
helm list
# Atualizar release
helm upgrade my-app ./chart
# Desinstalar
helm uninstall my-app🔒 Segurança
RBAC (Role-Based Access Control)
O que é: Controle de acesso baseado em roles.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]Network Policies
O que é: Controla comunicação entre Pods.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
- EgressSecurity Context
O que é: Define configurações de segurança para Pods/Containers.
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000📊 Monitoramento
Prometheus + Grafana
- Coleta métricas do cluster
- Dashboards de visualização
- Alertas automáticos
ELK Stack
- Elasticsearch: Armazena logs
- Logstash: Processa logs
- Kibana: Visualização
Jaeger
- Distributed tracing
- Análise de performance
- Debug de microservices
🚨 Troubleshooting
Problemas Comuns
Pod não inicia
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl get events --sort-by='.lastTimestamp'Service não funciona
kubectl get endpoints
kubectl describe service <service-name>
kubectl get pods -l app=<label>Storage issues
kubectl get pv
kubectl get pvc
kubectl describe pvc <pvc-name>📖 Melhores Práticas
Design de Aplicações
- Stateless: Evite estado em Pods
- Health Checks: Implemente probes
- Resource Limits: Defina limites claros
- Security: Use security contexts
Deploy
- Rolling Updates: Use Deployments
- Blue-Green: Para zero downtime
- Canary: Para testes graduais
- Rollback: Sempre possível
Monitoramento
- Logs: Centralize logs
- Métricas: Monitore recursos
- Alertas: Configure alertas
- Tracing: Para microservices
🔗 Service Mesh e Istio
O que é Service Mesh
Service Mesh é uma camada de infraestrutura que gerencia comunicação entre serviços em um cluster Kubernetes. Fornece funcionalidades como observabilidade, segurança e controle de tráfego.
Istio - Implementação Principal
# Istio Virtual Service
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: api-gateway
spec:
hosts:
- api.example.com
gateways:
- api-gateway
http:
- route:
- destination:
host: api-service
subset: v1
weight: 90
- destination:
host: api-service
subset: v2
weight: 10Traffic Management
# Destination Rule
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: api-service
spec:
host: api-service
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2Circuit Breaker
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: circuit-breaker
spec:
host: api-service
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
http:
http1MaxPendingRequests: 1024
maxRequestsPerConnection: 10
outlierDetection:
consecutive5xxErrors: 5
interval: 10s
baseEjectionTime: 30sSecurity com mTLS
# Peer Authentication
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT
# Authorization Policy
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: api-policy
namespace: default
spec:
selector:
matchLabels:
app: api-service
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/api-client"]
to:
- operation:
methods: ["GET"]
paths: ["/api/public/*"]Observabilidade Avançada
# Telemetry Configuration
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
name: mesh-telemetry
namespace: istio-system
spec:
tracing:
- randomSamplingPercentage: 10.0
metrics:
- providers:
- name: prometheusCanary Deployment
# Virtual Service para Canary
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: canary-deployment
spec:
hosts:
- api.example.com
http:
- route:
- destination:
host: api-service
subset: stable
weight: 95
- destination:
host: api-service
subset: canary
weight: 5Fault Injection
# Fault Injection para Testing
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: fault-injection
spec:
hosts:
- api.example.com
http:
- fault:
delay:
percentage:
value: 10
fixedDelay: 5s
abort:
percentage:
value: 5
httpStatus: 500
route:
- destination:
host: api-serviceRate Limiting
# EnvoyFilter para Rate Limiting
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: rate-limit
namespace: istio-system
spec:
workloadSelector:
labels:
app: api-service
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_INBOUND
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.ratelimit
typed_config:
"@type": type.googleapis.com/udpa.type.v1.TypedStruct
type_url: type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit📚 Recursos Adicionais
Documentação Oficial
Cursos e Tutoriais
Ferramentas
- Lens: IDE para Kubernetes
- K9s: Terminal UI para Kubernetes
- Helm: Package manager
- ArgoCD: GitOps tool
- Kiali: Service Mesh observability
Livros Recomendados
- "Kubernetes: Up and Running" - Kelsey Hightower
- "The Kubernetes Book" - Nigel Poulton
- "Kubernetes Patterns" - Bilgin Ibryam
- "Istio in Action" - Christian Posta
🎯 Conclusão
Kubernetes revolucionou o deploy e gerenciamento de aplicações containerizadas. Dominar seus conceitos fundamentais é essencial para desenvolvedores que trabalham com aplicações modernas e distribuídas. A plataforma oferece ferramentas poderosas para orquestração, scaling e observabilidade de aplicações em produção.
Service Mesh com Istio adiciona uma camada de inteligência para gerenciar comunicação entre serviços, fornecendo observabilidade avançada, segurança robusta e controle granular de tráfego.