Ao replicar o fluxo de trabalho real do Kubernetes, o Kuberhealthy tenta identificar problemas de produção que, de outra forma, poderiam passar despercebidos. Problemas potenciais que o Kuberhealthy detecta incluem pods que ficam presos no estado "Terminating" devido a falhas de comunicação da CNI, pods que ficam presos no estado "ContainerCreating" devido a erros de provisionamento de disco ou pods que estão reiniciando muito rapidamente. Para identificar esses tipos de problemas, o Kuberhealthy executa várias verificações em paralelo:
- Implantação e encerramento de daemonset: Esse teste implanta um daemonset ao namespace Kuberhealthy, aguarda até que todos os pods estejam no estado "Ready", encerra os pods e garante que os encerramentos sejam feitos com sucesso;
- Saúde dos Componentes: Checa o status dos componentes do cluster e alerta se um status estiver inativo por mais de 5 minutos;
- Reinicializações excessivas de pods: Monitora se um pod foi reiniciado mais de cinco vezes dentro de uma hora no namespace informado, padronizando para kube-system;
- Status dos Pods: Procura por pods que foram criados há mais de dez minutos e não estão no estado "Ready";
- DNS: Procura por falhas de DNS dentro e fora do cluster.
Testes adicionais estão previstos para futuras versões, incluindo provisionamento de serviços, resolução de DNS e provisionamento de disco.
Quando erros ou falhas ocorrem em qualquer um dos testes do Kuberhealthy, os detalhes do erro são reportados em uma página de status JSON disponível em http://kuberhealthy.kuberhealthy. A página de status JSON contém um campo booleano OK que indica o status do Kuberhealthy e um objeto JSON para cada verificação, aos quais incluem um vetor de erros listando todas descrições de erros potenciais. Informações adicionais sobre as verificações, assim como quando a última verificação foi executada também podem ser encontradas no objeto dos detalhes da verificação.
{
"OK": true,
"Errors": [],
"CheckDetails": {
"ComponentStatusChecker": {
"OK": true,
"Errors": [],
"LastRun": "2018-06-21T17:32:16.921733843Z",
"AuthoritativePod": "kuberhealthy-7cf79bdc86-m78qr"
},
"DaemonSetChecker": {
"OK": true,
"Errors": [],
"LastRun": "2018-06-21T17:31:33.845218901Z",
"AuthoritativePod": "kuberhealthy-7cf79bdc86-m78qr"
},
"PodRestartChecker namespace kube-system": {
"OK": true,
"Errors": [],
"LastRun": "2018-06-21T17:31:16.45395092Z",
"AuthoritativePod": "kuberhealthy-7cf79bdc86-m78qr"
},
"PodStatusChecker namespace kube-system": {
"OK": true,
"Errors": [],
"LastRun": "2018-06-21T17:32:16.453911089Z",
"AuthoritativePod": "kuberhealthy-7cf79bdc86-m78qr"
}
},
"CurrentMaster": "kuberhealthy-7cf79bdc86-m78qr"
}
Exemplo de página de status do Kuberhealthy README.md
O Kuberhealthy pode ser instalado através do Helm ou arquivos de especificação yaml e só está disponível dentro do cluster. Uma vez instalado, o Kuberhealthy executa em duas instâncias com uma provisão de interrupção de pods e uma estratégia de atualização contínua para garantir alta disponibilidade. O Kuberhealthy disponibiliza uma configuração de monitoramento de serviços para integrar com os alertas do Prometheus assim como um modelo para instalar um dashboard do Grafana.
A Comcast desenvolveu o Kuberhealthy a partir da necessidade de monitorar a saúde e a estabilidade de seus clusters Kubernetes e se integrar a ferramentas de monitoramento existentes, como o Prometheus. Ao imitar cargas de trabalho reais, o Kuberhealthy forneceu à Comcast uma solução de monitoramento mais robusta para o Kubernetes.
Abordagens adicionais para monitorar a saúde do cluster Kubernetes incluem a ferramenta kubelet, que agrega as estatísticas de uso de recursos dos pods, e o cAdvisor, que coleta estatísticas de CPU, memória, sistema de arquivos e uso de rede. O Grafana disponibiliza um plugin para coletar e visualizar essa métricas através do Prometheus. Além do ferramental do Kubernetes, o kube state metrics escuta o servidor Kubernetes API e coleta métricas da saúde de vários objetos, como os deployments, nodes e pods. Semelhante ao Kuberhealthy, essas métricas são informadas como texto puro em um endpoint de métricas que podem ser integrados ao Prometheus.
Para começar a usar Kuberhealthy, siga o guia de instalação ou leia mais no canal kuberhealthy no Kubernetes Slack.