O cenário digital moderno é marcado pelo crescimento acelerado de aplicações, serviços e soluções em nuvem, que exigem o uso eficiente de recursos. Com o aumento da capacidade computacional e a necessidade de otimização, surgiu a demanda por ferramentas que permitam:
- Implantar várias aplicações no mesmo hardware.
- Gerenciar recursos (CPU, RAM, armazenamento) com o mínimo de custos.
- Garantir isolamento e segurança das cargas de trabalho.
Simplifique o trabalho com contêineres usando Managed Kubernetes — escalonamento automático, balanceamento de carga e atualizações de aplicativos sem tempo de inatividade.
O primeiro passo para resolver esses desafios foram os hipervisores, que permitiram executar máquinas virtuais isoladas. No entanto, com o avanço da containerização, surgiu a necessidade de soluções mais leves e flexíveis. Foi para isso que o Kubernetes foi criado.
Definição
Kubernetes (K8s) é uma plataforma aberta para orquestração de aplicativos em contêineres. Suas principais funções incluem:
- Automação da implantação, escalonamento e gerenciamento de aplicações.
- Otimização do uso de recursos do cluster.
- Garantia de alta disponibilidade e autorrecuperação.
Inicialmente desenvolvido pelo Google com base no sistema interno Borg, o Kubernetes tornou-se, em 2014, um projeto da Cloud Native Computing Foundation (CNCF). Hoje, é o padrão de fato para gerenciar sistemas distribuídos em ambientes híbridos e multicloud.
Por que Kubernetes e não hipervisores?
Diferente dos hipervisores, que trabalham com máquinas virtuais, o Kubernetes opera com contêineres — processos leves e rápidos que compartilham o mesmo sistema operacional. Isso proporciona:
- Maior densidade de cargas de trabalho.
- Redução de custos operacionais.
- Portabilidade entre diferentes ambientes.
Finalidade
A principal finalidade do Kubernetes é automatizar o ciclo de vida de aplicações em contêineres — incluindo implantação, escalonamento, balanceamento de carga, armazenamento persistente, segurança e suporte a ambientes híbridos. Ele oferece resiliência, eficiência e um controle unificado sobre aplicações em nuvem ou infraestrutura local.
O K8s resolve simultaneamente vários problemas:
- Evita falhas de contêineres com processos de autorrecuperação.
- Automatiza o escalonamento sem interromper serviços.
- Reduz a complexidade de configuração de rede.
- Melhora a utilização de recursos e elimina períodos de inatividade.
Conceitos principais
- Deployment — gerencia o ciclo de vida dos Pods: implantação, escalonamento e atualizações.
- Pod — unidade mínima do Kubernetes que executa um ou mais contêineres com rede e armazenamento compartilhados.
- Service — abstração que fornece acesso estável aos Pods via balanceamento de carga e DNS.
- ConfigMap e Secret — armazenam configurações e dados sensíveis, respectivamente.
- Volume — armazenamento persistente para Pods, preservando dados após reinicializações.
- Namespace — divide logicamente o cluster em ambientes isolados (por exemplo, dev/prod).
Arquitetura
A arquitetura do Kubernetes é composta por duas partes:
- Control Plane (Plano de Controle) – responsável pelo gerenciamento do cluster.
- Worker Nodes (Nós de Trabalho) – responsáveis pela execução das cargas de trabalho.
Requisitos de implantação
Para implantar o K8s, são necessários:
- Pelo menos um nó mestre (control plane) e um ou mais nós de trabalho.
- Um endereço IP para cada nó.
- Mínimo de 2 vCPUs e 2 GB de RAM.
- Comunicação entre os nós.
Instalação do Kubernetes
1. Atualização do sistema e instalação de dependências
Instale pacotes necessários para trabalhar com os repositórios do Kubernetes e CRI-O:
sudo apt update && sudo apt install -y apt-transport-https gnupg22. Desativar a memória swap — evita conflitos de gerenciamento de memória.
swapoff -a
sudo rm /swap.img
sed -i '/swap/d' /etc/fstab3. Ativar módulos do kernel para rede e armazenamento:
modprobe br_netfilter overlay
echo "br_netfilter" >> /etc/modules
echo "overlay" >> /etc/modules4. Habilitar o encaminhamento de IP:
echo 1 > /proc/sys/net/ipv4/ip_forward5. Instalar kubelet, kubeadm e kubectl:
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl6. Instalar o CRI-O (ambiente de execução de contêineres):
apt-get update
apt-get install -y cri-o cri-o-runc
systemctl enable crio && systemctl start crio7. Inicializar o cluster com kubeadm:
kubeadm init --pod-network-cidr=10.100.0.0/168. Adicionar um nó de trabalho (worker):
kubeadm join :6443 --token --discovery-token-ca-cert-hash9. Configurar acesso local via kubectl:
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/configGerenciamento do Kubernetes
Principais comandos do kubectl
Verificar recursos:
kubectl get pods
kubectl get nodes
kubectl describe podImplantar ou atualizar:
kubectl apply -f deployment.yaml
kubectl create deployment nginx --image=nginx:1.25Escalonar:
kubectl scale deployment/nginx --replicas=5Atualizar imagens:
kubectl set image deployment/nginx nginx=nginx:1.26
kubectl rollout undo deployment/nginxExcluir recursos:
kubectl delete -f deployment.yamlLogs e depuração
kubectl logs
kubectl exec -it -sh
kubectl top nodes
kubectl top podsConfigurações e segredos
ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  app.env: |
    LOG_LEVEL=INFO
    DB_HOST=postgresSecret:
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  password: dGVzdC1wYXNzd29yZA==Uso em Pods:
env:
- name: DB_PASSWORD
  valueFrom:
    secretKeyRef:
      name: db-secret
      key: passwordArmazenamento persistente
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10GiSegurança
RBAC:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]Network Policies:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
spec:
  podSelector: {}
  policyTypes:
  - IngressMonitoramento e logging
Ferramentas recomendadas:
- Prometheus + Grafana — coleta e visualização de métricas.
- EFK Stack (Elasticsearch, Fluentd, Kibana) — agregação e análise de logs.
- Kubernetes Dashboard — interface web de gerenciamento.
Instalação via Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/prometheusAutomação e CI/CD
GitOps com Argo CD:
argocd app create my-app --repo https://github.com/user/repo --path manifestsIntegração com GitLab CI:
deploy:
  stage: deploy
  script:
    - kubectl apply -f k8s/Solução de problemas
Verificação de eventos do cluster:
kubectl get events --sort-by=.metadata.creationTimestampVerificação do estado dos nós:
kubectl describe nodeDiagnóstico de rede:
kubectl run -it --rm debug --image=nicolaka/netshoot -- sh