Checkmk
to checkmk.com
Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. Introducción

kubernetes logo

Kubernetes lleva bastante tiempo siendo la herramienta más utilizada para la orquestación de contenedores. Checkmk te ayuda a realizar la monitorización de tus entornos de Kubernetes. Desde el nivel de nodo y desde el nivel de clúster hasta los pods individuales, puedes realizar la monitorización de todos los objetos importantes de tus cargas de trabajo. Para obtener una lista completa de todos los check plugins disponibles para realizar la monitorización de Kubernetes, consulta nuestro Catálogo de check plugins.

1.1. Distribuciones y versiones compatibles

A partir de la versión 2.2.0, Checkmk es compatible con las siguientes distribuciones y servicios de Kubernetes:

  • Kubernetes Vanilla

  • Amazon Elastic Kubernetes Service (Amazon EKS)

  • Azure Kubernetes Service (AKS)

  • Google Kubernetes Engine (GKE), incluido el modo Autopilot

  • OpenShift

  • Tanzu Kubernetes

Nuestro objetivo es dar soporte a cada una de las últimas 5 versiones (menores) lanzadas de Kubernetes. Por lo tanto, también damos soporte a versiones de Kubernetes que ya han quedado fuera del ciclo de vida de Kubernetes (Vanilla). Por encima de todo, garantizamos una colaboración fluida con aquellos proveedores de nube que también ofrecen períodos de soporte más largos para sus servicios de Kubernetes. Inmediatamente después del lanzamiento de una nueva versión de Kubernetes, puede pasar un tiempo —dependiendo del alcance de las nuevas funciones y del momento— hasta que también sea totalmente compatible con Checkmk. En cuanto Checkmk pueda funcionar sin problemas con esta nueva versión, lo anunciaremos en un Werk (como el Werk #14584).

1.2. Primeros pasos con la monitorización de Kubernetes

Para una introducción a la nueva monitorización de Kubernetes, te recomendamos nuestros dos vídeos: «Monitorización de Kubernetes con Checkmk» y «Detección de problemas y configuración de alertas para clústeres de Kubernetes».

1.3. Estructura del entorno de monitorización

Dado que los clústeres de Kubernetes pueden sufrir cambios importantes rápidamente en cuanto al número y la ubicación de los componentes individuales, te recomendamos crear un sitio independiente para monitorizar tu entorno de Kubernetes. A continuación, puedes conectar este sitio a tu site central como de costumbre mediante la monitorización distribuida.

1.4. El proceso de monitorización de Kubernetes en Checkmk

Checkmk realiza la monitorización de tus clústeres de Kubernetes de dos maneras:

monitoring kubernetes architecture

El agente especial de Kubernetes simplemente recupera información básica a través del servidor API de tu clúster. Esto ya permite recuperar los estados de los nodos y los contenedores. La mayor parte de los metadatos de tus pods y despliegues también se obtienen de esta manera.

Sin embargo, para una monitorización completa, todavía falta algo en este punto. Preguntas como cuánta carga genera una implementación concreta en la CPU, o cuánta memoria está utilizando actualmente un DaemonSet, no pueden responderse de esta manera.

Aquí es donde entran en juego nuestro Checkmk Colector de nodo y nuestro Checkmk Colector del clúster. Son una parte indispensable de la monitorización de Kubernetes dentro de Checkmk. Por lo tanto, una parte nada desdeñable de lo que sigue en este artículo trata también sobre su instalación y configuración. Además, el uso de los dashboards de Kubernetes en las ediciones comerciales solo tiene sentido si los Colectores de nodo y del clúster pueden proporcionar datos sobre las cargas para ello.

1.5. Diferencias con respecto a otras monitorizaciones en Checkmk

Al realizar la monitorización de pods y réplicas en tus clústeres de Kubernetes, a veces se producen cambios de estado o retrasos con mucha más frecuencia. Para tenerlo en cuenta, las comprobaciones de ciertos estados de estos objetos solo cambian su estado en Checkmk tras 10 minutos.

1.6. Diferencias con respecto a la monitorización heredada de Kubernetes

La monitorización de Kubernetes en Checkmk se ha reescrito desde cero. El alcance de los datos que se pueden monitorizar ha aumentado considerablemente. Dado que la base técnica de la monitorización de Kubernetes en Checkmk 2.1.0 es fundamentalmente diferente, no es posible transferir ni reescribir datos de monitorización anteriores de tus objetos de Kubernetes.

2. Creación de los requisitos previos en el clúster

Para poder realizar la monitorización de tu clúster de Kubernetes en Checkmk, primero debes crear los requisitos previos en tu clúster. Lo primero y más importante es indicarle al clúster qué pods/contenedores debe distribuir y cómo configurarlos.

2.1. Configuración del repositorio Helm

La instalación de la monitorización de Kubernetes se realiza con la ayuda de la herramienta helm. Helm también es adecuado para usuarios con menos experiencia y estandariza la gestión de las configuraciones. Helm es una especie de administrador de paquetes para Kubernetes. Si aún no utilizas Helm, normalmente puedes obtenerlo desde el administrador de paquetes de tu distribución de Linux o desde el sitio web del proyecto Helm.

Puedes usar Helm para incluir repositorios como fuentes y añadir fácilmente los Charts de Helm que contienen a tu clúster, del mismo modo que los paquetes. En primer lugar, identifica el repositorio. En el siguiente ejemplo, usamos el nombre checkmk-chart para facilitar el acceso al repositorio más adelante. Por supuesto, también puedes usar cualquier otro nombre que prefieras:

user@host:~$ helm repo add checkmk-chart https://checkmk.github.io/checkmk_kube_agent
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Actualizamos nuestros gráficos de Helm cada vez que los nuevos avances en Kubernetes lo requieren. Por lo tanto, vale la pena checkear de vez en cuando si hay nuevas versiones disponibles en el repositorio. Si has nombrado tu copia local de nuestro repositorio checkmk-chart, como en el comando anterior, puedes usar el siguiente comando para mostrar todas las versiones de los gráficos disponibles en el repositorio:

user@host:~$ helm search repo checkmk-chart --versions
NAME           	CHART VERSION   APP VERSION   DESCRIPTION
checkmk-chart/checkmk	1.2.0        	  1.2.0         Helm chart for Checkmk - Your complete IT monit...
checkmk-chart/checkmk	1.1.0        	  1.1.0         Helm chart for Checkmk - Your complete IT monit...
checkmk-chart/checkmk	1.0.1        	  1.0.1       	Helm chart for Checkmk - Your complete IT monit...
checkmk-chart/checkmk	1.0.0        	  1.0.0       	Helm chart for Checkmk - Your complete IT monit...
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si hay una versión más reciente disponible, puedes actualizarla con helm repo update.

2.2. Personalización de la configuración para tu entorno

Como no podemos saber de antemano cómo está estructurado tu clúster de Kubernetes, hemos elegido la variante más segura para el inicio de los Colectores del clúster: Por defecto, no se proporciona ningún puerto al que se pueda acceder de forma remota. Para poder acceder a los Colectores del clúster más adelante, tendrás que adaptar estos ajustes a tu clúster en particular.

Admitimos dos rutas de comunicación por defecto: la consulta a través de Ingress y la consulta a través de NodePort. La configuración de estas variará dependiendo de la variante que admita tu clúster.

Para poder determinar tú mismo ciertos parámetros en todas las configuraciones, debes incluir un archivo de control, el llamado «values.yaml».

Hay dos formas de crear dicho archivo «values.yaml». Puedes extraer el archivo que te proporcionamos en los Charts de Helm y realizar su edición, o simplemente crear tú mismo una versión mínima.

Siempre que quieras distribuir cambios en este archivo en tu clúster, puedes volver a utilizar el comando de instalación de los Chartes de Helm que veremos más adelante en este artículo.

Crear tu propio archivo values.yaml básico

Puedes crear un archivo «values.yaml» en el que solo introduzcas los valores que quieras modificar. En nuestro Chart de Helm, por ejemplo, el tipo de servicio del Colector del clúster está configurado como «ClusterIP» por defecto. Si ahora solo quieres cambiar este tipo de servicio a «NodePort» y el puerto a 30035, basta con crear un archivo «values.yaml» de la siguiente manera:

user@host:~$ echo 'clusterCollector: {service: {type: NodePort, nodePort: 30035}}' > values.yaml
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Una activación de Ingress podría tener este aspecto:

user@host:~$ echo 'clusterCollector: {ingress: { enabled: true }}' > values.yaml
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Extrayendo values.yaml de los Charts de Helm

El archivo «values.yaml» completo que te proporcionamos se puede extraer fácilmente con el siguiente comando:

user@host:~$ helm show values checkmk-chart/checkmk > values.yaml
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Ahora puedes adaptar el archivo creado de esta manera a tus necesidades y pasarlo a helm con el parámetro -f values.yaml durante la instalación o durante una actualización posterior.

Proporcionar comunicación a través de Ingress

Si utilizas Ingress para controlar el acceso a tus servicios, edita las partes ya preparadas en values.yaml en consecuencia. Para una mejor Vista general, en el siguiente ejemplo abreviado solo se muestra la parte relevante. Establece el parámetro enabled en true. Adapta los parámetros restantes según tu entorno:

values.yaml
  ingress:
    enabled: true
    className: ""
    annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /
    hosts:
      - host: checkmk-cluster-collector.local
        paths:
          - path: /
            pathType: Prefix
    tls: []
    #  - secretName: chart-example-tls
    #    hosts:
    #      - chart-example.local
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Proporcionar comunicación a través de NodePort

También puedes proporcionar acceso a los servicios directamente a través de un puerto. Esto es necesario si no utilizas Ingress. En el siguiente ejemplo, solo se muestra la sección relevante. Estableces el valor type en NodePort y eliminas el comentario del valor nodePort:

values.yaml
  service:
    # if required specify "NodePort" here to expose the cluster-collector via the "nodePort" specified below
    type: NodePort
    port: 8080
    nodePort: 30035
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Configuración del Colector del clúster para HTTPS

Si quieres switchear la comunicación con y entre los Colectores del clúster a HTTPS, también debes realizar cambios en el archivo values.yaml.

A continuación se muestra la sección del archivo values.yaml que te proporcionamos y que debes editar para habilitar HTTPS:

values.yaml
tlsCommunication:
  enabled: false
  verifySsl: false
  # clusterCollectorKey: |-
  #   -----BEGIN EC PRIVATE KEY-----
  #   XYZ
  #   -----END EC PRIVATE KEY-----
  # clusterCollectorCert: |-
  #   -----BEGIN CERTIFICATE-----
  #   XYZ
  #   -----END CERTIFICATE-----
  # checkmkCaCert: |-
  #   -----BEGIN CERTIFICATE-----
  #   XYZ
  #   -----END CERTIFICATE-----
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

En las líneas que empiezan por enabled o verifySsl, debes sustituir false por true. A continuación, elimina los signos de almohadilla (#) que hay delante de las tres secciones clusterCollectorKey, clusterCollectorCert y checkmkCaCert e inserta los datos correspondientes a continuación. Tu organización debe decidir si usar certificados autofirmados u obtener certificados de una Autoridad de Certificación (CA).

Ten en cuenta que los certificados deben cumplir los siguientes requisitos:

  • El certificado de la CA debe contener el nombre del host o el nombre del Ingress como FQDN.

  • En el caso del certificado del servidor, el FQDN debe seguir este patrón: <service_name>.<namespace>.cluster.local.

  • En la sección [ v3_ext ] del archivo de configuración para generar tu solicitud de firma de certificado, el subjectAltName debe tener una coincidencia con el siguiente patrón: subjectAltName = DNS:<service_name>.<namespace>.cluster.local, DNS:<service_name>.<namespace>, IP:<service ip>

Usar tu propia cuenta de servicio

Al usar nuestros Charts de Helm, se crearía una cuenta de servicio en tu clúster de forma predeterminada. Si ya tienes una cuenta de servicio adecuada, basta con añadirla en values.yaml y suprimir la creación de una nueva cuenta.

values.yaml
serviceAccount:
  create: false
  name: "myserviceaccount"
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Requisito previo para la monitorización de GKE Autopilot

Si operas tu clúster de GKE (Google Kubernetes Engine) en modo Autopilot, también es posible realizar la monitorización con Checkmk, ya que Checkmk es lo que se conoce como socio de Autopilot.

Solo tienes que configurar var_run como readOnly en tu archivo values.yaml:

values.yaml
volumeMountPermissions:
      var_run:
        readOnly: true
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Configura el controlador de admisión de seguridad de pod

Si utilizas Pod Security Standards en tu clúster, debes configurar el Colector del clúster de Checkmk para que tenga acceso sin restricciones en el namespace correspondiente. Lo ideal es crear un namespace con la siguiente especificación:

namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: checkmk-monitoring
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/enforce-version: latest
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Puedes crear el namespace ejecutando, por ejemplo, `kubectl apply -f namespace.yaml`. Ten en cuenta que entonces no necesitarás usar la opción `--create-namespace` cuando ejecutes el comando `helm upgrade` más adelante.

Si el Colector del clúster ya está en ejecución o el namespace ya existe, también puedes configurar las etiquetas anteriores con el siguiente comando:

user@host:~$ kubectl label --overwrite ns checkmk-monitoring pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/enforce-version=latest
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Directivas de seguridad de pods y directivas de red

Las directivas PodSecurityPolicy (PSP, por sus siglas en inglés) y NetworkPolicy se incluyen en nuestro Chart de Helm principalmente por motivos de compatibilidad. Dado que las PSP se han eliminado por completo de Kubernetes a partir de la versión v1.25, las hemos desactivado de forma predeterminada a partir de la versión 1.3.0 de nuestro Chart de Helm.

La sección correspondiente ahora tiene este aspecto:

values.yaml
rbac:
  pspEnabled: false
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si sigues utilizando el PSP en tu clúster, es necesario configurar esta opción como «true» en el archivo «values.yaml»:

values.yaml
rbac:
  pspEnabled: true
Copiar el contenido del archivo al portapapeles
¡Se ha copiado correctamente el contenido del archivo al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si, más adelante, vemos que esta entrada no pasa por el proceso correcto incluso cuando está desactivada, la eliminaremos por completo.

Lo mismo se aplica a NetworkPolicy. Si utilizas esto en tu clúster, tendrás que cambiar la ubicación en values.yaml de enabled: false a enabled: true. En este caso, consulta la siguiente documentación en values.yaml para configurar NetworkPolicy correctamente.

values.yaml
## ref: https://kubernetes.io/docs/concepts/services-networking/network-policies/
networkPolicy:
  # keep in mind: your cluster network plugin has to support NetworkPolicies, otherwise they won't have any effect
  enabled: false

  # specify ipBlock cidrs here to allow ingress to the cluster-collector
  # this is required for the checkmk servers to be able to scrape data from checkmk, so include the resprective ip range(s) here
  allowIngressFromCIDRs: []
  # - 127.0.0.1/32 # e.g. Checkmk Server
  # - 127.0.0.1/24 # e.g. Metallb speakers

  # the cluster-collector needs to be able to contact the kube-apiserver
  # you have three options here to choose from, depending on your cluster setup:
  # 1) if your apiserver resides outside the cluster, resp. you have a kubernetes endpoint available (check via "kubectl -n default get ep kubernetes")
  #    we can make use of helm lookup to automatically inject the endpoint (cidr + port) here.
  #    This is the most comfortable one, just note that helm lookup won't work on a "helm template" or "helm diff" command.
  #    (see also: https://helm.sh/docs/chart_template_guide/functions_and_pipelines/#using-the-lookup-function)
  # 2) similar to 1) you can also specify the "ipBlockCidr" directly. Make sure to disable "enableCidrLookup", and also fill the "port".
  # 3) if the apiserver resides inside the cluster, disable "enableCidrLookup", unset "ipBlockCidr", and fill the "labelSelectors" section
  #    with the name of the namespace where the kube-apiserver is availabe, and the label key and label value that defines your kube-apiserver pod.
  egressKubeApiserver:
    enableCidrLookup: true
    # ipBlockCidr: 172.31.0.3/32
    # port: 6443
    # labelSelectors:
    #   namespace: kube-system
    #   key: app
    #   value: kube-apiserver
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

2.3. Instalación de Chart de Helm

Después de personalizar values.yaml o crear tu propio Helm chart, usa el siguiente comando para instalar todos los componentes necesarios en tu clúster y poder realizar la monitorización en Checkmk:

user@host:~$ helm upgrade --install --create-namespace -n checkmk-monitoring myrelease checkmk-chart/checkmk -f values.yaml
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Dado que este comando no se explica por sí mismo, a continuación te ofrecemos una explicación de las opciones individuales:

Elemento del comando Descripción

helm upgrade --install

Esta parte es el comando básico para enviar la configuración al clúster de Kubernetes.

--create-namespace

En Kubernetes, siempre se especifica a qué namespace se debe añadir la configuración. Necesitas esta opción si el namespace aún no existe. En ese caso, Helm lo creará.

-n checkmk-monitoring

Esta opción especifica el namespace al que se debe añadir la configuración. «checkmk-monitoring» es solo un ejemplo de cómo se podría llamar.

myrelease

Aquí, myrelease denota la versión. Cada instancia de un Chart de Helm que se ejecuta en tu clúster de Kubernetes se denomina versión. Puedes elegir este nombre libremente.

checkmk-chart/checkmk

La primera parte de esta opción describe el repositorio que creaste anteriormente. La segunda parte —después de la barra— es el paquete que contiene la información necesaria para crear la configuración de tu monitorización de Kubernetes.

-f values.yaml

Por último, introduce el archivo de configuración que has creado o adaptado anteriormente. Contiene todas las personalizaciones que se incluirán en los archivos de configuración creados con helm.

Una vez que hayas ejecutado el comando, tu clúster de Kubernetes estará listo para la monitorización con Checkmk. El clúster se encargará ahora de garantizar que los pods necesarios y los contenedores que contienen estén en ejecución y sean accesibles.

Salida del Chart de Helm

Así que lo siguiente que hay que hacer es configurarlo en Checkmk. Para que esta configuración sea lo más sencilla posible, hemos dotado a la salida de nuestros Charts de Helm de toda una serie de comandos. Esta salida también se ajusta automáticamente a los valores que especificaste en el archivo values.yaml. Si utilizas el NodePort, obtendrás los comandos para mostrar la IP y el puerto del NodePort, entre otras cosas. Si, por el contrario, utilizas Ingress, la salida se adaptará en consecuencia. A continuación te mostramos la salida —ligeramente abreviada— tras una instalación correcta al utilizar el NodePort:

user@host:~$ helm upgrade --install --create-namespace -n checkmk-monitoring myrelease checkmk-chart/checkmk -f values.yaml
Release "myrelease" has been upgraded. Happy Helming!
NAME: myrelease
LAST DEPLOYED: Sat Dec 16 19:00:11 2022
NAMESPACE: checkmk-monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
You can access the checkmk `cluster-collector` via:
NodePort:
  export NODE_PORT=$(kubectl get --namespace checkmk-monitoring -o jsonpath="{.spec.ports[0].nodePort}" services myrelease-checkmk-cluster-collector);
  export NODE_IP=$(kubectl get nodes --namespace checkmk-monitoring -o jsonpath="{.items[0].status.addresses[0].address}");
  echo http://$NODE_IP:$NODE_PORT
  # Cluster-internal DNS of `cluster-collector`: myrelease-checkmk-cluster-collector.checkmk-monitoring
With the token of the service account named `myrelease-checkmk-checkmk` in the namespace `checkmk-monitoring` you can now issue queries against the `cluster-collector`.
Run the following to fetch its token and the ca-certificate of the cluster:
  export TOKEN=$(kubectl get secret myrelease-checkmk-checkmk -n checkmk-monitoring -o=jsonpath='{.data.token}' | base64 --decode);
  export CA_CRT="$(kubectl get secret myrelease-checkmk-checkmk -n checkmk-monitoring -o=jsonpath='{.data.ca\.crt}' | base64 --decode)";
  # Note: Quote the variable when echo'ing to preserve proper line breaks: `echo "$CA_CRT"`
To test access you can run:
  curl -H "Authorization: Bearer $TOKEN" http://$NODE_IP:$NODE_PORT/metadata | jq
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Desde este resultado, simplemente copia las líneas en color y ejecuta los comandos.

El primer bloque te muestra información sobre el NodePort:

user@host:~$ export NODE_PORT=$(kubectl get --namespace checkmk-monitoring -o jsonpath="{.spec.ports[0].nodePort}" services myrelease-checkmk-cluster-collector);
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!
user@host:~$ export NODE_IP=$(kubectl get nodes --namespace checkmk-monitoring -o jsonpath="{.items[0].status.addresses[0].address}");
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!
user@host:~$ echo http://$NODE_IP:$NODE_PORT
http://10.184.38.103:30035
----
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Esta es exactamente la dirección que debes introducir más adelante en Checkmk, en la regla de Kubernetes, en el campo «Collector NodePort / Ingress endpoint».

Con los comandos del siguiente bloque obtendrás tanto el token como el certificado de la cuenta de servicio. Los datos se almacenan así en las variables del entorno «TOKEN» y «CA_CRT». Al mostrar la variable «CA_CRT», asegúrate de ponerla entre comillas, ya que de lo contrario se perderán los importantes saltos de línea del certificado.

user@host:~$ export TOKEN=$(kubectl get secret myrelease-checkmk-checkmk -n checkmk-monitoring -o=jsonpath='{.data.token}' | base64 --decode);
user@host:~$ export CA_CRT="$(kubectl get secret myrelease-checkmk-checkmk -n checkmk-monitoring -o=jsonpath='{.data.ca\.crt}' | base64 --decode)";
user@host:~$ echo $TOKEN
eyJhbGciOiJSUzI1NiIsImtpZCI6InR6VXhGSU ...
user@host:~$ echo "$CA_CRT"
-----BEGIN CERTIFICATE-----
MIIBdjCCAR2gAwIBAgIBADAKBggqhkjOPQQDAjAjMSEwHwYDVQQDDBhrM3Mtc2Vy
dmVyLWNhQDE2NjIxNDc5NTMwHhcNMjIwOTAyMTk0NTUzWhcNMzIwODMwMTk0NTUz
...
-----END CERTIFICATE-----
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Al configurar Checkmk, debes guardar tanto el token como el certificado. Deja el shell abierto con esta información o copia el token y el certificado a una ubicación a la que puedas acceder durante la siguiente configuración en Checkmk.

Si has ejecutado los dos comandos de exportación anteriores, puedes usar el último comando para verificar que la configuración se ha realizado correctamente:

user@host:~$ curl -H "Authorization: Bearer $TOKEN" http://$NODE_IP:$NODE_PORT/metadata | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1815  100  1815    0     0   126k      0 --:--:-- --:--:-- --:--:--  126k
{
  "cluster_collector_metadata": {
    "node": "mynode",
    "host_name": "myrelease-checkmk-cluster-collector-58f97df9c9-mdhsw",
    "container_platform": {
      "os_name": "alpine",
      "os_version": "3.15.4",
      "python_version": "3.10.4",
      "python_compiler": "GCC 10.3.1 20211027"
    },
    "checkmk_kube_agent": {
      "project_version": "1.0.1"
    }
  }
  ...
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Al principio de la salida, muy abreviada, por ejemplo, puedes ver la versión del Colector del clúster. Más abajo, aparecerían los metadatos de todos los nodos de este clúster.

3. Configuración de la monitorización en Checkmk

A continuación, en la GUI de Checkmk, pasamos a configurar el agente especial y una regla para crear automáticamente hosts para tus objetos de Kubernetes. Sin embargo, para configurar el agente especial, primero hay que cumplir algunos requisitos previos:

3.1. Almacenamiento de la contraseña (token) en Checkmk

Lo mejor es guardar la contraseña (token) de la cuenta de servicio en el almacén de contraseñas de Checkmk. Esta es la opción más segura, ya que te permite separar organizativamente el almacenamiento y el uso de la contraseña. Como alternativa, introduce la contraseña directamente en texto sin formato al crear la regla (ver más abajo). Para obtener información sobre cómo mostrar la contraseña requerida, consulta la salida del Chart de Helm. Añade la contraseña al almacén de contraseñas de Checkmk con Setup > General > Passwords > Add password, por ejemplo, bajo el ID y el título My Kubernetes Token:

kubernetes password

3.2. Importar el certificado de CA de una cuenta de servicio a Checkmk.

Para que Checkmk confíe en la Autoridad de Certificación (CA) de la cuenta de servicio, debes almacenar el certificado CA en Checkmk. La forma de mostrar el certificado necesario también se encuentra en la salida del Chart de Helm. Copia todo lo que hay aquí, incluidas las líneas BEGIN CERTIFICATE y END CERTIFICATE, y añade el certificado en el Menú de configuración, en «Setup > General > Global settings > Site management > Trusted certificate authorities for SSL» (Configurar > Certificados de CA):

kubernetes ca

3.3. Creación de un host piggyback

Crea un nuevo host en Checkmk como de costumbre y asígnale un nombre, por ejemplo, «mykubernetesclusterhost». Tal y como sugieren el título y el nombre del host, este host se utiliza para recopilar los datos piggyback y también para realizar el mapeo de todos los servicios y métricas a nivel de clúster. Dado que este host solo recibe datos a través del agente especial, asegúrate de configurar la opción «IP address family» en «No IP» en las propiedades del host.

Example setup of a cluster host with the important 'No IP' setting.

3.4. Configuración de la administración dinámica del host

CEE Para garantizar la separación entre los objetos de diferentes clústeres de Kubernetes, puede ser útil crear una carpeta por clúster mediante Setup > Hosts > Add folder, en la que la administración dinámica del host pueda crear automáticamente todos los hosts de un clúster. Sin embargo, crear o usar dicha carpeta es opcional.

A continuación, configura una conexión en las ediciones comerciales para los datos piggyback entrantes: con Setup > Hosts > Dynamic host management > Add connection. Primero introduce un título y luego haz clic en show more en Connection Properties.

A continuación, haz clic en «Add new element» y selecciona la carpeta creada anteriormente en «Create hosts in».

Deja los atributos predeterminados en «Host attributes to set» tal y como están. Estos garantizan que Checkmk solo se limite a los datos piggyback de los hosts creados automáticamente y no intente hacerles ping ni contactarlos vía SNMP, por ejemplo.

En un entorno de Kubernetes, donde los objetos monitorizables y monitorizados van y vienen continuamente, también se recomienda activar la opción «Automatically delete hosts without piggyback data». Qué hace exactamente esta opción y en qué circunstancias se eliminan realmente los hosts se explica en el capítulo «Eliminación automática de hosts» del artículo sobre administración dinámica del host.

Ahora introduce el host piggyback creado anteriormente en «Restrict source hosts» y activa la opción «Discover services during creation».

La sección «Connection Properties» de esta nueva conexión podría tener este aspecto:

Example settings for a dynamic host management.

3.5. Procesamiento de datos piggyback en Checkmk Community

En Checkmk Community tendrás que crear manualmente los hosts para los datos piggyback acumulados. Dado que es probable que surja un gran número de hosts piggyback aquí en un clúster de Kubernetes, te recomendamos usar el comando «cmk-piggyback list orphans».

3.6. Personalización del descubrimiento periódico de servicios

Por defecto, Checkmk realiza un descubrimiento de servicios cada dos horas y muestra el resultado de este descubrimiento en el servicio «Check_MK Discovery». Puedes encontrar esta configuración en el conjunto de reglas «Periodic service discovery». En el contexto de Kubernetes, te recomendamos crear una regla para todos los hosts con la etiqueta «cmk/kubernetes:yes». Checkmk asigna automáticamente esta etiqueta a todos los hosts que representan objetos de Kubernetes. Aquí debes seleccionar un intervalo más corto para el descubrimiento de servicios y activar también la opción «Automatically update service configuration». La configuración de la siguiente captura de pantalla es solo un ejemplo. Tendrás que decidir qué es lo más adecuado para tus clústeres en cada caso concreto.

Para restringir esta regla a todos los hosts de tu clúster, basta con introducir cmk/kubernetes:yes en el campo «Conditions» (Label de host) en «Host labels» (Configuración de reglas). Sin embargo, si quieres crear reglas individuales para varios clústeres, simplemente utiliza aquí la etiqueta específica de cada clúster. Estas etiquetas siempre tienen el formato cmk/kubernetes/cluster:mycluster.

Example of restriction to hosts with a cluster-specific label.

3.7. Configuración del agente especial

Ahora que ya se han creado todos los requisitos previos en el clúster y en Checkmk, puedes centrarte en la configuración del agente especial. Puedes encontrarlo en Setup > Agents > VM, cloud, container > Kubernetes. Crea una nueva regla con Add rule.

En primer lugar, debes asignar un nombre al clúster que se va a realizar la monitorización. Puedes elegir este nombre libremente. Se utiliza para dar un nombre único a todos los objetos que provienen de este clúster en particular. Por ejemplo, si introduces aquí mycluster, los nombres de los hosts de todos los pods de este clúster comenzarán más adelante por pod_mycluster. La siguiente parte del nombre del host será siempre el namespace en el que existe este objeto de Kubernetes. El nombre del host de un pod podría ser, por ejemplo, pod_mycluster_kube-system_svclb-traefik-8bgw7.

En Token, selecciona ahora la entrada creada anteriormente en el almacén de contraseñas de Checkmk.

Example of cluster name and token selection.

En API server connection > Endpoint, Checkmk te pedirá ahora que introduzcas la URL (o dirección IP) a través de la cual se puede acceder a tu servidor API de Kubernetes. Solo tienes que introducir el puerto si el servicio no se proporciona a través de un host virtual. La forma más fácil de averiguar esta dirección —si aún no la tienes a mano— dependerá de tu entorno de Kubernetes. El siguiente comando te dará el endpoint del servidor API en la línea «server»:

user@host:~$ kubectl config view
apiVersion: v1
clusters:
  - cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://DFE7A4191DCEC150F63F9DE2ECA1B407.mi6.eu-central-1.eks.amazonaws.com
    name: xyz:aws:eks:eu-central-1:150143619628:cluster/my-kubernetes
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Sin embargo, la salida real de kubectl config view varía mucho. Si aquí también se especifica un puerto en la línea server, asegúrate de incluirlo también en la regla.

Si hasta ahora has seguido estas instrucciones paso a paso y has depositado el certificado CA de tu clúster —tal y como se ha descrito anteriormente— en Checkmk, selecciona en «SSL certificate verification» la entrada «Verify the certificate».

 Example of an API server connection.

A continuación, tienes la oportunidad de enriquecer la monitorización de tu clúster de Kubernetes con datos de uso recopilados por el Checkmk Colector del clúster. Lo repetimos una vez más aquí para enfatizar su importancia: la configuración del Colector del clúster es absolutamente esencial para una monitorización totalmente completa de tus clústeres. Esta es la única forma de obtener datos importantes, como la carga de la CPU y la memoria, y de recibir información sobre los sistemas de archivos utilizados por los componentes individuales.

Así que activa la opción «Enrich with usage data from Checkmk Cluster Collector» y especifica el endpoint del NodePort o Ingress. En la salida del Chart de Helm se indica cómo volver a mostrar este endpoint.

 Example for the specification of a Cluster Collector connection.

Con las opciones de «Collect information about…​», ahora puedes seleccionar qué objetos de tu clúster se van a realizar la monitorización. Nuestra preselección cubre los objetos más relevantes. Si decides realizar la monitorización también del «Pods of CronJobs», consulta la ayuda en línea sobre este punto.

 Example for a selection of Kubernetes objects that can be monitored.

Con las dos opciones siguientes, puedes limitar aún más los objetos que se van a someter a monitorización. Si solo te interesan los objetos de determinados espacios de nombres, configúralo en consecuencia en «Monitor namespaces». Aquí puedes introducir espacios de nombres individuales que se vayan a someter a monitorización o excluir explícitamente espacios de nombres individuales de la monitorización.

Con la opción «Cluster resource aggregation», puedes especificar los nodos que no proporcionan recursos para la carga de trabajo de tu clúster. Estos nodos deben excluirse del cálculo de los recursos disponibles; de lo contrario, existe el riesgo de que no se detecten los cuellos de botella de capacidad. Por defecto, excluimos de la evaluación los nodos control-plane y infra.

Example configuration for a namespaces and resource aggregation

Como última opción, puedes importar las llamadas anotaciones de Kubernetes. En Checkmk, estas anotaciones se convierten en host labels y, por lo tanto, pueden utilizarse como condiciones en las reglas. Puedes especificar qué anotaciones se deben importar utilizando expresiones regulares. Una vez más, consulta la ayuda en línea en este punto.

Nota: La opción Import all valid annotations se incluye aquí solo para completar la información. No recomendamos importar ciegamente todas las anotaciones, ya que esto puede generar una gran cantidad de etiquetas inútiles en Checkmk.

Importante: En «Conditions > Explicit hosts» debes introducir ahora el host creado anteriormente:

Rules for special agents must always be set to explicit hosts, as seen here.

A continuación, guarda la regla y realiza un descubrimiento de servicios en este host. Verás inmediatamente aquí los primeros servicios a nivel de clúster:

An example of a view from the first service discovery once a configuration has been completed.

Ahora activa todos los cambios que has realizado y deja que la administración dinámica del host haga el trabajo por ti. Esto creará todos los hosts para tus objetos de Kubernetes en muy poco tiempo.

4. Etiquetas para objetos de Kubernetes

Checkmk genera automáticamente etiquetas para objetos de Kubernetes, como clústeres, implementaciones o namespace, durante el descubrimiento de servicios. Todas las etiquetas para objetos de Kubernetes que Checkmk genera automáticamente empiezan por cmk/kubernetes/. Por ejemplo, un pod siempre recibe una etiqueta para el nodo (cmk/kubernetes/node:mynode), una etiqueta que indica que este objeto es un pod (cmk/kubernetes/object:pod) y una etiqueta para el namespace (cmk/kubernetes/namespace:mynamespace). Esto hace que sea muy fácil crear filtros y reglas para todos los objetos del mismo tipo o en el mismo namespace.

5. Dashboards y vistas de tabla

5.1. Dashboards de Kubernetes

CEE Las ediciones comerciales de Checkmk vienen con seis dashboards integrados para Kubernetes. Para poder usar estos dashboards de forma práctica, es necesario instalar y configurar nuestro Colector del clúster. En concreto, estos seis dashboards se llaman:

  • Kubernetes

  • Clúster de Kubernetes

  • DaemonSet de Kubernetes

  • Distribución de Kubernetes

  • Espacio de nombres de Kubernetes

  • StatefulSet de Kubernetes

El punto de entrada es siempre el dashboard de Kubernetes, al que puedes acceder a través de Monitor > Applications > Kubernetes:

An example of a view of the overview dashboard.

En el panel de control de Kubernetes, todos tus clústeres de Kubernetes que están en proceso de monitorización aparecerán en la parte izquierda. Esta lista de clústeres es también tu punto de entrada para profundizar en los dashboards de Kubernetes. Al hacer clic en el nombre de un clúster, accederás al dashboard de Kubernetes Cluster del clúster seleccionado. En el dashboard de Kubernetes Cluster, al hacer clic en el nombre correspondiente, accederás a los demás dashboards dependientes del contexto:

Section of the cluster dashboard with links to the other dashboards.

5.2. El inventario de HW/SW

La monitorización de Kubernetes de Checkmk también admite el inventario de HW/SW. Por ejemplo, si haces clic en el nombre principal del clúster (aquí: mycluster) en el dashboard del clúster anterior, pasarás al inventario del clúster.

De la misma manera, es decir, a través de las cajas con los nombres principales de los objetos, también accederás al inventario del objeto correspondiente en los demás dashboards. El siguiente ejemplo muestra el inventario de HW/SW de un pod:

kubernetes monitoring hw sw inventory

6. Checking the installation

En la sección de salida del Chart de Helm, ya has aprendido el primer método para comprobar que los componentes para una monitorización completa de Kubernetes se han instalado correctamente. En la GUI de Checkmk también puedes comprobar que la instalación y la configuración se han realizado correctamente en varios lugares.

Los servicios más importantes aquí son, sin duda, Kubernetes API y Cluster Collector. Estos deben estar presentes en el host del clúster que has creado y también deberían mostrar cierta información.

The most important services to check for a correct installation

El servicio Kubernetes API debería informar normalmente de Live, Ready en Summary. El servicio Cluster Collector debe mostrar el número de versión del Colector del clúster instalado. Si no es así en alguno de estos casos, debes checkear la instalación de los Charts de Helm y la configuración del agente especial.

En los dashboards de clúster de las ediciones comerciales encontrarás más opciones para comprobar.

En el dashboard de Kubernetes, puedes ver desde el principio si el Colector del clúster se está ejecutando en un clúster y recopilando datos. Si las columnas «CPU resources» y «Memory resources» no contienen ningún dato, esto ya es un claro indicio de que el Colector del clúster no funciona correctamente. Si está configurado correctamente, el dashboard de Kubernetes debería tener un aspecto similar a este:

Kubernetes dashboard with data for CPU resources and Memory resources

Si ahora haces clic en el nombre del clúster en esta ventana, llegarás al dashboard del clúster correspondiente. Aquí, las tres cajas «Primary datasource», «Cluster collector» y «API health» deberían estar en verde y mostrar «OK».

A correctly-functioning cluster monitoring.

7. Eliminar componentes de monitorización de un clúster

Si has distribuido Checkmk en tu clúster utilizando nuestros Charts de Helm, puedes eliminar las cuentas, los servicios, los pods y los puertos de nodo creados con la misma facilidad con la que los configuraste. Para ello, simplemente desinstala la versión que se instaló utilizando nuestros Charts de Helm.

Si no estás seguro del nombre de la versión, primero muestra todas las versiones de Helm en todos los namespace:

user@host:~$ helm list --all-namespaces
NAME        NAMESPACE           REVISION  UPDATED                                   STATUS    CHART          APP VERSION
myrelease   checkmk-monitoring  1         2022-08-15 19:00:42.318666784 +0200 CEST  deployed  checkmk-1.0.1  1.0.1
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Como en el ejemplo anterior, aquí deberías encontrar una versión que contenga una referencia a Checkmk en la columna «CHART».

Elimina esta versión con el siguiente comando, especificando el namespace correcto:

user@host:~$ helm uninstall myrelease -n checkmk-monitoring
release "myrelease" uninstalled
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Last modified: Wed, 17 Dec 2025 17:01:40 GMT via commit 48b7fc7fb
En esta página