Saltar a contenido

Kubernetes

A InteSys oferece clusters Kubernetes gerenciados e consultoria especializada em orquestração de contêineres. Cuidamos do ciclo de vida do cluster, escalabilidade, segurança e atualizações para que sua equipe possa focar na implantação de aplicações.

Kubernetes Gerenciado

Nosso serviço de Kubernetes gerenciado roda na infraestrutura Tier 3 da InteSys com:

  • Alta disponibilidade — Control plane multi-master em múltiplas zonas de disponibilidade
  • Atualizações automáticas — Atualizações de versão do Kubernetes com rolling updates sem downtime
  • Monitoramento integrado — Prometheus e Grafana pré-configurados para métricas do cluster
  • Rede privada — Nós do cluster em VLANs isoladas com ingress controlado

Versões Suportadas

Mantemos as três últimas versões menores do Kubernetes. Versões atualmente suportadas:

Versão Status Fim do Suporte
1.31 Atual Ativo
1.30 Suportada Ativo
1.29 Suportada 2026-06

Estratégias de Implantação

Deployments e Rolling Updates

O objeto Deployment padrão do Kubernetes gerencia rolling updates automaticamente:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: registry.intesys.io/myapp:v1.2.0
          ports:
            - containerPort: 8000
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 500m
              memory: 512Mi

Sempre Defina Requests e Limits de Recursos

Os requests de recursos garantem que seu pod seja agendado em um nó com capacidade suficiente. Os limits evitam que um pod com mau comportamento consuma todos os recursos do nó e afete outras cargas de trabalho.

Health Probes

O Kubernetes usa probes para determinar a saúde dos pods. Probes configurados corretamente são essenciais para implantações confiáveis.

Liveness Probe

Detecta se um pod está travado e precisa ser reiniciado:

livenessProbe:
  httpGet:
    path: /health
    port: 8000
  initialDelaySeconds: 10
  periodSeconds: 15
  failureThreshold: 3

Readiness Probe

Determina se um pod está pronto para receber tráfego:

readinessProbe:
  httpGet:
    path: /ready
    port: 8000
  initialDelaySeconds: 5
  periodSeconds: 10
  failureThreshold: 2

Startup Probe

Para aplicações com inicialização lenta:

startupProbe:
  httpGet:
    path: /health
    port: 8000
  initialDelaySeconds: 0
  periodSeconds: 5
  failureThreshold: 30

Liveness vs Readiness

Uma falha no liveness probe reinicia o pod. Uma falha no readiness probe remove-o do serviço, mas mantém-no em execução. Use readiness para dependências (conectividade com banco de dados) e liveness para detecção de deadlocks.

Horizontal Pod Autoscaler (HPA)

Escale pods automaticamente com base em CPU, memória ou métricas personalizadas:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 2
  maxReplicas: 20
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80

Boas Práticas de Escalabilidade

  • Defina minReplicas como pelo menos 2 para alta disponibilidade
  • Use PodDisruptionBudget para garantir disponibilidade mínima durante eventos de escala
  • Configure períodos de cooldown adequados para evitar oscilações
  • Monitore o comportamento do HPA com kubectl get hpa e dashboards Grafana

Ingress e TLS

Exponha serviços externamente com ingress gerenciado e TLS automático:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
    - hosts:
        - app.example.com
      secretName: app-tls
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp
                port:
                  number: 80

Boas Práticas de Segurança

Prática Implementação
Executar como não-root securityContext.runAsNonRoot: true
Sistema de arquivos somente leitura securityContext.readOnlyRootFilesystem: true
Remover capabilities securityContext.capabilities.drop: ["ALL"]
Network policies Restringir comunicação entre pods
Verificação de imagens Verificar imagens no CI antes da implantação
RBAC Service accounts com privilégio mínimo

Próximos Passos