O kube-controller-manager executa múltiplos controllers que monitoram o estado do cluster e fazem mudanças para atingir o estado desejado.

Conceito Geral

  • Contém vários controllers (Node, Replication, Endpoints, ServiceAccount, etc)
  • Cada controller monitora recursos específicos via API Server
  • Implementa loops de reconciliação (estado atual → estado desejado)
  • Apenas um controller-manager é ativo por vez em HA (leader election)
Estado Desejado (etcd)
   ↓
Controller Manager monitora
   ↓
Detecta diferença (drift)
   ↓
Controller específico age
   ↓
Cria/Atualiza/Deleta recursos
   ↓
Estado atual = Estado desejado
   ↓
Loop contínuo

Verificar Status

kubectl get pods -n kube-system | grep controller-manager
kubectl logs -n kube-system kube-controller-manager-master01 -f

Controllers Ativos

# Ver controllers habilitados
kubectl get pods -n kube-system kube-controller-manager-master01 -o yaml | grep enable-controllers

Desabilitar Controllers Específicos

# No manifesto kube-controller-manager.yaml
--controllers=*,bootstrapsigner,tokencleaner
# Desabilitar: --controllers=-deployment,-replicaset

Node Controller

# Configurar timeouts
--node-monitor-period=5s
--node-monitor-grace-period=40s
--pod-eviction-timeout=5m

Verificar Lease do Controller

kubectl get lease -n kube-system kube-controller-manager
kubectl describe lease -n kube-system kube-controller-manager

Replication Controller Issues

# Ver status de replicação
kubectl get rc,rs,deploy --all-namespaces

# Forçar reconciliação
kubectl scale deployment <name> --replicas=0
kubectl scale deployment <name> --replicas=3

Service Account Token Controller

# Verificar tokens
kubectl get secrets --all-namespaces | grep service-account-token

# Forçar criação de token
kubectl create token <service-account> -n <namespace>

Garbage Collection

# Configurar GC
--concurrent-gc-syncs=20
--enable-garbage-collector=true

# Ver objetos órfãos
kubectl get all --all-namespaces -o json | jq '.items[] | select(.metadata.ownerReferences == null)'

Métricas do Controller Manager

kubectl get --raw /metrics | grep controller_manager

Leader Election

# Verificar leader
kubectl get endpoints -n kube-system kube-controller-manager -o yaml

# Configurar election
--leader-elect=true
--leader-elect-lease-duration=15s
--leader-elect-renew-deadline=10s
--leader-elect-retry-period=2s