Observabilidade no NKPParte 2: NKP Insights

Publicado
Leitura
9 min

Testado emNKP 2.19NKP Insights 1.9.7CloudNativePG 0.29.0Lab em Em outra versão, confira a matriz de compatibilidade e as release notes antes de aplicar.

Read in English

Capa da série Observabilidade no NKP, com a parte 2, NKP Insights, em destaque

Resumo: o NKP Insights é o app do catálogo que analisa o cluster e aponta pontos de atenção de disponibilidade, configuração, boas práticas e segurança, cada um com causa e solução. No management ele subiu em um minuto, porque as dependências já existiam. No workload, subiu em cerca de dois minutos, com o CloudNativePG habilitado antes e o storage Ceph da Parte 1. Em 10 minutos, mostrou os alertas do Prometheus com contexto e ciclo de vida, dentro do Kommander, onde o administrador já trabalha. Em 11 horas, encontrou 204 itens, incluindo auditorias de segurança e o CIS Benchmark. Esta é a parte 2 de 3.

Onde paramos

Na Parte 1, ligamos os logs no cluster de workload e vimos que o Alertmanager, ligado desde o primeiro dia, vem com o destino padrão "null", à espera do destino real de cada ambiente, e que uma regra crítica, o KubeProxyDown, não se aplica a um cluster com Cilium.

ParteTema
1Os conceitos e o que o NKP já entrega
2NKP Insights: o cluster apontando os próprios pontos de atenção (este post)
3OpenTelemetry Operator: traces, métricas e logs de uma aplicação, sem mexer no código

A pergunta desta parte: um app da própria plataforma consegue transformar esses alertas em algo que alguém lê e resolve?


O que é o NKP Insights

É uma ferramenta de análise da Nutanix que roda dentro do NKP. Ela examina o cluster continuamente e gera insights: achados com severidade, tipo, causa provável e solução sugerida, exibidos no próprio Kommander.

CaracterísticaNo catálogo do NKP 2.19
Versão1.9.7
CategoriaObservability
SelosNKP Core Platform e Nutanix Supported
Tipos de insightAvailability, Best Practices, Configuration e Security
SeveridadesCritical, Warning e Notice
Estado padrãoDesligado

Página do NKP Insights no catálogo: versão 1.9.7, NKP Core Platform, Nutanix Supported e a nota sobre o storage S3

A nota da página de detalhes merece atenção: com a configuração padrão, o Insights grava num bucket S3 e espera os apps Rook Ceph e Rook Ceph Cluster habilitados, com espaço suficiente. A alternativa é apontar para o Nutanix Objects ou outro S3.

Como ele está montado

O inventário da Parte 1 já mostrava um detalhe que vale conhecer: a parte central do Insights (nkp-insights-management) roda no management desde a instalação, mesmo com o app desligado. Habilitar o app acrescenta o motor de análise em cada cluster.

ComponentePapel
backendAnalisa o cluster e gera os achados
forwarderEncaminha os achados
resolution-cmControla o ciclo de vida de cada achado: aberto, silenciado, resolvido
postgresqlBanco próprio, criado pelo CloudNativePG
object-store-initJob que prepara o bucket no Ceph e termina
auth-server e mgmt-cmParte central, só no management

Um aviso antigo com nome conhecido

Na série do upgrade, o Headlamp mostrou um aviso repetido mais de cem vezes. O objeto era o FederatedSecret nkp-insights-federated-sa-token, que existe em todos os workspaces, com o Insights ligado ou não. Ou seja, ele faz parte dessa parte central que vem instalada de fábrica.

Habilitando no management: um minuto

Objetivo: ter o Insights analisando o cluster de management.

No workspace de management, a tela de Enable lista duas dependências, Prometheus Monitoring e CloudNativePG, e não pede para escolher cluster, porque só existe um. As duas dependências já estavam lá, assim como o Ceph com HEALTH_OK.

Terminal window
$ kubectl -n kommander get pods | grep insights
nkp-insights-backend-deployment-... 1/1 Running 3m59s
nkp-insights-backend-forwarder-... 1/1 Running 4m14s
nkp-insights-management-auth-server-... 1/1 Running 30h
nkp-insights-management-mgmt-cm-... 1/1 Running 30h
nkp-insights-object-store-init-... 0/1 Completed 4m14s
nkp-insights-postgresql-1 1/1 Running 4m36s
nkp-insights-resolution-cm-... 1/1 Running 4m14s

Repare nas idades: a parte central tinha 30 horas; o resto, 4 minutos. O único evento de aviso foi uma verificação de saúde do forwarder no primeiro segundo, normal durante a subida.

Habilitando no workload: dependências primeiro

Objetivo: o mesmo, no cluster de workload, aplicando a boa prática da Parte 1: dependências antes do app.

Aqui o CloudNativePG não existia. Habilitei ele antes (fica na categoria General do catálogo) e só depois o Insights. No workspace de workload, a tela de Enable pede para escolher o cluster:

Tela de Enable do NKP Insights no workspace de workload: dependências Prometheus Monitoring e CloudNativePG e seleção de cluster

Em cerca de dois minutos, o operador do CloudNativePG, o banco do Insights e o motor de análise estavam no ar:

Terminal window
$ kubectl get clusters.postgresql.cnpg.io -A
NAME INSTANCES READY STATUS
nkp-insights-postgresql 1 1 Cluster in healthy state

O object-store-init usou o Ceph que criamos na Parte 1 para os logs. Sem ele, o Insights ficaria aguardando o bucket, como o Loki na Parte 1.

Ordem que funcionou no workload

  1. Rook Ceph e Rook Ceph Cluster (já feitos na Parte 1)
  2. CloudNativePG
  3. NKP Insights

O que ele encontrou nos primeiros 10 minutos

No management, quatro achados. No workload, três.

Tela Insights do management: KubeProxyDown crítico, throttling do Fluentd em Warning, cota de nkpclusters em 100% e o aviso de motor implantado

AchadoManagementWorkloadTipo
KubeProxy sumiu do PrometheusCriticalCriticalAvailability
CPU throttling no sidecar do FluentdWarning (41,9%)Notice (28,6%)Availability e Configuration
Namespace kommander com 100% da cota de nkpclustersNotice—Availability
Motor do Insights implantadoNoticeNoticeAvailability

Dois pontos chamam atenção. Primeiro, são os mesmos pontos que o Alertmanager mostrava na Parte 1, mas sem os alertas auxiliares Watchdog e InfoInhibitor, e dentro do Kommander, onde o administrador já trabalha. Segundo, a mesma causa ganhou severidades diferentes: o throttling é Warning no management e Notice no workload, porque o limite foi mais ultrapassado num do que no outro.

Um achado por dentro

O que diferencia o Insights de uma lista de alertas é a página de detalhe. A do throttling do Fluentd:

Detalhe do insight de throttling: causa raiz com os limites do sidecar, botão View Metrics, a métrica a acompanhar e as soluções

SeçãoO que mostra
Root Cause AnalysisOs limites do container buffer-metrics-sidecar (100m de CPU, 100M de memória), um botão View Metrics e a métrica a acompanhar: container_cpu_cfs_throttled_periods_total
SolutionsO componente do NKP afetado (Logging Operator) e onde ajustar: os recursos e os valores do Helm do app
OrientaçãoQuando marcar como Resolved (corrigiu) e quando marcar como Muted (sabe que não afeta)
LinksDocumentação do Kubernetes sobre requests e limits e do kernel sobre CFS

O link Headlamp do achado abre direto o StatefulSet do Fluentd. Do aviso ao objeto, em um clique.

O ciclo de vida: Open, Muted e Resolved

O achado da cota de nkpclusters é proposital: o NKP limita um cluster por workspace. É o caso típico para Mute.

Status Muted: o insight da cota de nkpclusters continua registrado, com o botão Unmute

Silenciado, ele sai da lista de abertos, mas continua registrado e pode voltar com Unmute. Um achado marcado como Resolved só reaparece se a condição voltar. É o tipo de controle que o Alertmanager sozinho não oferece: lá, ou o alerta está disparando, ou alguém criou uma regra de silêncio com prazo.

Depois de 11 horas: 204 achados

No dia seguinte, o workload tinha 204 achados abertos: 9 Critical, 50 Warning e 145 Notice.

Insights do workload depois de 11 horas: 204 achados, com auditorias Polaris de privilégios em OpenCost e podinfo

OrigemQuantosExemplos
Auditoria Polaris (Best Practices e Security)35Containers rodando como root ou com escalada de privilégio; sem limites de CPU e memória; sem liveness probe; réplica única; Ingress sem TLS
CIS Benchmark do Kubernetes (Security)165144 aprovados, 8 reprovados, 13 que exigem verificação manual
Disponibilidade e configuração4KubeProxyDown, throttling do Fluentd, motor implantado e um ReplicaSet em crashloop

O último item merece destaque. Durante o lab da Parte 3, o Collector do OpenTelemetry entrou em crashloop por um ajuste que faltava na configuração que eu escrevi. O Insights registrou o achado cerca de dois minutos depois, antes que eu investigasse.

Boa prática: filtre por severidade e tipo

Dos 204 achados, 145 são Notice, a maioria testes CIS aprovados. Comece filtrando por Critical e Warning e pelo tipo Security; deixe os Notice para uma revisão periódica. É a mesma lição dos alertas da Parte 1: priorizar o que pede ação.

Quanto ele consome

Medido com kubectl top, logo depois da subida:

ClusterCPUMemóriaDisco
Workload (motor + banco)~18 milicores~460 MiBvolume de 8 GiB para o PostgreSQL
Management (motor + banco + parte central)~27 milicores~830 MiB—

O backend é o maior consumidor de memória. Para o dimensionamento, some as dependências: o CloudNativePG e, se ainda não existir, o Ceph da Parte 1.

Insights × Alertmanager × Headlamp

AlertmanagerNKP InsightsHeadlamp
O que éRoteador de alertas do PrometheusAnálise contínua com causa e soluçãoInterface web do Kubernetes
Origem dos achadosRegras do PrometheusRegras próprias, Polaris, CIS e métricasEventos e estado dos objetos
ContextoRótulos e um link de runbookCausa, solução, componente afetadoO objeto e seus eventos
Ciclo de vidaSilêncio com prazoOpen, Muted e Resolved—
Notificação externaSim, se configuradaNão vi no labNão
Melhor paraAcordar alguém às 3hRevisão diária e higiene do clusterInvestigar um objeto

Eles se complementam: o Insights organiza a revisão diária para quem abre o Kommander, e o Alertmanager, com um destino real configurado, é quem avisa fora dele. No lab, não encontrei uma opção de notificação externa no Insights.

Privacidade, acesso e licença

  • Onde ficam os dados: no próprio cluster, no PostgreSQL e no bucket do Ceph. Não fiz uma análise de tráfego de saída; para ambientes regulados, vale confirmar com a Nutanix.
  • Quem vê: a tela Insights fica dentro de cada workspace do Kommander e filtra por cluster e projeto, então acompanha o modelo de workspaces e as permissões do NKP.
  • Licença: o lab roda NKP Ultimate. Confirme com a Nutanix em qual edição o Insights está disponível antes de incluir numa proposta.

O que aprendi

  1. A parte central do Insights já vem instalada, mesmo com o app desligado. Habilitar acrescenta o motor de análise em cada cluster.
  2. No workload, as dependências vêm primeiro: Ceph, CloudNativePG e só então o Insights.
  3. Em minutos, o Insights mostra os alertas dentro do Kommander, com causa, solução e um link para o objeto.
  4. Mute e Resolved dão ciclo de vida aos achados, complementando a lista de alertas.
  5. Volume não é urgência: filtre por severidade e tipo, e comece pelos 9 Critical antes dos 145 Notice.
  6. Insights e Alertmanager trabalham juntos. O Insights organiza a revisão dentro do Kommander; o Alertmanager, com destino real, avisa fora dele.

Checklist do NKP Insights

  • Storage S3 disponível (Rook Ceph Cluster, Nutanix Objects ou outro S3)
  • CloudNativePG habilitado no workspace
  • Insights habilitado em cada workspace, escolhendo os clusters
  • Pods do Insights conferidos (backend, forwarder, resolution-cm, postgresql)
  • Achados Critical e Warning revisados no primeiro dia
  • Achados propositais marcados como Muted, com justificativa
  • Revisão periódica dos achados de Security e Best Practices
  • Edição do NKP confirmada com a Nutanix

O que ainda não testei

  • Notificação do NKP Insights fora do Kommander. No lab, acompanhei os achados pela tela Insights e não verifiquei um envio externo.
  • O tráfego de saída do Insights. Não fiz uma análise de rede; para ambientes regulados, é o próximo passo.
  • Outras edições do NKP. O lab roda NKP Ultimate; não testei o Insights em outra edição.

Próxima parte

Na Parte 3, o OpenTelemetry Operator: instrumentar uma aplicação Python sem mexer no código, ver os traces no Jaeger, as métricas no Prometheus e, com um clique, ir do trace até o log.

Referências

Nutanix

  • Nutanix Kubernetes Platform Guide 2.19, seção NKP Insights (portal Nutanix)

Projetos e comunidade

Comentários

Os comentários usam o GitHub Discussions; é preciso ter uma conta no GitHub.