Kubectl: instalando e comandos essenciais

1. O que é o kubectl e por que ele é essencial no ecossistema Kubernetes

1.1. Definição do kubectl como CLI oficial do Kubernetes

O kubectl é a ferramenta de linha de comando oficial do Kubernetes, projetada para interagir com clusters Kubernetes. Ela permite gerenciar aplicações, inspecionar recursos, depurar problemas e automatizar operações. Sem o kubectl, a administração de um cluster Kubernetes seria extremamente complexa, dependendo exclusivamente de chamadas HTTP diretas à API.

1.2. Função do kubectl na comunicação com o control plane (API Server)

O kubectl funciona como um cliente que se comunica com o API Server do Kubernetes. Quando você executa um comando como kubectl get pods, o kubectl converte essa instrução em uma requisição HTTP (geralmente REST) para o API Server, que autentica, autoriza e processa a solicitação. Essa arquitetura garante segurança e consistência nas operações.

1.3. Relação com DevOps: automação, scripts e CI/CD

No contexto DevOps, o kubectl é indispensável para automação. Ele pode ser usado em scripts de shell, pipelines CI/CD (Jenkins, GitLab CI, GitHub Actions) e ferramentas de IaC (Infrastructure as Code). Por exemplo, um pipeline pode executar kubectl apply -f deployment.yaml para implantar uma nova versão de uma aplicação automaticamente após um commit.

2. Instalação do kubectl em diferentes sistemas operacionais

2.1. Instalação no Linux (via gerenciador de pacotes e curl)

Via apt (Debian/Ubuntu):

sudo apt-get update
sudo apt-get install -y kubectl

Via curl (versão mais recente):

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

2.2. Instalação no macOS (Homebrew e download manual)

Via Homebrew:

brew install kubectl

Via download manual:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

2.3. Instalação no Windows (choco, winget e binário direto)

Via Chocolatey:

choco install kubernetes-cli

Via winget:

winget install -e --id Kubernetes.kubectl

Via binário direto:
Baixe o executável de https://dl.k8s.io/release/v1.28.0/bin/windows/amd64/kubectl.exe e adicione ao PATH.

3. Configuração inicial e contexto de cluster

3.1. Arquivo kubeconfig: estrutura e localização padrão

O arquivo kubeconfig (geralmente em ~/.kube/config) armazena informações de conexão com clusters. Sua estrutura inclui:

apiVersion: v1
clusters:
- cluster:
    server: https://192.168.1.100:6443
  name: meu-cluster
contexts:
- context:
    cluster: meu-cluster
    user: admin
  name: meu-cluster-admin
current-context: meu-cluster-admin
kind: Config
users:
- name: admin
  user:
    token: meu-token-seguro

3.2. Gerenciando múltiplos clusters com kubectl config

Para alternar entre clusters:

kubectl config get-contexts
kubectl config use-context meu-cluster-producao

3.3. Verificando conectividade: kubectl cluster-info e kubectl get nodes

kubectl cluster-info
kubectl get nodes

O primeiro mostra o endpoint do API Server e outros serviços. O segundo lista os nós do cluster com seus status.

4. Comandos essenciais para gerenciamento de Pods

4.1. Criando e listando pods: kubectl run, kubectl get pods

kubectl run nginx --image=nginx:latest
kubectl get pods
kubectl get pods -o wide

4.2. Obtendo detalhes e logs: kubectl describe pod, kubectl logs

kubectl describe pod nginx
kubectl logs nginx
kubectl logs -f nginx  # Modo follow

4.3. Executando comandos dentro do pod: kubectl exec e acesso interativo

kubectl exec nginx -- ls /usr/share/nginx/html
kubectl exec -it nginx -- /bin/bash

5. Gerenciamento de Deployments e Services

5.1. Criando deployments: kubectl create deployment e kubectl apply -f

kubectl create deployment web --image=nginx:latest --replicas=3
kubectl apply -f deployment.yaml

Exemplo de deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:latest

5.2. Escalando e atualizando: kubectl scale, kubectl rollout

kubectl scale deployment web --replicas=5
kubectl rollout status deployment/web
kubectl rollout history deployment/web
kubectl rollout undo deployment/web

5.3. Expondo aplicações com Services: kubectl expose e kubectl get svc

kubectl expose deployment web --type=NodePort --port=80
kubectl get svc
kubectl get endpoints

6. Namespaces e organização de recursos

6.1. Listando e alternando entre namespaces: kubectl get ns, --namespace

kubectl get namespaces
kubectl get pods --namespace=kube-system
kubectl get pods -n default

6.2. Criando e deletando namespaces: kubectl create namespace

kubectl create namespace dev
kubectl delete namespace dev

6.3. Boas práticas de organização para ambientes DevOps (dev, staging, prod)

Recomenda-se usar namespaces separados para cada ambiente:

kubectl create namespace dev
kubectl create namespace staging
kubectl create namespace prod
kubectl config set-context --current --namespace=dev

7. Diagnóstico e troubleshooting com kubectl

7.1. Eventos e condições: kubectl get events e kubectl describe

kubectl get events --sort-by='.lastTimestamp'
kubectl describe pod nginx-pod-falho

7.2. Verificando saúde dos nós: kubectl top nodes e kubectl top pods

kubectl top nodes
kubectl top pods

7.3. Port-forward para testes locais: kubectl port-forward

kubectl port-forward service/web 8080:80
# Acesse http://localhost:8080

8. Dicas de produtividade e boas práticas para DevOps

8.1. Aliases úteis e autocomplete (kubectl completion)

Adicione ao ~/.bashrc ou ~/.zshrc:

alias k='kubectl'
source <(kubectl completion bash)  # Para bash
source <(kubectl completion zsh)   # Para zsh
complete -F __start_kubectl k      # Autocomplete para alias

8.2. Uso de atalhos: kubectl get po, kubectl describe deploy

k get po -n dev
k describe deploy web -n prod
k logs -f pod/nginx-pod

8.3. Integração com pipelines CI/CD e scripts declarativos

Em pipelines CI/CD, use kubectl apply -f com arquivos versionados:

# Exemplo em pipeline GitLab CI
deploy:
  script:
    - kubectl apply -f k8s/deployment.yaml
    - kubectl apply -f k8s/service.yaml
    - kubectl rollout status deployment/web

Referências