Pular para conteúdo

Operators

Um Operator é um padrão pra estender o que o Kubernetes sabe gerenciar nativamente, com duas peças: um Custom Resource Definition (CRD), que ensina a API do cluster um novo tipo de objeto (além dos nativos como Pod ou Service), e um controller, um processo rodando dentro do cluster que observa esse novo tipo de objeto continuamente e age pra fazer o estado real convergir pro que foi declarado. É o mesmo princípio de reconciliação contínua já discutido em Ansible e Argo CD, só que rodando de dentro do próprio cluster, dono de um domínio de conhecimento específico, em vez de um agente externo. O Infisical Kubernetes Operator (ver Infisical) é um exemplo concreto: o CRD é InfisicalSecret, e o controller observa cada recurso desse tipo, busca o segredo correspondente, e materializa um Secret nativo do Kubernetes com o valor, sem ninguém precisar rodar comando manual nenhum, nem de novo quando o segredo muda na origem.

flowchart TB
    subgraph API["API do Kubernetes"]
        Nativo["tipos nativos: Pod, Service, Deployment"]
        CRD["tipo novo: InfisicalSecret (via CRD)"]
    end
    Controller[controller do Operator] -->|observa| CRD
    Controller -->|age pra convergir| Realidade[estado real do cluster]

O ciclo de reconciliação

flowchart LR
    A[CRD declara o objeto] --> B[Controller observa mudança]
    B --> C[Compara estado desejado com o real]
    C --> D{Precisa de ação?}
    D -->|sim| E[Age pra convergir]
    D -->|não| F[Não faz nada]
    E --> B
    F --> B

A reconciliação precisa ser idempotente, rodar de novo sem mudança real necessária não pode ter efeito colateral, o mesmo princípio central que Ansible segue fora do cluster.

Outros Operators conhecidos

Prometheus Operator (gerencia a instalação e configuração do próprio Prometheus, ver Observabilidade, via CRDs como ServiceMonitor), KubeVirt (roda VMs completas dentro de Pods do Kubernetes) e strimzi-kafka-operator (gerencia cluster Kafka inteiro, ver Mensageria) são exemplos maduros e citados com frequência em awesome-cloud-native, categoria "Kubernetes Operators". O roteiro de Kubernetes do roadmap.sh trata "Creating Custom Controllers" e "Custom Resource Definitions (CRDs)" como tópico avançado próprio, depois de scheduling e storage, o que dá uma ideia de quão fundo esse padrão vai quando alguém decide construir um Operator do zero, em vez de só consumir um já pronto como o Infisical Operator.

Pra ir além

A antítese de um Operator é gestão manual ou via script externo: alguém (ou um cron job fora do cluster) roda comandos periodicamente pra manter algo no estado certo. Funciona pra tarefa simples, mas não reage a mudança em tempo real, e não tem o mesmo nível de integração com a API do Kubernetes (RBAC, eventos, status visível via kubectl get).

flowchart LR
    subgraph Operator["Com Operator"]
        Mudanca1[mudança no cluster] -->|reage em tempo real| Ctrl[controller]
    end
    subgraph CronJob["Script externo / cron"]
        Mudanca2[mudança no cluster] -.->|só percebida no próximo ciclo agendado| Script[script periódico]
    end

Onde aprofundar: o Kubebuilder Book é o guia de referência pra quem quer construir um Operator próprio, não só consumir um existente, cobrindo desde o CRD até o reconcile loop de verdade.