Monitorar a integridade do Nó
Node Problem Detector é um daemon para monitoramento e relatório sobre a integridade de um nó.
Você pode executar o Node Problem Detector como um DaemonSet ou como um daemon independente.
O Node Problem Detector coleta informações sobre problemas do nó de vários daemons
e relata essas condições para o servidor de API como Condições
do nó ou como Eventos.
Para aprender como instalar e usar o Node Problem Detector, consulte a documentação do projeto Node Problem Detector.
Antes de você começar
Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o minikube ou pode usar um dos seguintes ambientes:
Limitações
- O Node Problem Detector usa o formato de log do kernel para relatar problemas do kernel. Para aprender como estender o formato de log do kernel, consulte Adicionar suporte para outro formato de log.
Habilitando o Node Problem Detector
Alguns provedores de nuvem habilitam o Node Problem Detector como um complemento.
Você também pode habilitar o Node Problem Detector com kubectl ou criando um DaemonSet de complemento.
Usando kubectl para habilitar o Node Problem Detector
kubectl fornece o gerenciamento mais flexível do Node Problem Detector.
Você pode sobrescrever a configuração padrão para adequá-la ao seu ambiente ou
para detectar problemas personalizados do nó. Por exemplo:
Crie uma configuração do Node Problem Detector similar a
node-problem-detector.yaml:apiVersion: apps/v1 kind: DaemonSet metadata: name: node-problem-detector-v0.1 namespace: kube-system labels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" spec: selector: matchLabels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" template: metadata: labels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" spec: hostNetwork: true containers: - name: node-problem-detector image: registry.k8s.io/node-problem-detector:v0.1 securityContext: privileged: true resources: limits: cpu: "200m" memory: "100Mi" requests: cpu: "20m" memory: "20Mi" volumeMounts: - name: log mountPath: /log readOnly: true volumes: - name: log hostPath: path: /var/log/Nota:
Você deve verificar se o diretório de log do sistema está correto para sua distribuição de sistema operacional.Inicie o Node Problem Detector com
kubectl:kubectl apply -f https://k8s.io/examples/debug/node-problem-detector.yaml
Usando um pod de complemento para habilitar o Node Problem Detector
Se você está usando uma solução personalizada de autoinicialização de cluster e não precisa sobrescrever a configuração padrão, você pode aproveitar o pod de complemento para automatizar ainda mais a implantação.
Crie node-problem-detector.yaml e salve a configuração no diretório do pod de complemento
/etc/kubernetes/addons/node-problem-detector em um nó da camada de gerenciamento.
Sobrescrever a configuração
A configuração padrão é incorporada ao construir a imagem do contêiner do Node Problem Detector.
No entanto, você pode usar um ConfigMap
para sobrescrever a configuração:
Altere os arquivos de configuração em
config/Crie o
ConfigMapnode-problem-detector-config:kubectl create configmap node-problem-detector-config --from-file=config/Altere o
node-problem-detector.yamlpara usar oConfigMap:apiVersion: apps/v1 kind: DaemonSet metadata: name: node-problem-detector-v0.1 namespace: kube-system labels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" spec: selector: matchLabels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" template: metadata: labels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" spec: hostNetwork: true containers: - name: node-problem-detector image: registry.k8s.io/node-problem-detector:v0.1 securityContext: privileged: true resources: limits: cpu: "200m" memory: "100Mi" requests: cpu: "20m" memory: "20Mi" volumeMounts: - name: log mountPath: /log readOnly: true - name: config # Sobrescreve o diretório config/ com o volume ConfigMap mountPath: /config readOnly: true volumes: - name: log hostPath: path: /var/log/ - name: config # Define o volume ConfigMap configMap: name: node-problem-detector-configRecrie o Node Problem Detector com o novo arquivo de configuração:
# Se você tem um node-problem-detector em execução, exclua antes de recriar kubectl delete -f https://k8s.io/examples/debug/node-problem-detector.yaml kubectl apply -f https://k8s.io/examples/debug/node-problem-detector-configmap.yaml
Nota:
Esta abordagem só se aplica a um Node Problem Detector iniciado comkubectl.Sobrescrever uma configuração não é suportado se um Node Problem Detector executa como um complemento de cluster.
O gerenciador de complementos não suporta ConfigMap.
Daemons de Problema
Um daemon de problema é um sub-daemon do Node Problem Detector. Ele monitora tipos específicos de problemas do nó e os relata para o Node Problem Detector. Existem vários tipos de daemons de problema suportados.
Um daemon do tipo
SystemLogMonitormonitora os logs do sistema e relata problemas e métricas de acordo com regras predefinidas. Você pode personalizar as configurações para diferentes fontes de log como filelog, kmsg, kernel, abrt, e systemd.Um daemon do tipo
SystemStatsMonitorcoleta várias estatísticas do sistema relacionadas à integridade como métricas. Você pode personalizar seu comportamento atualizando seu arquivo de configuração.Um daemon do tipo
CustomPluginMonitorinvoca e verifica vários problemas do nó executando scripts definidos pelo usuário. Você pode usar diferentes monitores de plugin personalizados para monitorar diferentes problemas e personalizar o comportamento do daemon atualizando o arquivo de configuração.Um daemon do tipo
HealthCheckerverifica a integridade do kubelet e do agente de execução de contêiner em um nó.
Adicionando suporte para outro formato de log
O monitor de log do sistema atualmente suporta logs baseados em arquivo, journald e kmsg. Fontes adicionais podem ser adicionadas implementando um novo observador de log.
Adicionando monitores de plugin personalizados
Você pode estender o Node Problem Detector para executar qualquer script de monitor escrito em qualquer linguagem desenvolvendo um plugin personalizado. Os scripts de monitor devem estar em conformidade com o protocolo do plugin no código de saída e saída padrão. Para mais informações, consulte a proposta de interface de plugin.
Exportador
Um exportador relata os problemas do nó e/ou métricas para determinados backends. Os seguintes exportadores são suportados:
Kubernetes exporter: este exportador relata problemas do nó para o servidor de API do Kubernetes. Problemas temporários são relatados como Events e problemas permanentes são relatados como Node Conditions.
Prometheus exporter: este exportador relata problemas do nó e métricas localmente como métricas Prometheus (ou OpenMetrics). Você pode especificar o endereço IP e porta para o exportador usando argumentos de linha de comando.
Stackdriver exporter: este exportador relata problemas do nó e métricas para a API de Monitoramento do Stackdriver. O comportamento de exportação pode ser personalizado usando um arquivo de configuração.
Recomendações e restrições
É recomendado executar o Node Problem Detector em seu cluster para monitorar a integridade do nó. Ao executar o Node Problem Detector, você pode esperar sobrecarga adicional de recursos em cada nó. Geralmente isso é aceitável, porque:
- O log do kernel cresce relativamente devagar.
- Um limite de recurso é definido para o Node Problem Detector.
- Mesmo sob alta carga, o uso de recursos é aceitável. Para mais informações, consulte o resultado de benchmark do Node Problem Detector.