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