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

kubernetes logo

Kubernetes est depuis longtemps l'outil le plus utilisé pour l'orchestration des conteneurs. Checkmk vous aide à surveiller vos environnements Kubernetes. Au niveau des nœuds et depuis le niveau du cluster jusqu'aux pods individuels, vous pouvez surveiller tous les objets importants de vos charges de travail. Pour obtenir la liste complète de tous les plugins de supervision disponibles pour Kubernetes, veuillez consulter notre Catalogue des plugins de supervision.

1.1. Distributions et versions prises en charge

À partir de la version 2.2.0, Checkmk prend en charge les distributions et services Kubernetes suivants :

  • Kubernetes standard

  • Amazon Elastic Kubernetes Service (Amazon EKS)

  • Azure Kubernetes Service (AKS)

  • Google Kubernetes Engine (GKE), y compris le mode Autopilot

  • OpenShift

  • Tanzu Kubernetes

Notre objectif est de prendre en charge chacune des 5 dernières versions (mineures) publiées de Kubernetes. Nous prenons donc également en charge les versions de Kubernetes qui ne font déjà plus partie du cycle de vie (Vanilla) de Kubernetes. Avant tout, nous veillons à une collaboration harmonieuse avec les fournisseurs de cloud qui proposent également des périodes de support plus longues pour leurs services Kubernetes. Immédiatement après la sortie d’une nouvelle version de Kubernetes, il peut s’écouler un certain temps — en fonction de l’étendue des nouvelles fonctionnalités et du calendrier — avant qu’elle ne soit également entièrement prise en charge dans Checkmk. Dès que Checkmk pourra fonctionner sans heurts avec cette nouvelle version, nous l’annoncerons dans un Werk (tel que le Werk n° 14584).

1.2. Premiers pas avec la supervision de Kubernetes

Pour une introduction à la nouvelle supervision de Kubernetes, nous vous recommandons nos deux vidéos « Supervision de Kubernetes avec Checkmk » et « Détection des problèmes et configuration des alertes pour les clusters Kubernetes ».

1.3. Structure de l'environnement de supervision

Étant donné que les clusters Kubernetes peuvent subir rapidement des changements majeurs en termes de nombre et d’emplacement des composants individuels, nous vous recommandons de créer une instance distincte pour la supervision de votre environnement Kubernetes. Vous pouvez ensuite établir une connexion entre cette instance et votre instance centrale comme d’habitude via la supervision distribuée.

1.4. Le processus de supervision de Kubernetes dans Checkmk

Checkmk effectue la supervision de vos clusters Kubernetes de deux manières :

monitoring kubernetes architecture

L'agent spécial Kubernetes récupère simplement des informations de base via le serveur API de votre cluster. Cela permet déjà de récupérer les états des nœuds et des conteneurs. La plupart des métadonnées de vos pods et déploiements sont également obtenues de cette manière.

Pour une supervision complète, il manque toutefois encore quelque chose à ce stade. Des questions telles que la charge générée par un déploiement particulier sur le processeur, ou la quantité de mémoire actuellement utilisée par un DaemonSet, ne peuvent pas trouver de réponse de cette manière.

C’est là que notre Checkmk Node Collector et notre Checkmk Cluster Collector entrent en jeu. Ils constituent un élément indispensable de la supervision de Kubernetes au sein de Checkmk. Une partie non négligeable de ce qui suit dans cet article porte donc également sur leur installation et leur configuration. De plus, l’utilisation des tableaux de bord Kubernetes dans les éditions commerciales n’a de sens que si les Node et Cluster Collectors peuvent fournir des données sur les charges correspondantes.

1.5. Différences par rapport aux autres types de supervision dans Checkmk

Lors de la supervision des pods et des répliques dans vos clusters Kubernetes, les changements d’état ou les retards surviennent parfois beaucoup plus fréquemment. Pour tenir compte de cela, les contrôles portant sur certains états de ces objets ne modifient leur statut dans Checkmk qu’après 10 minutes.

1.6. Différences par rapport à la supervision Kubernetes héritée

La supervision Kubernetes dans Checkmk a été entièrement réécrite. L'étendue des données pouvant être supervisées s'est considérablement élargie. Étant donné que la base technique de la supervision Kubernetes dans Checkmk 2.1.0 est fondamentalement différente, il n'est pas possible de transférer ni même de réécrire les données de supervision antérieures de vos objets Kubernetes.

2. Création des conditions préalables dans le cluster

Pour pouvoir effectuer la supervision de votre cluster Kubernetes dans Checkmk, vous devez d'abord créer les conditions préalables dans votre cluster. Avant toute chose, indiquez au cluster quels pods/conteneurs déployer et comment les configurer.

2.1. Configuration du référentiel Helm

L'installation de la supervision Kubernetes s'effectue à l'aide de l'outil helm. Helm convient également aux utilisateurs moins expérimentés et standardise la gestion des configurations. Helm est une sorte de gestionnaire de packs pour Kubernetes. Si vous n'utilisez pas encore Helm, vous pouvez généralement vous le procurer via le gestionnaire de packs de votre distribution Linux ou sur le site web du projet Helm.

Vous pouvez utiliser Helm pour inclure des référentiels en tant que sources et ajouter facilement les Helm Charts qu’ils contiennent à votre cluster, de la même manière que des paquets. Commencez par identifier le référentiel. Dans l’exemple suivant, nous utilisons le nom « checkmk-chart » afin de faciliter l’accès au référentiel ultérieurement. Vous pouvez bien sûr utiliser tout autre nom de votre choix :

user@host:~$ helm repo add checkmk-chart https://checkmk.github.io/checkmk_kube_agent
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Nous mettons à jour nos Helm charts chaque fois que de nouveaux développements dans Kubernetes l'exigent. Il est donc utile de vérifier de temps à autre si de nouvelles versions sont disponibles dans le référentiel. Si vous avez nommé votre copie locale de notre référentiel checkmk-chart, comme dans l'instruction précédente, vous pouvez utiliser l'instruction suivante pour afficher toutes les versions des Helm charts disponibles dans le référentiel :

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...
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si une version plus récente est disponible, vous pouvez effectuer la mise à jour avec helm repo update.

2.2. Personnalisation de la configuration en fonction de votre environnement

Comme nous ne pouvons pas connaître à l'avance la structure de votre cluster Kubernetes, nous avons choisi la variante la plus sûre pour le démarrage des Cluster Collectors : Par défaut, vous ne fournissez aucun port accessible à distance. Afin de pouvoir accéder aux Cluster Collectors ultérieurement, vous devrez adapter ces paramètres à votre cluster particulier.

Nous prenons en charge deux chemins d'accès par défaut : la requête via Ingress et la requête via NodePort. La configuration de ceux-ci variera en fonction de la variante que vous prenez en charge dans votre cluster.

Afin de pouvoir définir vous-même certains paramètres pour toutes les configurations, vous incluez un fichier de contrôle, appelé « values.yaml ».

Il existe deux façons de créer un tel fichier « values.yaml ». Vous pouvez soit extraire le fichier que nous fournissons dans les Helm charts et le modifier, soit créer vous-même une version minimale.

Chaque fois que vous souhaitez déployer des modifications apportées à ce fichier dans votre cluster, vous pouvez à nouveau utiliser l'instruction d'installation des Helm charts que nous aborderons plus loin dans cet article.

Créer votre propre fichier values.yaml de base

Vous pouvez créer un fichier « values.yaml » dans lequel vous n'indiquerez que les valeurs que vous souhaitez modifier. Dans notre Helm chart, par exemple, le type de service du Cluster Collector est défini par défaut sur « ClusterIP ». Si vous souhaitez désormais simplement changer ce type de service en « NodePort » et le port en 30035, il suffit de créer un fichier « values.yaml » comme suit :

user@host:~$ echo 'clusterCollector: {service: {type: NodePort, nodePort: 30035}}' > values.yaml
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Une activation d'Ingress pourrait ressembler à ceci :

user@host:~$ echo 'clusterCollector: {ingress: { enabled: true }}' > values.yaml
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Extraction du fichier values.yaml à partir des Helm charts

Le fichier « values.yaml » complet que nous fournissons peut être facilement extrait à l'aide de l'instruction suivante :

user@host:~$ helm show values checkmk-chart/checkmk > values.yaml
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Vous pouvez désormais adapter le fichier ainsi créé à vos besoins et le transmettre à helm à l'aide du paramètre -f values.yaml lors de l'installation ou lors d'une mise à niveau ultérieure.

Mise en place de la communication via Ingress

Si vous utilisez Ingress pour contrôler l'accès à vos services, modifiez en conséquence les parties déjà préparées dans values.yaml. Pour un aperçu plus clair, seul l'extrait pertinent est présenté dans l'exemple abrégé suivant. Définissez le paramètre enabled sur true. Adaptez les paramètres restants en fonction de votre environnement :

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
Copier le contenu du fichier dans le presse-papiers
Contenu du fichier copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Fournir une communication via NodePort

Vous pouvez également fournir un accès aux services directement via un port. Ceci est nécessaire si vous n'utilisez pas Ingress. Dans l'exemple suivant, seule la section pertinente est affichée. Vous définissez la valeur type sur NodePort et supprimez le commentaire pour la valeur 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
Copier le contenu du fichier dans le presse-papiers
Contenu du fichier copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Configuration du Cluster Collector pour HTTPS

Si vous souhaitez basculer la communication avec et entre les Cluster Collectors vers HTTPS, vous devez également apporter des modifications au fichier values.yaml.

Vous trouverez ci-dessous la section du fichier « values.yaml » fourni que vous devez éditer pour activer le protocole 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-----
Copier le contenu du fichier dans le presse-papiers
Le contenu du fichier a été copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Dans les lignes commençant par enabled ou verifySsl, vous devez remplacer false par true. Ensuite, supprimez les signes dièse devant les trois sections clusterCollectorKey, clusterCollectorCert et checkmkCaCert, puis insérez les données correspondantes après celles-ci. Votre organisation doit déterminer s'il convient d'utiliser des certificats auto-signés ou d'obtenir des certificats auprès d'une autorité de certification (CA).

Veuillez noter que les certificats doivent répondre aux exigences suivantes :

  • Le certificat de l'AC doit contenir le nom de domaine ou le nom de l'Ingress sous forme de nom de domaine complet (FQDN).

  • Pour le certificat du serveur, le nom de domaine complet (FQDN) doit correspondre au modèle suivant : <service_name>.<namespace>.cluster.local.

  • Dans la section [ v3_ext ] du fichier de configuration permettant de générer votre demande de signature de certificat, l'subjectAltNamee doit saisir le modèle suivant : subjectAltName = DNS:<service_name>.<namespace>.cluster.local, DNS:<service_name>.<namespace>, IP:<service ip>

Utilisation de votre propre compte de service

En utilisant nos Helm charts, un compte de service serait créé par défaut dans votre cluster. Si vous disposez déjà d'un compte de service adapté, il suffit de l'ajouter dans le fichier values.yaml et de désactiver la création d'un nouveau compte.

values.yaml
serviceAccount:
  create: false
  name: "myserviceaccount"
Copier le contenu du fichier dans le presse-papiers
Contenu du fichier copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Condition préalable à la supervision de GKE Autopilot

Si vous exploitez votre cluster GKE (Google Kubernetes Engine) en mode Autopilot, il est également possible de le surveiller avec Checkmk, car Checkmk est ce qu'on appelle un partenaire Autopilot.

Il vous suffit de définir var_run sur readOnly dans votre fichier values.yaml :

values.yaml
volumeMountPermissions:
      var_run:
        readOnly: true
Copier le contenu du fichier dans le presse-papiers
Contenu du fichier copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Configurez le contrôleur d'admission Pod Security

Si vous utilisez les normes de sécurité des pods dans votre cluster, vous devez configurer le Cluster Collector de Checkmk de manière à ce qu'il dispose d'un accès illimité dans l'espace de nommage correspondant. Idéalement, créez un espace de nommage avec la spécification suivante :

espace de nommage.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: checkmk-monitoring
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/enforce-version: latest
Copier le contenu du fichier dans le presse-papiers
Contenu du fichier copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Vous pouvez créer l'espace de nommage en exécutant, par exemple, l'instruction « kubectl apply -f namespace.yaml ». N'oubliez pas que vous n'aurez alors pas besoin d'utiliser l'option « --create-namespace » lorsque vous exécuterez l'instruction « helm upgrade » ultérieurement.

Si le Cluster Collector est déjà en cours d'exécution ou si l'espace de nommage existe déjà, vous pouvez également définir les étiquettes ci-dessus à l'aide de l'instruction suivante :

user@host:~$ kubectl label --overwrite ns checkmk-monitoring pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/enforce-version=latest
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Directives de sécurité des pods et directives réseau

Les directives PodSecurityPolicy (PSP en abrégé) et NetworkPolicy sont incluses dans notre Helm chart principalement pour des raisons de compatibilité. Étant donné que les PSP ont désormais été entièrement supprimées de Kubernetes à partir de la version v1.25, nous les avons désactivées par défaut à partir de la version 1.3.0 de notre Helm chart.

La section correspondante se présente désormais comme suit :

values.yaml
rbac:
  pspEnabled: false
Copier le contenu du fichier dans le presse-papiers
Contenu du fichier copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si vous utilisez toujours le PSP dans votre cluster, il est nécessaire de définir cette option sur « true » dans le fichier « values.yaml » :

values.yaml
rbac:
  pspEnabled: true
Copier le contenu du fichier dans le presse-papiers
Le contenu du fichier a été copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si, ultérieurement, nous constatons que cette entrée n'est pas traitée correctement même lorsqu'elle est désactivée, nous la supprimerons complètement.

Il en va de même pour la NetworkPolicy. Si vous utilisez cette fonctionnalité dans votre cluster, vous devrez modifier l'emplacement dans values.yaml en remplaçant enabled: false par enabled: true. Dans ce cas, veuillez vous reporter à la documentation suivante sur values.yaml pour configurer correctement la NetworkPolicy.

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
Copier le contenu du fichier dans le presse-papiers
Le contenu du fichier a été copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

2.3. Installation des Helm chart

Après avoir personnalisé values.yaml ou créé votre propre chart, utilisez l’instruction suivante pour installer tous les composants nécessaires dans votre cluster afin de pouvoir le superviser dans Checkmk :

user@host:~$ helm upgrade --install --create-namespace -n checkmk-monitoring myrelease checkmk-chart/checkmk -f values.yaml
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Comme cette instruction n'est pas intuitive, nous vous fournissons ci-dessous une explication des différentes options :

Élément de commande Description

helm upgrade --install

Cette partie correspond à l'instruction de base permettant d'envoyer la configuration au cluster Kubernetes.

--create-namespace

Dans Kubernetes, vous devez toujours spécifier à quel espace de nommage la configuration doit être ajoutée. Vous avez besoin de cette option si l'espace de nommage n'existe pas encore. Dans ce cas, Helm le créera.

-n checkmk-monitoring

Cette option spécifie l'espace de nommage auquel la configuration doit être ajoutée. « checkmk-monitoring » n'est qu'un exemple de nom possible.

myrelease

Ici, myrelease désigne la version. Chaque instance d'un Helm chart s'exécutant dans votre cluster Kubernetes est appelée une version. Vous pouvez choisir ce nom librement.

checkmk-chart/checkmk

La première partie de cette option décrit le référentiel que vous avez créé précédemment. La deuxième partie — après la barre oblique — correspond au paquet contenant les informations nécessaires à la création de la configuration pour votre supervision Kubernetes.

-f values.yaml

Enfin, saisissez le fichier de configuration que vous avez créé ou adapté précédemment. Il contient toutes les personnalisations à inclure dans les fichiers de configuration créés avec helm.

Une fois l’instruction exécutée, votre cluster Kubernetes est prêt à être supervisé avec Checkmk. Le cluster se chargera désormais de s’assurer que les pods nécessaires et les conteneurs qu’ils contiennent sont en cours d’exécution et accessibles.

Sortie du Helm chart

La prochaine étape consiste donc à le configurer dans Checkmk. Afin de faciliter au maximum cette configuration, nous avons doté la sortie de nos Helm charts d’une série complète d’instructions. Cette sortie s’adapte également automatiquement aux valeurs que vous avez spécifiées dans le fichier values.yaml. Si vous utilisez le NodePort, vous obtiendrez notamment les instructions permettant d’afficher l’adresse IP et le port du NodePort. Si vous utilisez plutôt Ingress, la sortie sera adaptée en conséquence. Nous vous présentons ci-dessous la sortie — légèrement abrégée — obtenue après une installation réussie lors de l’utilisation du 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
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

À partir de ce résultat, il vous suffit de copier les lignes en couleur et d'exécuter les instructions.

Le premier bloc vous fournit des informations sur le NodePort :

user@host:~$ export NODE_PORT=$(kubectl get --namespace checkmk-monitoring -o jsonpath="{.spec.ports[0].nodePort}" services myrelease-checkmk-cluster-collector);
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !
user@host:~$ export NODE_IP=$(kubectl get nodes --namespace checkmk-monitoring -o jsonpath="{.items[0].status.addresses[0].address}");
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !
user@host:~$ echo http://$NODE_IP:$NODE_PORT
http://10.184.38.103:30035
----
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

C'est exactement l'adresse que vous devez saisir ultérieurement dans Checkmk, dans la règle Kubernetes, dans le champ « Collector NodePort / Ingress endpoint ».

Les instructions du bloc suivant vous permettent d'obtenir à la fois le jeton et le certificat du compte de service. Les données sont ainsi stockées dans les variables d'environnement « TOKEN » et « CA_CRT ». Lorsque vous affichez la variable « CA_CRT », veillez à la placer entre guillemets, sinon les sauts de ligne importants du certificat seront perdus.

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-----
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Lors de la configuration dans Checkmk, vous devez enregistrer à la fois le jeton et le certificat. Laissez le shell ouvert avec ces informations ou copiez le jeton et le certificat à un emplacement auquel vous pourrez accéder lors de la configuration suivante dans Checkmk.

Si vous avez exécuté les deux instructions d'exportation précédentes, vous pouvez utiliser la dernière instruction pour vérifier que la configuration a réussi :

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"
    }
  }
  ...
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Au début de la sortie fortement abrégée, par exemple, vous pouvez voir la version du Cluster Collector. Plus bas, les métadonnées de tous les nœuds de ce cluster suivraient.

3. Configuration de la supervision dans Checkmk

Ensuite, dans l'interface graphique de Checkmk, nous passons à la configuration de l'agent spécial et d'une règle permettant de créer automatiquement des ordinateurs hôtes pour vos objets Kubernetes. Pour configurer l'agent spécial, certaines conditions préalables doivent toutefois être remplies :

3.1. Enregistrement du mot de passe (jeton) dans Checkmk

Il est préférable de stocker le mot de passe (jeton) du compte de service dans le coffre-fort à mot de passe de Checkmk. Il s’agit de l’option la plus sûre, car elle vous permet de séparer, sur le plan organisationnel, le stockage et l’utilisation du mot de passe. Vous pouvez également saisir le mot de passe directement en texte clair lors de la création de la règle (voir ci-dessous). Pour savoir comment afficher le mot de passe requis, consultez la sortie du Helm chart. Ajoutez le mot de passe au coffre-fort à mot de passe de Checkmk à l’aide de la commande `Setup > General > Passwords > Add password`, par exemple sous l’ID et le titre « My Kubernetes Token » :

kubernetes password

3.2. Importation du certificat CA d’un compte de service dans Checkmk.

Pour que Checkmk fasse confiance à l'autorité de certification (CA) du compte de service, vous devez enregistrer le certificat CA dans Checkmk. La procédure pour afficher le certificat requis figure également dans la sortie du Helm chart. Copiez tout ce qui se trouve ici, y compris les lignes « BEGIN CERTIFICATE » et « END CERTIFICATE », puis ajoutez le certificat dans le menu de configuration sous « Setup > General > Global settings > Site management > Trusted certificate authorities for SSL » :

kubernetes ca

3.3. Création d'un hôte ferrouté

Créez un nouvel hôte dans Checkmk de la manière habituelle et nommez-le par exemple « mykubernetesclusterhost ». Comme le suggèrent le titre et le nom de l’hôte, cet hôte sert à collecter les données ferroutées ainsi qu’à effectuer l’affectation de tous les services et métriques au niveau du cluster. Étant donné que cet hôte ne reçoit des données que via l’agent spécial, veillez à définir l’option « IP address family » sur « No IP » dans les propriétés de l’hôte.

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

3.4. Configuration de la gestion dynamique des hôtes

CEE Pour garantir la séparation entre les objets de différents clusters Kubernetes, il peut être utile de créer un dossier par cluster via Setup > Hosts > Add folder, dans lequel la gestion dynamique des hôtes peut créer automatiquement tous les hôtes d’un cluster. La création ou l’utilisation d’un tel dossier est toutefois facultative.

Configurez ensuite une connexion dans les éditions commerciales pour les données ferroutées entrantes : avec Setup > Hosts > Dynamic host management > Add connection. Saisissez d'abord un titre, puis cliquez sur show more sous Connection Properties.

Cliquez ensuite sur « Add new element » et sélectionnez le dossier précédemment créé sous « Create hosts in ».

Laissez les attributs par défaut sous « Host attributes to set » tels quels. Ils garantissent que Checkmk se contente de suivre les données ferroutées pour les ordinateurs hôtes créés automatiquement et ne tente pas, par exemple, de les pinguer ou de les joindre via SNMP.

Dans un environnement Kubernetes où les objets surveillables et surveillés apparaissent et disparaissent en permanence, il est également recommandé d’activer l’option « Automatically delete hosts without piggyback data ». Le fonctionnement exact de cette option et les circonstances dans lesquelles les hôtes sont alors effectivement supprimés sont expliqués dans le chapitre « Suppression automatique des hôtes » de l’article sur la gestion dynamique des hôtes.

Saisissez maintenant l'hôte ferrouté précédemment créé sous « Restrict source hosts » et activez l'option « Discover services during creation ».

La section « Connection Properties » de cette nouvelle connexion pourrait alors se présenter comme suit :

Example settings for a dynamic host management.

3.5. Traitement des données ferroutées dans Checkmk Community

Dans Checkmk Community, vous devrez créer manuellement les hôtes pour les données ferroutées accumulées. Étant donné qu'un grand nombre d'hôtes ferroutés est susceptible d'apparaître ici dans un cluster Kubernetes, nous vous recommandons d'utiliser l'instruction « cmk-piggyback list orphans ».

3.6. Personnalisation de la reconnaissance périodique du service

Par défaut, Checkmk effectue une reconnaissance du service toutes les deux heures et affiche le résultat de cette reconnaissance dans le service « Check_MK Discovery ». Vous trouverez ce paramètre dans le jeu de règles « Periodic service discovery ». Dans le contexte de Kubernetes, nous vous recommandons de créer une règle pour tous les ordinateurs hôtes portant l’étiquette « cmk/kubernetes:yes ». Cette étiquette est automatiquement attribuée par Checkmk à chaque ordinateur hôte représentant des objets Kubernetes. Vous devriez sélectionner ici un intervalle plus court pour la reconnaissance du service, et également activer l’option « Automatically update service configuration ». Les paramètres de la capture d’écran suivante ne sont que des exemples. Vous devrez décider au cas par cas de ce qui convient le mieux à vos clusters.

Pour limiter cette règle à tous les ordinateurs hôtes de votre cluster, il suffit de saisir « cmk/kubernetes:yes » dans le champ « Conditions » sous « Host labels ». Toutefois, si vous souhaitez créer des règles individuelles pour plusieurs clusters, utilisez simplement ici l'étiquette spécifique au cluster concerné. Ces étiquettes se présentent toujours sous la forme « cmk/kubernetes/cluster:mycluster ».

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

3.7. Configuration de l'agent spécial

Maintenant que toutes les conditions préalables ont été créées dans le cluster et dans Checkmk, vous pouvez vous concentrer sur la configuration de l'agent spécial. Vous pouvez y accéder via Setup > Agents > VM, cloud, container > Kubernetes. Créez une nouvelle règle avec Add rule.

Tout d'abord, vous devez attribuer un nom au cluster à superviser. Vous pouvez choisir ce nom librement. Il sert à donner un nom unique à tous les objets provenant de ce cluster particulier. Par exemple, si vous saisissez ici mycluster, les noms des ordinateurs hôtes de tous les pods de ce cluster commenceront par la suite par pod_mycluster. La partie suivante du nom de domaine sera alors toujours l'espace de nommage dans lequel cet objet Kubernetes existe. Le nom de domaine d'un pod pourrait alors être pod_mycluster_kube-system_svclb-traefik-8bgw7, par exemple.

Sous « Token », sélectionnez maintenant l'entrée précédemment créée dans le coffre-fort à mot de passe Checkmk.

Example of cluster name and token selection.

Sous « API server connection > Endpoint », Checkmk vous demande maintenant de saisir l’URL (ou l’adresse IP) via laquelle votre serveur API Kubernetes est accessible. Vous ne devez saisir le port que si le service n’est pas fourni via un hôte virtuel. La manière la plus simple de trouver cette adresse — si vous ne l’avez pas déjà sous la main — dépendra de votre environnement Kubernetes. L’instruction suivante vous donnera la ressource du serveur API dans la ligne « 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
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Cependant, le résultat réel de la commande « kubectl config view » varie considérablement. Si un port est également spécifié ici dans la ligne « server », veillez à l’inclure également dans la règle.

Si vous avez suivi ces instructions étape par étape jusqu’à présent et que vous avez déposé le certificat CA de votre cluster — comme décrit ci-dessus — dans Checkmk, sélectionnez sous « SSL certificate verification » l’entrée « Verify the certificate ».

 Example of an API server connection.

Vous avez ensuite la possibilité d’enrichir la supervision de votre cluster Kubernetes avec les données de charge de travail collectées par le Checkmk Cluster Collector. Nous le répétons ici une fois de plus pour en souligner l’importance : la configuration du Cluster Collector est absolument essentielle pour une supervision complète de vos clusters. C’est le seul moyen d’obtenir des données importantes telles que l’utilisation du processeur et de la mémoire, et de recevoir des informations sur les systèmes de fichiers utilisés par les composants individuels.

Activez donc l’option « Enrich with usage data from Checkmk Cluster Collector » et spécifiez la ressource du NodePort ou de l’Ingress. La manière d’afficher cette ressource est indiquée dans la sortie du Helm chart.

 Example for the specification of a Cluster Collector connection.

Grâce aux options d'Collect information about…​, vous pouvez désormais sélectionner les objets de votre cluster qui doivent faire l'objet de la supervision. Notre présélection couvre les objets les plus pertinents. Si vous décidez de faire l'objet de la supervision l'Pods of CronJobs, veuillez vous reporter à l'aide en ligne à ce sujet.

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

Les deux options suivantes vous permettent de limiter davantage les objets à superviser. Si vous ne souhaitez superviser que les objets de certains espaces de nommage, configurez ce paramètre en conséquence sous « Monitor namespaces ». Vous pouvez ici soit saisir les espaces de nommage individuels à superviser, soit exclure explicitement certains espaces de nommage de la supervision.

L'option « Cluster resource aggregation » vous permet de spécifier les nœuds qui ne fournissent pas de ressources pour la charge de travail de votre cluster. Ces nœuds doivent être exclus du calcul des ressources disponibles, sinon vous risquez de ne pas détecter les goulots d'étranglement de capacité. Par défaut, nous excluons donc les nœuds control-plane et infra de l'évaluation.

Example configuration for a namespaces and resource aggregation

En dernier lieu, vous pouvez importer les annotations de Kubernetes. Dans Checkmk, ces annotations deviennent des étiquettes d'hôte et peuvent ainsi être utilisées comme conditions dans les règles. Vous pouvez spécifier les annotations à importer à l'aide d'expressions régulières. Là encore, veuillez consulter l'aide en ligne détaillée à ce stade.

Remarque : l'option « Import all valid annotations » (Importer toutes les annotations) n'est fournie ici que par souci d'exhaustivité. Nous vous déconseillons d'importer aveuglément toutes les annotations, car cela peut créer une montagne d'étiquettes inutiles dans Checkmk.

Important : Sous « Conditions > Explicit hosts », vous devez maintenant saisir l'ordinateur hôte créé précédemment :

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

Enregistrez ensuite la règle et effectuez une reconnaissance du service sur cet ordinateur hôte. Vous verrez immédiatement apparaître ici les premiers services au niveau du cluster :

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

Activez maintenant toutes les modifications que vous avez apportées et laissez la gestion dynamique des hôtes faire le travail à votre place. Cela créera tous les hôtes pour vos objets Kubernetes en très peu de temps.

4. Étiquettes pour les objets Kubernetes

Checkmk génère automatiquement des étiquettes pour les objets Kubernetes tels que les clusters, les déploiements ou les espaces de nommage lors de la reconnaissance du service. Toutes les étiquettes pour les objets Kubernetes que Checkmk génère automatiquement commencent par cmk/kubernetes/. Par exemple, un pod reçoit toujours une étiquette pour le nœud (cmk/kubernetes/node:mynode), une étiquette indiquant que cet objet est un pod (cmk/kubernetes/object:pod) et une étiquette pour l'espace de nommage (cmk/kubernetes/namespace:mynamespace). Cela facilite grandement la création de filtres et de règles pour tous les objets du même type ou situés dans le même espace de nommage.

5. Tableaux de bord et vues

5.1. Tableaux de bord Kubernetes

CEE Les éditions commerciales de Checkmk sont fournies avec six tableaux de bord intégrés pour Kubernetes. Afin d'utiliser ces tableaux de bord de manière pratique, il est nécessaire d'installer et de configurer notre Cluster Collector. Plus précisément, ces six tableaux de bord s'intitulent :

  • Kubernetes

  • Cluster Kubernetes

  • Kubernetes DaemonSet

  • Déploiement Kubernetes

  • Espace de nommage Kubernetes

  • StatefulSet Kubernetes

Le point d'entrée est toujours le tableau de bord d'Kubernetes, auquel vous pouvez accéder via Monitor > Applications > Kubernetes :

An example of a view of the overview dashboard.

Dans le tableau de bord « Kubernetes », tous vos clusters Kubernetes sous supervision sont répertoriés sur le côté gauche. Cette liste de clusters constitue également votre point d'entrée pour explorer plus en détail les tableaux de bord Kubernetes. En cliquant sur le nom d'un cluster, vous accédez au tableau de bord « » du cluster sélectionné. Dans le tableau de bord « Kubernetes Cluster », cliquer sur le nom correspondant vous permet d'accéder aux autres tableaux de bord dépendants du contexte :

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

5.2. L'inventaire matériel/logiciel

La supervision Kubernetes de Checkmk prend également en charge l’inventaire matériel/logiciel. Par exemple, si vous cliquez sur le nom principal du cluster (ici : mycluster) dans le tableau de bord du cluster ci-dessus, vous accéderez à l’inventaire du cluster.

De la même manière, c'est-à-dire via les cases contenant les noms principaux des objets, vous accéderez également à l'inventaire de l'objet correspondant dans les autres tableaux de bord. L'exemple suivant montre l'inventaire matériel/logiciel d'un pod :

kubernetes monitoring hw sw inventory

6. Check de l'installation

Dans la section consacrée à la sortie de l'Helm chart, vous avez déjà découvert la première méthode permettant de vérifier que les composants nécessaires à une supervision complète de Kubernetes ont bien été installés. Dans l'interface graphique de Checkmk, vous pouvez également vérifier la réussite de l'installation et de la configuration à plusieurs endroits.

Les services les plus importants à cet égard sont sans aucun doute Kubernetes API et Cluster Collector. Ceux-ci doivent être présents sur l'ordinateur hôte du cluster que vous avez créé et doivent également afficher certaines informations.

The most important services to check for a correct installation

Le service Kubernetes API doit normalement signaler Live, Ready sous Summary. Le service Cluster Collector doit afficher le numéro de version du Cluster Collector installé. Si ce n'est pas le cas pour l'un ou l'autre de ces services, vous devez vérifier l'installation des Helm charts et la configuration de l'agent spécial.

D'autres possibilités de vérification sont disponibles dans les tableaux de bord de cluster des éditions commerciales.

Dans le tableau de bord Kubernetes, vous pouvez voir très rapidement si le Cluster Collector est en cours d'exécution dans un cluster et s'il collecte des données. Si les colonnes « CPU resources » et « Memory resources » ne contiennent aucune donnée, cela indique clairement que le Cluster Collector ne fonctionne pas correctement. S'il est correctement configuré, le tableau de bord Kubernetes devrait ressembler à ceci :

Kubernetes dashboard with data for CPU resources and Memory resources

Si vous cliquez maintenant sur le nom du cluster dans cette fenêtre, vous accéderez à la page « Kubernetes Cluster » (Collecteur de cluster) dans le tableau de bord du cluster concerné. Ici, les trois cases « Primary datasource », « Cluster collector » et « API health » doivent être vertes et afficher « OK ».

A correctly-functioning cluster monitoring.

7. Suppression des composants de supervision d'un cluster

Si vous avez déployé Checkmk sur votre cluster à l'aide de nos Helm charts, vous pouvez supprimer les comptes, services, pods et ports de nœuds créés aussi facilement que vous les avez configurés. Pour ce faire, il vous suffit de désinstaller la version qui a été installée à l'aide de nos charts.

Si vous n'êtes pas sûr du nom de la version, affichez d'abord toutes les versions Helm dans tous les espaces de nommage :

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
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Comme dans l'exemple ci-dessus, vous devriez trouver ici une version contenant une référence à Checkmk dans la colonne « CHART ».

Supprimez cette version à l'aide de l'instruction suivante, en précisant l'espace de nommage correct :

user@host:~$ helm uninstall myrelease -n checkmk-monitoring
release "myrelease" uninstalled
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Last modified: Wed, 17 Dec 2025 17:01:40 GMT via commit 48b7fc7fb
Sur cette page