30.10.2025

Como implantar e gerenciar o Kubernetes?

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:

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:

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:

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:

  1. Evita falhas de contêineres com processos de autorrecuperação.
  2. Automatiza o escalonamento sem interromper serviços.
  3. Reduz a complexidade de configuração de rede.
  4. Melhora a utilização de recursos e elimina períodos de inatividade.

Conceitos principais

  1. Deployment — gerencia o ciclo de vida dos Pods: implantação, escalonamento e atualizações.
  2. Pod — unidade mínima do Kubernetes que executa um ou mais contêineres com rede e armazenamento compartilhados.
  3. Service — abstração que fornece acesso estável aos Pods via balanceamento de carga e DNS.
  4. ConfigMap e Secret — armazenam configurações e dados sensíveis, respectivamente.
  5. Volume — armazenamento persistente para Pods, preservando dados após reinicializações.
  6. Namespace — divide logicamente o cluster em ambientes isolados (por exemplo, dev/prod).

Arquitetura

A arquitetura do Kubernetes é composta por duas partes:

  1. Control Plane (Plano de Controle) – responsável pelo gerenciamento do cluster.
  2. 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:

  1. Pelo menos um nó mestre (control plane) e um ou mais nós de trabalho.
  2. Um endereço IP para cada nó.
  3. Mínimo de 2 vCPUs e 2 GB de RAM.
  4. 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 gnupg2

2. Desativar a memória swap — evita conflitos de gerenciamento de memória.

swapoff -a
sudo rm /swap.img
sed -i '/swap/d' /etc/fstab

3. Ativar módulos do kernel para rede e armazenamento:

modprobe br_netfilter overlay
echo "br_netfilter" >> /etc/modules
echo "overlay" >> /etc/modules

4. Habilitar o encaminhamento de IP:

echo 1 > /proc/sys/net/ipv4/ip_forward

5. Instalar kubelet, kubeadm e kubectl:

apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

6. 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 crio

7. Inicializar o cluster com kubeadm:

kubeadm init --pod-network-cidr=10.100.0.0/16

8. Adicionar um nó de trabalho (worker):

kubeadm join :6443 --token --discovery-token-ca-cert-hash

9. Configurar acesso local via kubectl:

mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

Gerenciamento do Kubernetes

Principais comandos do kubectl

Verificar recursos:

kubectl get pods
kubectl get nodes
kubectl describe pod

Implantar ou atualizar:

kubectl apply -f deployment.yaml
kubectl create deployment nginx --image=nginx:1.25

Escalonar:

kubectl scale deployment/nginx --replicas=5

Atualizar imagens:

kubectl set image deployment/nginx nginx=nginx:1.26
kubectl rollout undo deployment/nginx

Excluir recursos:

kubectl delete -f deployment.yaml

Logs e depuração

kubectl logs
kubectl exec -it -sh
kubectl top nodes
kubectl top pods

Configurações e segredos

ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app.env: |
LOG_LEVEL=INFO
DB_HOST=postgres

Secret:

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: password

Armazenamento persistente

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

Seguranç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:
- Ingress

Monitoramento e logging

Ferramentas recomendadas:

Instalação via Helm:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/prometheus

Automação e CI/CD

GitOps com Argo CD:

argocd app create my-app --repo https://github.com/user/repo --path manifests

Integraçã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.creationTimestamp

Verificação do estado dos nós:

kubectl describe node

Diagnóstico de rede:

kubectl run -it --rm debug --image=nicolaka/netshoot -- sh