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 es desde hace tiempo la herramienta más utilizada para la orquestación de contenedores. Checkmk te ayuda en la monitorización de tus entornos Kubernetes.

A partir de Checkmk 2.1.0, puedes utilizar Checkmk para monitorizar los siguientes objetos de Kubernetes:

  • Clústeres

  • Nodos

  • Distribuciones

  • Pods

  • DaemonSets

  • StatefulSets

  • Reclamaciones de Volumen Persistentes

  • CronJobs (a partir de la versión 2.2.0)

Para obtener una lista completa de todos los check plugin disponibles para la monitorización de Kubernetes, consulta nuestro Catálogo de check plugin.

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:

  • Vanilla Kubernetes

  • Servicio Amazon Elastic Kubernetes (Amazon EKS)

  • Servicio Azure Kubernetes (AKS)

  • Google Kubernetes Engine (GKE) incl. modo Piloto Automático

  • OpenShift

  • Tanzu Kubernetes (a partir de Checkmk 2.2.0p9)

Nuestro objetivo es dar soporte a cada una de las 5 últimas versiones (menores) publicadas de Kubernetes. Por tanto, también damos soporte a versiones de Kubernetes que ya han quedado fuera del ciclo de vida (Vanilla) de Kubernetes. Sobre todo, garantizamos una cooperación fluida con los proveedores de la nube que también ofrecen periodos de soporte más largos para sus servicios 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 calendario- hasta que también sea totalmente compatible con Checkmk. Tan pronto como Checkmk pueda funcionar sin problemas con esta nueva versión, lo anunciaremos en un Werk (como el Werk #14584).

1.2. Introducción a 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 Kubernetes.

1.3. Estructura del entorno de monitorización

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

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

Checkmk monitoriza tus clústeres Kubernetes de dos formas:

monitoring kubernetes architecture

El agente especial de Kubernetes simplemente recupera información básica a través del servidor API de tu clúster, que ya puede utilizarse para recuperar los estados de nodos y contenedores. La mayoría de los metadatos de tus pods y distribuciones también se obtienen de esta forma.

Sin embargo, para una monitorización exhaustiva, todavía falta algo: preguntas como cuánta carga genera un despliegue concreto en la CPU, o cuánta memoria está utilizando actualmente un DaemonSet, no pueden responderse de este modo.

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

1.5. Diferencias respecto a otras monitorizaciones en Checkmk

Al monitorizar pods y replica en tus clústeres Kubernetes, los cambios de estado o retrasos se producen a veces con mucha más frecuencia. Para tenerlo en cuenta, los checks de determinados estados de estos objetos sólo cambian de estado en Checkmk al cabo de 10 minutos.

1.6. Diferencias respecto a la monitorización de Kubernetes existente

La monitorización de Kubernetes en Checkmk se ha reescrito desde cero. El alcance de los datos que se pueden monitorizar ha crecido 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 o incluso reescribir los datos de monitorización anteriores de tus objetos Kubernetes.

2. Crear requisitos previos en el clúster

Para poder monitorizar tu clúster Kubernetes en Checkmk, crea primero los requisitos previos en tu clúster. Ante todo, indícale qué pods/contenedores 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 adecuada para usuarios menos experimentados 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 conseguirlo en el administrador de paquetes de tu distribución de Linux o en el sitio web del proyecto Helm.

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

user@host:~$ helm repo add checkmk-chart https://checkmk.github.io/checkmk_kube_agent

Actualizamos nuestros gráficos de Helm siempre que los nuevos desarrollos en Kubernetes lo requieren, por lo que merece la pena comprobar de vez en cuando si hay nuevas versiones disponibles en el repositorio. Si has llamado a tu copia local de nuestro repositorio checkmk-chart, como en el comando anterior, puedes utilizar 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...

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

2.2. Adaptar la configuración a tu entorno

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

Por defecto, admitimos dos rutas de comunicación: la consulta a través de Ingress y la consulta a través de NodePort, cuya configuración variará en función de la variante que admitas en tu clúster.

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

Hay dos formas de crear un values.yaml de este tipo. Puedes extraer el archivo que te proporcionamos en las cartas de Helm y editarlo, 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 Chart de Helm que veremos más adelante en este artículo.

Crear tu propio values.yaml básico

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

user@host:~$ echo 'clusterCollector: {service: {type: NodePort, nodePort: 30035}}' > values.yaml

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

user@host:~$ echo 'clusterCollector: {ingress: { enabled: true }}' > values.yaml

Extraer values.yaml de los Chart de Helm

El values.yaml completo que te hemos proporcionado se puede extraer fácilmente con el siguiente comando:

user@host:~$ helm show values checkmk-chart/checkmk > values.yaml

Ahora puedes adaptar el archivo creado de este modo 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 en consecuencia las partes ya preparadas en values.yaml. Para una mejor visión de conjunto, en el siguiente ejemplo abreviado sólo se muestra la parte relevante. Establece el parámetro enabled en true. Adapta el resto de parámetros en función de 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

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, sólo se muestra la sección relevante. Estableces el valor type en NodePort y eliminas el comentario para el valor nodePort:

valores.yaml
  service:
    # if required specify "NodePort" here to expose the cluster-collector via the "nodePort" specified below
    type: NodePort
    port: 8080
    nodePort: 30035

Configurar el Colector del clúster para HTTPS

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

A continuación se muestra la sección de nuestro values.yaml suministrado 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-----

En las líneas que comienzan con enabled o verifySsl, debes sustituir false por true. A continuación, elimina las marcas de hash que aparecen antes de las tres secciones clusterCollectorKey, clusterCollectorCert y checkmkCaCert e inserta los datos correspondientes a continuación de éstas. Tu organización debe determinar si desea utilizar 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.

  • Para el certificado del servidor, el FQDN debe corresponderse con el siguiente 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 coincidir con el siguiente patrón:subjectAltName: DNS:<service_name>.<namespace>.cluster.local, IP:<service ip>

Utilizar tu propia cuenta de servicio

Utilizando nuestros Chart de Helm, se crearía por defecto una cuenta de servicio en tu clúster. Si ya tienes una cuenta de servicio adecuada, basta con añadirla en values.yaml y suprimir la creación de una nueva cuenta.

valores.yaml
serviceAccount:
  create: false
  name: "myserviceaccount"

Requisitos previos para la monitorización del Piloto Automático de GKE

Si operas tu clúster GKE (Google Kubernetes Engine) en modo Piloto Automático, también es posible su monitorización con Checkmk, ya que Checkmk es un socio del llamado Piloto Automático.

Sólo tienes que establecer var_run en readOnly en tu archivo values.yaml:

values.yaml
volumeMountPermissions:
      var_run:
        readOnly: true

Configura el controlador de admisión Pod Security

Si utilizas Estándares de Seguridad Pod en tu clúster, debes configurar el Colector del clúster 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

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

Si el Colector del clúster ya se está ejecutando o el namespace ya existe, también puedes establecer 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

Políticas de seguridad de pods y políticas de red

Las políticas PodSecurityPolicy (abreviado PSP) 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 v1.25, las hemos desactivado por defecto a partir de la versión 1.3.0 de nuestro Chart de Helm.

La sección correspondiente tiene ahora este aspecto:

values.yaml
rbac:
  pspEnabled: false

Si aún utilizas el PSP en tu clúster, es necesario que configures esta opción en true en la página values.yaml:

values.yaml
rbac:
  pspEnabled: true

Si más adelante descubrimos que esta entrada no se procesa correctamente aunque esté desactivada, la eliminaremos por completo.

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

valores.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

2.3. Instalación de Chart de Helm

Tras personalizar values.yaml o crear los tuyos propios, utiliza el siguiente comando para instalar todos los componentes necesarios en tu clúster para poder monitorizarlo en Checkmk:

user@host:~$ helm upgrade --install --create-namespace -n checkmk-monitoring myrelease checkmk-chart/checkmk -f values.yaml

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

Elemento del comando Descripción

helm upgrade --install

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

--create-namespace

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

-n checkmk-monitoring

Esta opción especifica el namespace al que debe añadirse la configuración. checkmk-monitoring es sólo un ejemplo de cómo podría llamarse.

myrelease

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

checkmk-chart/checkmk

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

-f values.yaml

Por último, introduce el archivo de configuración que creaste o adaptaste 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á preparado para la monitorización con Checkmk. El clúster se encargará ahora de garantizar que los pods necesarios y los contenedores que contienen se están ejecutando y son accesibles.

Salida del Chart de Helm

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 gráficos de Helm de toda una serie de comandos. Esta salida también se ajusta automáticamente a los valores que hayas especificado 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, en cambio, utilizas Ingress, la salida se adaptará en consecuencia. A continuación mostramos la salida -ligeramente abreviada- tras una instalación correcta cuando se utiliza 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-monitoringCon el token de la cuenta de servicio denominada myrelease-checkmk-checkmk en el namespace checkmk-monitoring, ya puedes realizar consultas en cluster-collector.Ejecuta lo siguiente para obtener su token y el certificado ca del clúster: 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-monitorización -o=jsonpath='{.data.ca\.crt}' | base64 --decode)"; # Nota: Cita la variable   cuando echo'ing a preservar adecuada línea saltos: echo "$CA_CRT"Para comprobar el acceso puedes ejecutar: curl -H "Autorización: Bearer $TOKEN" http://$NODE_IP:$NODE_PORT/metadata | jq

A partir de esta salida, simplemente copia las líneas de color y ejecuta los comandos.

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

user@host:~$ export NODE_PORT=$(kubectl get --namespace checkmk-monitoring -o jsonpath="{.spec.ports[0].nodePort}" services myrelease-checkmk-cluster-collector);
user@host:~$ export NODE_IP=$(kubectl get nodes --namespace checkmk-monitoring -o jsonpath="{.items[0].status.addresses[0].address}");
user@host:~$ echo http://$NODE_IP:$NODE_PORT
http://10.184.38.103:30035

Ésta es exactamente la dirección que tienes que introducir en Checkmk más adelante en la regla de Kubernetes, en el campo Collector NodePort / Ingress endpoint.

Con los comandos del siguiente bloque obtienes tanto el token como el certificado de la cuenta de servicio. Así, los datos se almacenan en las variables del entorno TOKEN y CA_CRT. Cuando emitas la variable CA_CRT, asegúrate de encerrarla entre comillas, pues de lo contrario se perderán los saltos de línea importantes 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-----

Cuando realices la configuración en Checkmk, debes almacenar tanto el testigo como el certificado. Deja el intérprete de comandos abierto con esta información o copia el testigo y el certificado en 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 utilizar el último comando para verificar que la configuración se ha realizado correctamente:

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"
    }
  }
  ...

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 Kubernetes. Sin embargo, para configurar el agente especial, primero hay que cumplir algunos requisitos previos:

3.1. Almacenar la contraseña (token) en Checkmk

Lo mejor es almacenar la contraseña (token) de la cuenta de servicio en el almacén de contraseñas de Checkmk. Ésta es la opción más segura, ya que puedes separar organizacionalmente 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). 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 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 está en la salida del Chart de Helm. Copia todo 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:

kubernetes ca

3.3. Crear un host de origen Piggyback

Crea un nuevo host en Checkmk de la forma habitual y llámalo, por ejemplo, mykubernetesclusterhost. Como sugieren el título y el nombre del host, este host se utiliza para recopilar los datos piggyback y también para mapear todos los servicios y métricas a nivel de clúster. Como este host sólo 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. Establecer la configuración dinámica del host

Para garantizar la separación entre los objetos de distintos clústeres de Kubernetes, puede ser útil crear una carpeta por clúster a través de Setup > Hosts > Add folder, en la que la configuración dinámica del host pueda crear automáticamente todos los hosts de un clúster. Sin embargo, la creación o utilización de dicha carpeta es opcional.

A continuación, configura un conector 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 previamente en Create hosts in.

Deja los atributos predeterminados en Host attributes to set tal como están. Garantizan que Checkmk sólo se adhiera a los datos piggyback de los host creados automáticamente y no intente hacer ping ni llegar a ellos a través de SNMP, por ejemplo.

En un entorno Kubernetes en el que los objetos monitorizables y monitorizados van y vienen continuamente, también se recomienda activar la opción Automatically delete hosts without piggyback data. Lo que 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 configuración dinámica de hosts.

Ahora entra en el host de origen Piggyback creado anteriormente en Restrict source hosts y activa la opción Discover services during creation.

La sección Connection Properties de este nuevo conector podría tener el siguiente aspecto:

Example settings for a dynamic host configuration.

3.5. Procesar datos piggyback en Checkmk Raw

En Checkmk Raw 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 en un clúster Kubernetes, te recomendamos que utilices nuestro script find_piggy_orphans script en el directorio ~/share/doc/check_mk/treasures/ de tu site Checkmk.

3.6. Personalizar el 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, recomendamos crear una regla para todos los hosts con la etiqueta cmk/kubernetes:yes. Checkmk asigna automáticamente esta etiqueta a todos los host que representan objetos Kubernetes. Deberías seleccionar aquí un intervalo más corto para el descubrimiento de servicios, y activar también la opción Automatically update service configuration. Los ajustes de la siguiente captura de pantalla son sólo ejemplos. Tendrás que decidir qué tiene sentido para tus clusters caso por caso.

Para restringir esta regla a todos los host de tu clúster, basta con introducir cmk/kubernetes:yes en Conditions bajo Host labels. Sin embargo, si quieres crear reglas individuales para varios clústeres, simplemente utiliza aquí la etiqueta específica del clúster correspondiente. Estas etiquetas siempre tienen la forma cmk/kubernetes/cluster:mycluster.

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

3.7. Configurar el agente especial

Ahora que se han creado todos los requisitos previos en el clúster y en Checkmk, puedes dirigir tu atención a la configuración del agente especial. Puedes encontrarlo a través de 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 monitorizar. Puedes elegir este nombre libremente. Se utiliza para dar un nombre único a todos los objetos que procedan de este clúster concreto. Por ejemplo, si introduces aquí mycluster, los nombres de los hosts de todos los pods de este clúster empezarán después por pod_mycluster. La siguiente parte del nombre del host será siempre el namespace en el que existe este objeto Kubernetes. El nombre del host de un pod podría ser entonces pod_mycluster_kube-system_svclb-traefik-8bgw7, por ejemplo.

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 pide ahora que introduzcas la URL (o dirección IP) a través de la cual se puede acceder a tu servidor API de Kubernetes. Sólo tendrás que introducir el puerto si el servicio no se presta a través de un host virtual. La forma más sencilla de averiguar esta dirección -si no la tienes ya a mano- dependerá de tu entorno 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

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-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 Kubernetes con los datos de uso recogidos por el Colector del clúster de Checkmk. Lo repetimos una vez más aquí para subrayar su importancia:la configuración del Colector del clúster es absolutamente esencial para una monitorización completa de tus clústeres.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.

Para ello, activa la opción Enrich with usage data from Checkmk Cluster Collector y especifica el endpoint del NodePort o Ingress. La forma de volver a mostrar este endpoint es en la salida del Chart de Helm.

 Example for the specification of a Cluster Collector connection.

Con las opciones Collect information about…​, ahora puedes seleccionar qué objetos de tu clúster se van a monitorizar. Nuestra preselección cubre los objetos más relevantes. Si decides monitorizar también el 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 a monitorizar. Si sólo te interesan los objetos de determinados namespaces, configúralo en Monitor namespaces. Aquí puedes introducir namespaces individuales a monitorizar o excluir explícitamente de la monitorización namespaces individuales.

Con la opción Cluster resource aggregation, puedes especificar nodos que no proporcionen recursos para la carga de trabajo de tu clúster. Estos nodos deben excluirse del cálculo de los recursos disponibles, ya que de lo contrario existe el riesgo de que no se detecten los cuellos de botella de capacidad. Por tanto, 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 denominadas anotaciones de Kubernetes. En Checkmk, estas anotaciones se convierten en host label y, por tanto, pueden utilizarse como condiciones en las reglas. Puedes especificar qué anotaciones deben importarse utilizando expresiones regulares. De nuevo, consulta la ayuda en línea detallada en este punto.

Nota: La opción Import all valid annotations se proporciona aquí sólo para completar la información. No recomendamos importar a ciegas todas las anotaciones, ya que esto puede crear una montaña muy grande 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. Inmediatamente verás 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.

Activa ahora todos los cambios que has realizado y deja que la configuración dinámica del host haga el trabajo por ti. Esto creará todos los hosts para tus objetos Kubernetes en un breve espacio de tiempo.

4. Etiquetas para objetos Kubernetes

Checkmk genera automáticamente etiquetas para objetos Kubernetes como clústeres, despliegues o namespaces durante un descubrimiento de servicios. Todas las etiquetas para objetos 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 muestra que este objeto es un pod (cmk/kubernetes/object:pod) y una etiqueta para el namespace (cmk/kubernetes/namespace:mynamespace). Esto facilita mucho la creación de filtros y reglas para todos los objetos del mismo tipo o en el mismo namespace.

5. Dashboards y vistas

5.1. Dashboards de Kubernetes

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

  • Kubernetes

  • Clúster Kubernetes

  • DaemonSet de Kubernetes

  • Despliegue de Kubernetes

  • Kubernetes Namespace

  • Kubernetes StatefulSet

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

An example of a view of the overview dashboard.

En el dashboard Kubernetes, todos tus clústeres Kubernetes en monitorización aparecerán listados en la parte izquierda. Este listado de clústeres es también tu punto de entrada para profundizar en los dashboards de Kubernetes. Si haces clic en el nombre de un clúster, accederás al dashboard Kubernetes Cluster del clúster seleccionado. En el dashboard Kubernetes Cluster, si haces 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 hardware/software

La monitorización de Checkmk Kubernetes 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, saltarás al inventario del clúster.

Del mismo modo, es decir, a través de las cajas con los nombres primarios de los objetos, también llegará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. Check de la instalación

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 de clúster que has creado y también deben mostrar cierta información.

The most important services to check for a correct installation

El servicio Kubernetes API debe informar normalmente de Live, Ready bajo Summary. El servicio Cluster Collector debe mostrar el número de versión del Colector del clúster instalado. Si no es el caso de uno u otro, debes comprobar la instalación de los gráficos de Helm y la configuración del agente especial.

En los dashboards de clúster de las ediciones comerciales hay más posibilidades de check.

En el dashboard Kubernetes, puedes ver muy pronto 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 fuerte indicador de que el Colector del clúster no se está ejecutando correctamente. Si se ha configurado correctamente, el dashboard Kubernetes debería tener un aspecto parecido al siguiente:

Kubernetes dashboard with data for CPU resources and Memory resources

Si ahora haces clic en el nombre del clúster en esta ventana, aterrizarás en Kubernetes Cluster en el dashboard del clúster respectivo. Aquí las tres cajas Primary datasource, Cluster collector y API health deberían ser verdes 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 diagramas de Helm, puedes eliminar las cuentas, servicios, pods y puertos de nodo creados con la misma facilidad con la que los configuraste. Para ello, sólo tienes que desinstalar la versión que se instaló utilizando nuestros diagramas.

Si no estás seguro del nombre de la versión, muestra primero 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

Como en el ejemplo anterior, 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
En esta página