Sobre o projeto

O kube-state-metrics (KSM) é um serviço que escuta o servidor de API do Kubernetes e gera métricas sobre o estado de objetos do cluster, como deployments, nodes e pods. Em vez de monitorar a saúde de componentes individuais do Kubernetes, ele reporta sobre os objetos dentro do cluster. As métricas são expostas em texto simples no endpoint HTTP /metrics (porta padrão 8080) e destinam-se ao Prometheus ou scrapers compatíveis; o endpoint reflete o estado atual do cluster, portanto objetos excluídos desaparecem dele. Filosofia de design: o KSM gera métricas a partir de objetos da API do Kubernetes sem modificação, de modo que seus recursos compartilham o grau de estabilidade dos objetos de API subjacentes. Ele expõe dados brutos e não modificados em vez de aplicar heurísticas no estilo kubectl, deixando a interpretação para os usuários. Métricas baseadas em APIs alpha são excluídas das garantias de estabilidade. Principais capacidades descritas no README: - Documentação de métricas no diretório docs, além de métricas de estado de recursos personalizados (recurso congelado em favor do resource-state-metrics). - Tratamento de labels: nomes de labels do Kubernetes são convertidos em nomes compatíveis com Prometheus (por exemplo, app.kubernetes.io/name torna-se label_app_kubernetes_io_name), com sufixos automáticos _conflictN quando as conversões colidem. - Listas de permissão/negação suportam expressões regulares ECMAScript, incluindo lookarounds, com avaliação limitada a um minuto. - Métricas próprias em um host/porta de telemetria separado (padrão 8081), incluindo contadores de sucesso e erro de list/watch, histogramas de duração de requisições HTTP, informações de build, ordinal de shard/total de shards, e hash do arquivo de configuração e status de recarga. - Orientação de escalonamento: aproximadamente 250MiB de memória e 0,1 núcleos como regra geral; limites baixos de CPU podem causar acúmulo de fila e maior uso de memória. São fornecidos números de latência de um teste de escalonamento com 100 nodes (Perc50 ~260ms, Perc90 ~475ms, Perc99 ~907ms). - Sharding horizontal via --shard e --total-shards, usando um md5 do UID do objeto módulo o total de shards; sharding automatizado em um StatefulSet usando --pod e --pod-namespace (experimental); sharding baseado em deployment com índices de shard explícitos; e sharding por daemonset para métricas de pods via --node, com --track-unscheduled-pods para pods não atribuídos. - Filtragem de recursos em /metrics usando os parâmetros de consulta resources e exclude_resources, com exclude tendo precedência. - Endpoints de saúde: /healthz e /livez na porta principal, /readyz na porta de telemetria. Configuração e uso: instale via go get k8s.io/kube-state-metrics/v2, construa um contêiner com make container e implante com kubectl apply -f examples/standard. A stack kube-prometheus já inclui o KSM como componente. Usuários do GKE podem precisar de uma vinculação cluster-admin devido a permissões estritas de função. O README também compara o KSM com o metrics-server: o metrics-server serve métricas agregadas de recursos do Kubelet via Metrics API, enquanto o KSM gera novas métricas a partir do estado dos objetos e mantém um snapshot em memória. Nenhum dos dois exporta métricas para destinos de terceiros por conta própria.