Cómo monitorear Kubernetes (K3s) usando Telegraf e InfluxDB Cloud

· 7 min de lectura
Cómo monitorear Kubernetes (K3s) usando Telegraf e InfluxDB Cloud


¿Así que necesitas monitorear tus nodos que corren K3s para conocer el estado de tu cluster, no? ¿También necesitas conocer como performan tus pods, los recursos que consumen, así como el tráfico de red? bueno, este artículo es para vos.

Este blog, así como unos cuantos recursos que tengo, están corriendo en Kubernetes. Específicamente en un cluster de tres nodos en DigitalOcean que corren K3s y particularmente todo está monitoreado con Telegraf e InfluxDB.

Sobre K3s ya hemos hablado en este blog, así que les dejo los enlaces a lo mismos.

Cómo desplegar un clúster de Kubernetes en 60 segundos con k3sup
En este artículo te muestro como podés tener tu clúster de Kubernetes en 60 segundos gracias a k3sup.
Pique #18: Cómo sumar nodos a un clúster de Kubernetes con k3sup
En este pique, te voy a mostrar cómo agregar un nodo al clúster de Kubernetes que armamos con K3sup.
Video: Cómo desplegar un cluster de Kubernetes en 5 minutos con K3s
En este videotutorial te muestro cómo desplegar un cluster de Kubernetes en 5 minutos gracias a K3s.

Hoy vamos a atender el día de dos de nuestras operaciones, que es monitorear nuestro cluster para asegurarnos de que todo ande como esperamos y si no es así, bueno, poder de alguna manera, verlo.

Para monitorearlo vamos a usar básicamente dos componentes:

  • InfluxDB Cloud: Cuando monitoreamos algo, lo ideal es hacerlo desde afuera, si lo hacemos desde adentro y nuestro nodo se cae, con todo lo que esta adentro, no tiene ningún sentido el monitoreo. Pueden abrirse una cuenta gratuita desde este enlace:
InfluxDB Cloud — the most powerful time series database as a service | InfluxData
InfluxDB Cloud provides the fastest way to access the most powerful time series database as a service. InfluxDB Cloud is much more than just a database.
  • Lo otro que vamos a ncesitar es instalar un Helm chart de Telegraf, especificamente este, ya que no tiene soporte para docker-engine, cosa que si corres K3s, no lo necesitamos.
telegraf-ds-k3s 1.0.0 · awesome-helm-charts/telegraf-ds-k3s
Telegraf is an agent written in Go for collecting, processing, aggregating, and writing metrics.

Manos a la obra...

Configurando InfluxDB Cloud

Lo primero que debemos hacer es crear la cuenta en InfluxDB Cloud, una vez que esta, nos dirigimos a la sección de Data, hacemos un clic en Buckets y luego en Create Bucket.

Le ponemos un nombre y hacemos un clic sobre Create.

Así debería verse nuestra lista de buckets. Una vez identificado nuestro bucket, vamos a crear un tocket de accesso para poder escribir ese bucket. Para eso, vamos al tab que dice Tokens.

En esta sección, hacemos un clic sobre Generate Token y elegimos la opción Read/Write Token.

Especificamos un nombre, elegimos a que bucket queremos asociar este token y le damos un click en Save.

Una vez hecho este, veremos nuestro tocken ahi.

Para terminar con esta parte, vamos a necesitar nuestro Org ID y la URL al cual apuntar nuestro Telegraf.

El Org ID es nuestro correo electrónico que usamos para registrarnos en InfluxDB Cloud. La URL la saco de la barra direcciones. En mi caso, yo en su momento elegí el oeste de Estados Unidos. Así que en mi caso, se ve así:

https://us-west-2-1.aws.cloud2.influxdata.com

A monitorear nuestros nodos se ha dicho...

Ahora bien. Una vez que ya tenemos nuestra configuración pronta en InfluxDB Cloud, vamos a pasar a configurar nuestros nodos.

Como les comente más arriba, vamos a usar un Helm Chart. El mismo fue modificado por quien les escribe para adaptarse a K3s, ya que por defecto trata de monitorear docker y el mismo no se usa en la distribución de Kubernetes de la gente de Rancher.

Ahora bien, si no tenes Helm instalado, podés instalarlo corriendo este comando:

$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

Una vez que esta instalado, vamos a descargar el archivo values.yaml desde el siguiente enlace:

xe-nvdk/awesome-helm-charts
Helm charts customized to my needs. Contribute to xe-nvdk/awesome-helm-charts development by creating an account on GitHub.

Pueden agarr el archivo raw y bajarlo directamente al nodo master con un wget...

$ wget https://raw.githubusercontent.com/xe-nvdk/awesome-helm-charts/main/telegraf-ds-k3s/values.yaml

Ahora bien, este archivo, hay que modificarlo un poco... Para esto, vamos a abrirlo y vamos a modificar la parte del Output. Por defecto viene así:

...

## Exposed telegraf configuration
## ref: https://docs.influxdata.com/telegraf/v1.13/administration/configuration/
config:
  # global_tags:
  #   cluster: "mycluster"
  agent:
    interval: "10s"
    round_interval: true
    metric_batch_size: 1000
    metric_buffer_limit: 10000
    collection_jitter: "0s"
    flush_interval: "10s"
    flush_jitter: "0s"
    precision: ""
    debug: false
    quiet: false
    logfile: ""
    hostname: "$HOSTNAME"
    omit_hostname: false
  outputs:
    - influxdb:
        urls:
          - "http://influxdb.monitoring.svc:8086"
        database: "telegraf"
        retention_policy: ""
        timeout: "5s"
        username: ""
        password: ""
        user_agent: "telegraf"
        insecure_skip_verify: false
  monitor_self: false

Pero como nosotros vamos a usar InfluxDB Cloud, debemos hacer algunos ajustes, los mismos se verán más o menos así:

...

## Exposed telegraf configuration
## ref: https://docs.influxdata.com/telegraf/v1.13/administration/configuration/
config:
  # global_tags:
  #   cluster: "mycluster"
  agent:
    interval: "1m"
    round_interval: true
    metric_batch_size: 1000
    metric_buffer_limit: 10000
    collection_jitter: "0s"
    flush_interval: "10s"
    flush_jitter: "0s"
    precision: ""
    debug: false
    quiet: false
    logfile: ""
    hostname: "$HOSTNAME"
    omit_hostname: false
  outputs:
    - influxdb_v2:
        urls:
          - "https://us-west-2-1.aws.cloud2.influxdata.com"
        bucket: "kubernetes"
        organization: "miemail@midominio.com"
        token: "WIX6Fy-v10zUIag_dslfjasfljadsflasdfjasdlñjfasdlkñfj=="
        timeout: "5s"
        insecure_skip_verify: false
  monitor_self: false

Fijensé que acá vamos a poniendo los datos que creamos en la etapa anterior. Si necesitamos ajustar otros valores como el intervalo de recolección, pueden hacerlo cambiando el valor de interval, yo por ejemplo, no necesito la información cada 10 segundos, así que lo pase a 1 minuto.

Llegamos al momento de la verdad, vamos a instalar el helm chart, dependiendo de tu configuración de K3s, vas a tener que pasar la configuración del cluster como variable de entorno KUBECONFIG.

$  export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

Una vez hecho esto, vamos a agregar el repo de Awesome-Helm-Charts.

$ helm repo add awesome-helm-charts https://xe-nvdk.github.io/awesome-helm-charts/

Luego actualizaremos el contenido de los repos que tenemos configurados...

$ helm repo update

Vamos a instalarlo, pasandole la configuración que acabamos de modificar en el archivo values.yaml

$ helm upgrade --install telegraf-ds-k3s -f values.yaml awesome-helm-charts/telegraf-ds-k3s

La terminal nos devolverá algo como esto:

Release "telegraf-ds-k3s" does not exist. Installing it now.
NAME: telegraf-ds-k3s
LAST DEPLOYED: Fri Jun 25 22:47:22 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
To open a shell session in the container running Telegraf run the following:

- kubectl exec -i -t --namespace default $(kubectl get pods --namespace default -l app.kubernetes.io/name=telegraf-ds -o jsonpath='{.items[0].metadata.name}') /bin/sh

To tail the logs for a Telegraf pod in the Daemonset run the following:

- kubectl logs -f --namespace default $(kubectl get pods --namespace default -l app.kubernetes.io/name=telegraf-ds -o jsonpath='{ .items[0].metadata.name }')

To list the running Telegraf instances run the following:

- kubectl get pods --namespace default -l app.kubernetes.io/name=telegraf-ds -w

Parece ser que nuestro Helm se desplego, tengan en cuenta que este es un DaemonSet, lo cual hace que se instale en cada uno de los nodos perteneciente a este cluster de manera automática.

Para chequear que esta corriendo, podemos tirar un...

$ kubectl get pods

Veremos que nuestro pod esta vivito y coleando...

NAME                    READY   STATUS    RESTARTS   AGE
telegraf-ds-k3s-w8qhc   1/1     Running   0          2m29s

Si queremos asegurarnos de que el log es el esperado, podemos ejecutar...

$ kubectl logs -f telegraf-ds-k3s-w8qhc

La terminal deberá responderte con algo como esto:

2021-06-26T02:55:22Z I! Starting Telegraf 1.18.3
2021-06-26T02:55:22Z I! Using config file: /etc/telegraf/telegraf.conf
2021-06-26T02:55:22Z I! Loaded inputs: cpu disk diskio kernel kubernetes mem net processes swap system
2021-06-26T02:55:22Z I! Loaded aggregators:
2021-06-26T02:55:22Z I! Loaded processors:
2021-06-26T02:55:22Z I! Loaded outputs: influxdb_v2
2021-06-26T02:55:22Z I! Tags enabled: host=k3s-master
2021-06-26T02:55:22Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"k3s-master", Flush Interval:10s

Todo parece estar bien, ahora es el momento de la verdad. Vamos a nuestra cuenta de InfluxDB Cloud, a la parte de Explore y deberíamos, seleccionando el bucket ver algunos measurements y por supuesto, algunos datos.

Para ir cerrando

Como ves, parece complicado pero no lo es en absoluto, el Helm chart nos simplifica la vida y de ahora en más, podemos ver que es lo que esta pasando con nuestro cluster usando un sistema externo.

Contame si lo pudiste hacer andar, si hay algo que te falto o fallo y lo vemos sin ningún problema.


baehost