Gerencie instâncias ChatCLI e uma plataforma AIOps autônoma no Kubernetes com 6 CRDs, correlação de anomalias, análise por IA e remediação automática.
O ChatCLI Operator vai além do gerenciamento de instâncias. Ele implementa uma plataforma AIOps completa que detecta anomalias autônomamente, correlaciona sinais, solicita análise de IA e executa remediação — tudo sem dependências externas além do provedor LLM.
Consulta GetAlerts do servidor a cada 30s. Cria Anomaly CRs (dedup SHA256). Invalida dedup quando Issue atinge estado terminal.
2. Correlação
AnomalyReconciler + CorrelationEngine
Agrupa anomalias por recurso + janela temporal. Calcula risk score e severidade. Cria/atualiza Issue CRs com signalType.
3. Analise
AIInsightReconciler + KubernetesContextBuilder
Coleta contexto K8s real (deployment, pods, eventos, revisões). Chama AnalyzeIssue RPC com contexto enriquecido.
4. Remediação
IssueReconciler
Runbook-first: (a) Runbook manual (tiered matching), (b) gera Runbook auto da IA, ou (c) remediação agêntica (IA atua step-by-step).
5. Execução
RemediationReconciler
Executa ações no cluster: ScaleDeployment, RestartDeployment, RollbackDeployment, PatchConfig, AdjustResources, DeletePod. Modo agêntico: IA decide cada ação via loop observe-decide-act.
6. Resolução
IssueReconciler
Sucesso → Resolved (invalida dedup). Falha → re-análise com contexto de falha (estratégia diferente) → até maxAttempts → Escalated.
7. PostMortem
IssueReconciler
Resolução agêntica → PostMortem CR auto-gerado (timeline, causa raiz, lições aprendidas) + Runbook reutilizável dos passos bem-sucedidos.
O gRPC usa conexões HTTP/2 persistentes que fixam em um único pod via kube-proxy, deixando réplicas extras ociosas.
1 réplica (padrão): Service ClusterIP padrão
Múltiplas réplicas: Service headless (ClusterIP: None) é criado automaticamente, habilitando round-robin client-side via resolver dns:/// do gRPC
Keepalive: WatcherBridge faz ping a cada 30s (timeout de 5s) para detectar pods inativos rapidamente. O servidor aceita pings com intervalo mínimo de 20s (EnforcementPolicy.MinTime)
Transição: Ao escalar de 1 para 2+ réplicas (ou voltar), o operator deleta e recria o Service automaticamente (ClusterIP é imutável no Kubernetes)
O operator monitora mudanças em ConfigMaps e Secrets referenciados pelo Instance e dispara rolling updates automaticamente via hash annotations no PodTemplate:
Annotation
Fonte
Quando Muda
chatcli.io/watch-config-hash
ConfigMap <name>-watch-config
Targets do watcher alterados
chatcli.io/configmap-hash
ConfigMap <name>
Variáveis de ambiente atualizadas
chatcli.io/secret-hash
Secret referenciado em apiKeys.name
API keys criadas ou atualizadas
chatcli.io/tls-hash
Secret referenciado em server.tls.secretName
Certificados TLS renovados
Adicionar/remover targets no watcher.targets e aplicar o Instance causa rollout automático. Criar ou atualizar o Secret de API keys e renovar certificados TLS também disparam rollout automaticamente.
O operator observa (Watches) Secrets no namespace do Instance. Quando um Secret referenciado em apiKeys.name ou server.tls.secretName é criado ou atualizado, o reconciler é acionado automaticamente — mesmo que o Secret não existisse quando o Instance foi criado.
ConfigMap e Secret envFrom: Marcados como optional: true, permitindo criar o Instance antes do Secret/ConfigMap
Ordem flexível de deploy: Namespace → Instance → Secret/ConfigMap (qualquer ordem após o namespace)
Procedimentos operacionais. Runbooks manuais têm prioridade sobre tudo. Quando não há Runbook manual, a IA gera automaticamente um Runbook CR reutilizável a partir das ações sugeridas.
Runbook manual
Runbook auto-gerado pela IA
Copiar
apiVersion: platform.chatcli.io/v1alpha1kind: Runbookmetadata: name: high-error-rate-deployment namespace: productionspec: description: "Standard procedure for high error rate incidents on Deployments" trigger: signalType: error_rate severity: high resourceKind: Deployment steps: - name: Scale up action: ScaleDeployment description: "Increase replicas to absorb the error spike" params: replicas: "4" - name: Rollback action: RollbackDeployment description: "Revert to previous stable version if scaling doesn't help" maxAttempts: 3
Quando não há Runbook manual nem ações sugeridas pela IA, o operator cria um plano agêntico. A IA atua como um agente com skills Kubernetes em um loop observe-decide-act:
Safety Guards: Maximum of 10 steps (configurable via agenticMaxSteps), timeout of 10 minutes. If an action fails, the observation reports “FAILED: error” and the loop continues — the AI receives the feedback and adapts.
Na resolução agêntica: O operator gera automaticamente:
PostMortem CR com timeline, causa raiz, impacto, lições aprendidas
Runbook CR reutilizável com os passos bem-sucedidos (label source=agentic)
Relatório de incidente gerado automaticamente após resolução por remediação agêntica. Contém o histórico completo do incidente: detecção, análise, ações executadas e resolução.
Copiar
apiVersion: platform.chatcli.io/v1alpha1kind: PostMortemmetadata: name: pm-api-gateway-pod-restart-1771276354 namespace: productionspec: issueRef: name: api-gateway-pod-restart-1771276354 resource: kind: Deployment name: api-gateway namespace: production severity: highstatus: state: Open # Open | InReview | Closed summary: "OOMKilled containers caused cascading restarts on api-gateway" rootCause: "Memory limit (512Mi) insufficient for current workload pattern" impact: "Service degradation for 5 minutes, 30% error rate increase" timeline: - timestamp: "2026-02-16T10:30:00Z" type: detected detail: "Issue detected: pod_restart on api-gateway" - timestamp: "2026-02-16T10:31:00Z" type: action_executed detail: "ScaleDeployment to 5 replicas" - timestamp: "2026-02-16T10:31:35Z" type: action_executed detail: "AdjustResources memory_limit=1Gi" - timestamp: "2026-02-16T10:32:10Z" type: resolved detail: "All pods stable, issue resolved" lessonsLearned: - "Memory limits should account for peak workload patterns" - "Set up HPA to auto-scale on memory pressure" preventionActions: - "Configure HPA with min 3 replicas for api-gateway" - "Set memory limit to 1Gi across all environments" duration: "2m10s" generatedAt: "2026-02-16T10:32:10Z"
1. Runbook manual existente (match tiered)2. Runbook auto-gerado pela IA (materializado como CR reutilizável)3. Remediação agêntica por IA (loop observe-decide-act, gera PostMortem + Runbook)4. Escalonamento (apenas quando agêntico falha após max tentativas)
O WatcherBridge e o componente que conecta o servidor ChatCLI ao operator:
Polling: Consulta GetAlerts do servidor a cada 30 segundos
Descoberta: Localiza o servidor via Instance CRs (primeiro Instance com endpoint gRPC pronto)
Dedup: Hash SHA256 do tipo+deployment+namespace (sem componente temporal — um problema contínuo gera apenas uma Anomaly). TTL de 2 horas
Invalidação de dedup: Quando Issue atinge estado terminal (Resolved/Escalated), entradas de dedup para o recurso são removidas, permitindo detecção imediata de recorrência
cd operator# Buildgo build ./...# Testes (96 funções, 125 com subtests)go test ./... -v# Docker (deve ser construído a partir do root do repositório)docker build -f operator/Dockerfile -t myregistry/chatcli-operator:dev .# Instalar CRDs no clusterkubectl apply -f config/crd/bases/# Deploy o operatormake deploy IMG=myregistry/chatcli-operator:dev