Migração e Ferramentas
Kompose para Docker Compose
Para migrar configurações do Docker Compose para o ecossistema Kubernetes, a ferramenta Kompose é essencial. Ela interpreta arquivos docker-compose.yml e os converte em manifests do Kubernetes (ou OpenShift), facilitando a transição de ambientes de desenvolvimento local para a orquestração em produção. A instalação é simples:
curl -L https://github.com/kubernetes/kompose/releases/download/v1.28.0/kompose-linux-amd64 -o kompose_bin
chmod +x kompose_bin
sudo mv ./kompose_bin /usr/local/bin/kompose
kompose version
Segurança de Secrets
Objetos Secret no Kubernetes armazenam dados sensíveis como senhas e tokens, mas apenas com codificação Base64. Para armazenar esses manifests de forma segura em repositórios Git (públicos ou privados), utilize o projeto Sealed Secrets. Ele criptografa os Secrets antes de serem salvos no controle de versão, permitindo que sejam implantados de forma segura usando fluxos de trabalho padrão como kubectl.
Implantação de Aplicações e Serverless
Plataformas Serverless Instaláveis
Para hospedar funções em um cluster Kubernetes, considerando a filosofia Serverless, existem plataformas instaláveis como o Kubeless e o OpenFaaS. Esses projetos permitem implantar e gerenciar funções como um serviço dentro do seu próprio cluster, abstraindo a infraestrutura subjacente.
Gerenciamento e Comandos do Cluster
kubeadm para Provisionamento
A ferramenta kubeadm simplifica o processo de criar um cluster Kubernetes seguro e production-ready em máquinas físicas, virtuais ou na nuvem. Seus comandos principais seguem um fluxo lógico:
kubeadm init: Inicializa um nó do plano de controle.kubeadm join: Conecta nós worker ao cluster.kubeadm upgrade: Atualiza a versão do cluster.kubeadm token: Gerencia tokens para a junção de novos nós.kubeadm reset: Reverte as alterações feitas em um nó.
Acompanhamento em Tempo Real
Para monitorar mudanças em objetos do cluster via terminal, utilize a opção --watch do kubectl. Alternativamente, o comando watch do sistema operacional pode atualizar a saída periodicamente:
kubectl get deployments --watch
# ou
watch kubectl get pods -o wide
Recursos de Depuração
O kubectl oferece comandos detalhados para inspecionar recursos. Use kubectl describe <tipo_recurso> <nome> para ver eventos e configurações detalhadas. Para entender a estrutura de um recurso, kubectl explain <tipo_recurso> exibe sua documentação de campos.
kubectl describe service meuservice
kubectl explain deployment.spec
Apelidos de Recursos
A sintaxe do kubectl suporta apelidos curtos para a maioria dos tipos de recursos. Execute kubectl api-resources para obter a lista completa, incluindo apelidos como po (Pods), svc (Services) e deploy (Deployments).
Validação de Manifests
Antes de implantar, valide seus arquivos YAML contra as melhores práticas usando ferramentas estáticas como o KubeLinter. Ele analisa seus manifests e relata configurações inseguras ou subótimas, podendo ser integrado diretamente nos seus pipelines de CI.
Acesso à API do Cluster
Para interagir diretamente com a API do Kubernetes, inicie um proxy local com kubectl proxy. A API ficará acessível em http://127.0.0.1:8001.
kubectl proxy &
curl http://localhost:8001/api/v1/namespaces
Automação e Consultas
Autocompletar no Shell
Ative o autocompletar para o kubectl no Bash para aumentar a produtiivdade:
source <(kubectl completion bash)
echo 'source <(kubectl completion bash)' >> ~/.bashrc
Gerenciamento de Rótulos
Os rótulos (labels) são fundamentais para organizar e selecionar recursos. Para adicionar ou modificar um rótulo em um Pod:
kubectl label pods nginx app=meu-app --overwrite
Processamento JSON com jq
A ferramenta jq é poderosa para extrair e formatar dados JSON retornados pelo kubectl. Ela permite consultas complexas nos manifests de recursos.
# Instalação do jq
wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 -O jq_bin
chmod +x jq_bin
sudo mv jq_bin /usr/local/bin/jq
# Exemplos de uso: obter IP de um Pod e portas de um Service
kubectl get pod meu-pod -o json | jq '.status.podIP'
kubectl get svc meu-svc -o json | jq '.spec.ports[] | {nome: .name, porta: .port}'
Operações e Manutenção
Snapshot do Estado do Cluster
Capture um instantâneo completo do estado do cluster para diagnóstico:
kubectl cluster-info dump --output-directory=./cluster-dump
Manutenção de Nós
Para realizar manutenção em um nó (como atualizações do sistema), primeiro marque-o como não-agendável e depois drene seus Pods com segurança:
kubectl cordon nome-do-no
kubectl drain nome-do-no --ignore-daemonsets --delete-emptydir-data
# ... Realize a manutenção ...
kubectl uncordon nome-do-no
Fluxo de Depuração Estruturado (OODA)
Ao enfrentar problemas, adote um ciclo disciplinado:
- Observar: Colete dados dos sintomas, logs e status dos recursos.
- Orientar: Formule hipóteses possíveis com base nas evidências.
- Decidir: Escolha a hipótese mais provável para investigar.
- Agir: Teste sua hipótese. Se confirmada, você encontrou a causa; caso contrário, volte à etapa de observação.
Uma checklist de verificação inicial pode incluir: o problema é reproduzível? Os manifests estão corretos? Há conectividade de rede? Os recursos do cluster são suficientes?