Controladores

Em robótica e automação um control loop, ou em português ciclo de controle, é um ciclo não terminado que regula o estado de um sistema.

Aqui está um exemplo de um ciclo de controle: um termostato em uma sala.

Quando você define a temperatura, isso indica ao termostato sobre o seu estado desejado. A temperatura ambiente real é o estado atual. O termostato atua para trazer o estado atual mais perto do estado desejado, ligando ou desligando o equipamento.

No Kubernetes, controladores são ciclos de controle que observam o estado do seu cluster, e então fazer ou requisitar mudanças onde necessário. Cada controlador tenta mover o estado atual do cluster mais perto do estado desejado.

Padrão Controlador

Um controlador rastreia pelo menos um tipo de recurso Kubernetes. Estes objetos têm um campo spec que representa o estado desejado. O(s) controlador(es) para aquele recurso são responsáveis por fazer o estado atual se aproximar daquele estado desejado.

O controlador pode executar a ação ele próprio; mais comumente, no Kubernetes, um controlador enviará mensagens para o servidor de API que têm efeitos colaterais úteis. Você verá exemplos disso abaixo.

Controle via servidor de API

O controlador Job é um exemplo de um controlador embutido do Kubernetes. Controladores embutidos gerenciam estado através da interação com o servidor de API do cluster.

Job é um recurso do Kubernetes que executa um Pod, ou talvez vários Pods, para realizar uma tarefa e depois parar.

(Uma vez agendado, objetos Pod se tornam parte do estado desejado para um kubelet).

Quando o controlador Job vê uma nova tarefa, ele garante que, em algum lugar no seu cluster, os kubelets em um conjunto de Nodes estão executando o número correto de Pods para realizar o trabalho. O controlador Job não executa nenhum Pod ou container ele próprio. Em vez disso, o controlador Job informa o servidor de API para criar ou remover Pods. Outros componentes no control plane atuam na nova informação (existem novos Pods para serem agendados e executados), e eventualmente o trabalho é feito.

Após criar um novo Job, o estado desejado é que esse Job seja completado. O controlador Job faz com que o estado atual para esse Job esteja mais próximo do seu estado desejado: criando Pods que fazem o trabalho que você queria para esse Job, para que o Job esteja mais próximo da conclusão.

Controladores também atualizam os objetos que os configuram. Por exemplo: uma vez que o trabalho de um Job está completo, o controlador Job atualiza esse objeto Job para marcá-lo como Finished.

(Isso é um pouco como alguns termostatos desligam uma luz para indicar que a sala está agora na temperatura que você definiu).

Controle direto

Em contraste com Job, alguns controladores precisam fazer mudanças em coisas fora do seu cluster.

Por exemplo, se você usar um ciclo de controle para garantir que existem Nodes suficientes no seu cluster, então esse controlador precisa de algo fora do cluster atual para configurar novos Nodes quando necessário.

Controladores que interagem com estado externo encontram seu estado desejado a partir do servidor de API, então comunicam diretamente com um sistema externo para trazer o estado atual mais próximo da linha.

(Existe na verdade um controlador que escala horizontalmente os nodes no seu cluster.)

O ponto importante aqui é que o controlador faz algumas mudanças para trazer seu estado desejado, e então relata o estado atual de volta ao servidor de API do seu cluster. Outros ciclos de controle podem observar esses dados relatados e tomar suas próprias ações.

No exemplo do termostato, se a sala estiver muito fria, então um controlador diferente pode também ligar um aquecedor de proteção contra geada. Com clusters Kubernetes, o control plane indiretamente trabalha com ferramentas de gerenciamento de endereços IP, serviços de armazenamento, APIs de provedores de nuvem, e outros serviços através de estender o Kubernetes para implementar isso.

Estado desejado versus atual

O Kubernetes tem uma visão cloud-native de sistemas, e é capaz de lidar com mudanças constantes.

Seu cluster pode estar mudando a qualquer momento conforme o trabalho acontece e ciclos de controle corrigem falhas automaticamente. Isso significa que, potencialmente, seu cluster nunca atinge um estado estável.

Enquanto os controladores do seu cluster estiverem executando e forem capazes de fazer mudanças úteis, não importa se o estado geral é estável ou não.

Design

Como um princípio do seu design, o Kubernetes usa muitos controladores que cada um gerencia um aspecto particular do estado do cluster. Mais comumente, um ciclo de controle particular (controlador) usa um tipo de recurso como seu estado desejado, e tem um tipo diferente de recurso que ele gerencia para fazer esse estado desejado acontecer. Por exemplo, um controlador para Jobs rastreia objetos Job (para descobrir novo trabalho) e objetos Pod (para executar os Jobs, e então ver quando o trabalho termina). Neste caso algo mais cria os Jobs, enquanto o controlador Job cria Pods.

É útil ter controladores simples em vez de um conjunto monolítico de ciclos de controle que estão interligados. Controladores podem falhar, então o Kubernetes foi projetado para permitir isso.

Formas de executar controladores

O Kubernetes vem com um conjunto de controladores embutidos que executam dentro do kube-controller-manager. Estes controladores embutidos fornecem comportamentos centrais importantes.

O controlador Deployment e o controlador Job são exemplos de controladores que vêm como parte do próprio Kubernetes (controladores "embutidos"). O Kubernetes permite que você execute um control plane resiliente, para que se qualquer um dos controladores embutidos falhar, outra parte do control plane assumirá o trabalho.

Você pode encontrar controladores que executam fora do control plane, para estender o Kubernetes. Ou, se quiser, pode escrever um novo controlador você mesmo. Você pode executar seu próprio controlador como um conjunto de Pods, ou externamente ao Kubernetes. O que se encaixa melhor dependerá do que esse controlador particular faz.

Próximos passos

Última modificação July 29, 2025 at 12:22 AM PST: docs(pt-br): fix formatting in controller page (b93a57cfc0)