Skip to main content

Monitoreo del Cluster

Kubernetes no viene con una solución de monitoreo integrada para recolectar las métricas de los nodes y pods, pero tenemos muchas soluciones open source que podemos usar.

  • Metric Server (antiguo Heapster)
  • Prometheus
  • Elastic Stack

Y de pago como:

  • Datadog
  • Dynatrace
  • NewRelic

Vamos a centrarnos en Metric Server. Podemos ejecutar un metric server por cluster Kubernetes.

Uno de los subcomponentes del Kubelet es cAdvisor, que tiene la función de exponer las métricas de los pods a través de una API del Kubelet para que el Metrics Server pueda recolectarlas.

El Metrics Server recolecta los datos del Kubelet usando la API del Kubelet y los guarda en memoria. El Metrics Server no guarda un historial como Prometheus y otras soluciones.

Para desplegar el Metrics Server vamos a usar el GitHub Metrics Server o el Helm Metrics Server

helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm show values metrics-server/metrics-server > values.yaml

El Metrics Server aplicado directamente en el cluster Kind a veces tiene problemas con certificados. Agregue la última línea.

defaultArgs:
- --cert-dir=/tmp
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls # Para clusters kind

Y ejecute el comando para instalar pasando el values que acabamos de modificar.

helm upgrade --install metrics-server metrics-server/metrics-server --values values.yaml

Una vez instalado podemos usar los comandos.

kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
cka-cluster-control-plane 165m 1% 1027Mi 1%
cka-cluster-worker 41m 0% 478Mi 0%
cka-cluster-worker2 38m 0% 475Mi 0%
cka-cluster-worker3 39m 0% 393Mi 0%

kubectl top pods -A
NAMESPACE NAME CPU(cores) MEMORY(bytes)
default metrics-server-699ffcdc79-njfq8 5m 20Mi
default myapp-rs-4qj5l 0m 23Mi
default myapp-rs-jpct9 0m 23Mi
default myapp-rs-wvd7l 0m 23Mi
istio-system istiod-6d8c55dd6c-47s57 4m 107Mi
kube-system coredns-76f75df574-7d75t 3m 15Mi
kube-system coredns-76f75df574-99kmh 3m 58Mi
kube-system etcd-cka-cluster-control-plane 26m 97Mi
kube-system kube-apiserver-cka-cluster-control-plane 68m 387Mi
kube-system kube-controller-manager-cka-cluster-control-plane 22m 113Mi
kube-system kube-proxy-6gk2j 8m 70Mi
kube-system kube-proxy-bgpzr 5m 70Mi
kube-system kube-proxy-l8xxj 7m 70Mi
kube-system kube-proxy-vg8mb 4m 71Mi
kube-system kube-scheduler-cka-cluster-control-plane 6m 65Mi
kube-system weave-net-29ffl 2m 118Mi
kube-system weave-net-4q8kr 2m 117Mi
kube-system weave-net-8zxbw 1m 117Mi
kube-system weave-net-phbz8 2m 117Mi
local-path-storage local-path-provisioner-7577fdbbfb-7t9pc 1m 31Mi