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:
2. Desativar a memória swap — evita conflitos de gerenciamento de memória.
sudo rm /swap.img
sed -i '/swap/d' /etc/fstab
3. Ativar módulos do kernel para rede e armazenamento:
echo "br_netfilter" >> /etc/modules
echo "overlay" >> /etc/modules
4. Habilitar o encaminhamento de IP:
5. Instalar kubelet, kubeadm e kubectl:
apt-mark hold kubelet kubeadm kubectl
6. Instalar o CRI-O (ambiente de execução de contêineres):
apt-get install -y cri-o cri-o-runc
systemctl enable crio && systemctl start crio
7. Inicializar o cluster com kubeadm:
8. Adicionar um nó de trabalho (worker):
9. Configurar acesso local via kubectl:
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
Gerenciamento do Kubernetes
Principais comandos do kubectl
Verificar recursos:
kubectl get nodes
kubectl describe pod
Implantar ou atualizar:
kubectl create deployment nginx --image=nginx:1.25
Escalonar:
Atualizar imagens:
kubectl rollout undo deployment/nginx
Excluir recursos:
Logs e depuração
kubectl exec -it -sh
kubectl top nodes
kubectl top pods
Configurações e segredos
ConfigMap:
kind: ConfigMap
metadata:
name: app-config
data:
app.env: |
LOG_LEVEL=INFO
DB_HOST=postgres
Secret:
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
password: dGVzdC1wYXNzd29yZA==
Uso em Pods:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
Armazenamento persistente
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Segurança
RBAC:
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
Network Policies:
kind: NetworkPolicy
metadata:
name: deny-all-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
Monitoramento 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 install prometheus prometheus-community/prometheus
Automação e CI/CD
GitOps com Argo CD:
Integração com GitLab CI:
stage: deploy
script:
- kubectl apply -f k8s/
Solução de problemas
Verificação de eventos do cluster:
Verificação do estado dos nós:
Diagnóstico de rede: