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

kubernetes logo

Kubernetes è da tempo lo strumento più utilizzato per l'orchestrazione dei container. Checkmk ti aiuta a monitorare i tuoi ambienti Kubernetes. A livello di nodo e dal livello del cluster fino ai singoli pod, puoi monitorare tutti gli oggetti importanti dei tuoi carichi di lavoro. Per un elenco completo di tutti i plugin per i controlli disponibili per il monitoraggio di Kubernetes, consulta il nostro catalogo dei plugin per i controlli.

1.1. Distribuzioni e versioni supportate

A partire dalla versione 2.2.0, Checkmk supporta le seguenti distribuzioni e servizi Kubernetes:

  • Vanilla Kubernetes

  • Amazon Elastic Kubernetes Service (Amazon EKS)

  • Azure Kubernetes Service (AKS)

  • Google Kubernetes Engine (GKE) incl. modalità Autopilot

  • OpenShift

  • Tanzu Kubernetes

Il nostro obiettivo è supportare ciascuna delle ultime 5 versioni (minori) rilasciate di Kubernetes. Supportiamo quindi anche le versioni di Kubernetes che sono già uscite dal ciclo di vita di Kubernetes (Vanilla). Soprattutto, garantiamo una collaborazione fluida con quei fornitori di cloud che offrono anche periodi di supporto più lunghi per i loro servizi Kubernetes. Subito dopo il rilascio di una nuova versione di Kubernetes, potrebbe volerci un po' di tempo — a seconda della portata delle nuove funzionalità e della tempistica — prima che sia pienamente supportata anche in Checkmk. Non appena Checkmk sarà in grado di funzionare senza intoppi con questa nuova versione, lo annunceremo in un Werk (come ad esempio Werk #14584).

1.2. Introduzione al monitoraggio di Kubernetes

Per un'introduzione al nuovo monitoraggio di Kubernetes, ti consigliamo i nostri due video Monitoraggio di Kubernetes con Checkmk e Rilevamento dei problemi e configurazione degli avvisi per i cluster Kubernetes.

1.3. Struttura dell'ambiente di monitoraggio

Poiché i cluster Kubernetes possono subire rapidamente cambiamenti significativi in termini di numero e posizione dei singoli componenti, ti consigliamo di creare un'istanza separata per il monitoraggio del tuo ambiente Kubernetes. Puoi quindi effettuare la connessione di questa istanza al tuo sito centrale come di consueto tramite il monitoraggio distribuito.

1.4. Il processo di monitoraggio di Kubernetes in Checkmk

Checkmk monitora i tuoi cluster Kubernetes in due modi:

monitoring kubernetes architecture

L'agente speciale Kubernetes recupera semplicemente le informazioni di base tramite il server API del tuo cluster. Questo può già essere utilizzato per recuperare gli stati dei nodi e dei container. Anche la maggior parte dei metadati dei tuoi pod e dei tuoi deployments viene ottenuta in questo modo.

Per un monitoraggio completo, tuttavia, a questo punto manca ancora qualcosa. Domande come: quanto carico genera una particolare distribuzione sulla CPU, o quanta memoria sta attualmente utilizzando un DaemonSet, non possono trovare risposta in questo modo.

È qui che entrano in gioco il nostro Checkmk Node Collector e il nostro Checkmk Cluster Collector. Questi sono una parte indispensabile del monitoraggio di Kubernetes all’interno di Checkmk. Una parte non trascurabile di ciò che segue in questo articolo riguarda quindi anche l’installazione e la configurazione di questi strumenti. Inoltre, l’uso delle dashboard di Kubernetes nelle edizioni commerciali ha senso solo se i Node e Cluster Collector sono in grado di fornire dati sui carichi per queste.

1.5. Differenze rispetto ad altri tipi di monitoraggio in Checkmk

Quando si effettua il monitoraggio dei pod e delle repliche nei tuoi cluster Kubernetes, a volte i cambiamenti di stato o i ritardi si verificano con maggiore frequenza. Per tenerne conto, i controlli relativi a determinati stati di questi oggetti modificano il loro stato in Checkmk solo dopo 10 minuti.

1.6. Differenze rispetto al monitoraggio Kubernetes legacy

Il monitoraggio di Kubernetes in Checkmk è stato riscritto da zero. L'ambito dei dati che possono essere monitorati è cresciuto notevolmente. Poiché la base tecnica per il monitoraggio di Kubernetes in Checkmk 2.1.0 è fondamentalmente diversa, non è possibile trasferire o riscrivere i dati di monitoraggio precedenti dei tuoi oggetti Kubernetes.

2. Creazione dei prerequisiti nel cluster

Per poter effettuare il monitoraggio del tuo cluster Kubernetes in Checkmk, devi prima creare i prerequisiti nel tuo cluster. Prima di tutto, indica al cluster quali pod/container distribuire e come configurarli.

2.1. Configurazione del repository Helm

L'installazione del monitoraggio di Kubernetes avviene con l'aiuto dello strumento helm. Helm è adatto anche agli utenti meno esperti e standardizza la gestione delle configurazioni. Helm è una sorta di gestore di pacchetti per Kubernetes. Se non stai ancora usando Helm, di solito puoi scaricarlo dal gestore di pacchetti della tua distribuzione Linux o dal sito web del progetto Helm.

Puoi usare Helm per includere i repository come fonti e aggiungere facilmente al tuo cluster gli Helm chart che questi contengono, proprio come si fa con i pacchetti. Per prima cosa, identifica il repository. Nell’esempio seguente, usiamo il nome checkmk-chart per facilitare l’accesso al repository in seguito. Ovviamente puoi anche usare qualsiasi altro nome a tua scelta:

user@host:~$ helm repo add checkmk-chart https://checkmk.github.io/checkmk_kube_agent
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Aggiorniamo i nostri Helm chart ogni volta che i nuovi sviluppi in Kubernetes lo richiedono. Vale quindi la pena controllare di tanto in tanto se nel repository sono disponibili nuove versioni. Se hai chiamato la tua copia locale del nostro repository checkmk-chart, come nel comando precedente, puoi usare il seguente comando per visualizzare tutte le versioni dei chart disponibili nel repository:

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...
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se è disponibile una versione più recente, puoi aggiornare con helm repo update.

2.2. Personalizzazione della configurazione in base al tuo ambiente

Poiché non possiamo sapere in anticipo come è strutturato il tuo cluster Kubernetes, abbiamo scelto la variante più sicura per l'avvio dei Cluster Collector: Per impostazione predefinita, non vengono fornite porte accessibili da remoto. Per poter accedere ai collector in un secondo momento, dovrai adattare queste impostazioni al tuo cluster specifico.

Di default supportiamo due percorsi di comunicazione: la query tramite Ingress e la query tramite NodePort. La configurazione di questi varierà a seconda della variante che supporti nel tuo cluster.

Per poter determinare autonomamente determinati parametri in tutte le configurazioni, devi includere un file di controllo, il cosiddetto values.yaml.

Ci sono due modi per creare un file values.yaml. Puoi estrarre il file fornito da noi nei Helm chart e modificarlo, oppure puoi semplicemente crearne una versione minimale da solo.

Ogni volta che vuoi distribuire le modifiche a questo file nel tuo cluster, puoi usare nuovamente il comando di installazione dell'Helm chart di cui parleremo più avanti in questo articolo.

Creare il proprio file values.yaml di base

Puoi creare un file `values.yaml` in cui inserire solo i valori che desideri modificare. Nel nostro Helm chart, ad esempio, il tipo di servizio del Cluster Collector è impostato di default su `ClusterIP`. Se ora vuoi solo cambiare questo tipo di servizio in `NodePort` e la porta in 30035, è sufficiente creare semplicemente un file `values.yaml` come segue:

user@host:~$ echo 'clusterCollector: {service: {type: NodePort, nodePort: 30035}}' > values.yaml
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Un'attivazione di Ingress potrebbe apparire così:

user@host:~$ echo 'clusterCollector: {ingress: { enabled: true }}' > values.yaml
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Estrazione di values.yaml dai Helm chart

Il file values.yaml completo fornito da noi può essere facilmente estratto con il seguente comando:

user@host:~$ helm show values checkmk-chart/checkmk > values.yaml
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Ora puoi adattare il file così creato alle tue esigenze e passarlo a helm con il parametro -f values.yaml durante l'installazione o in occasione di un aggiornamento successivo.

Gestione della comunicazione tramite Ingress

Se utilizzi Ingress per controllare l'accesso ai tuoi servizi, modifica di conseguenza le parti già preparate in values.yaml. Per una migliore panoramica, nel seguente esempio abbreviato viene mostrata solo la parte rilevante. Imposta il parametro enabled su true. Adatta i parametri rimanenti in base al tuo ambiente:

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
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Fornire la comunicazione tramite NodePort

Puoi anche fornire l'accesso ai servizi direttamente tramite una porta. Questo è necessario se non utilizzi Ingress. Nell'esempio seguente viene mostrata solo la sezione pertinente. Imposta il valore type su NodePort e rimuovi il commento per il valore 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
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Configurazione del Cluster Collector per HTTPS

Se vuoi switchare a HTTPS per la comunicazione con e tra i Cluster Collector, devi anche apportare delle modifiche al file values.yaml.

Di seguito è riportata la sezione del file values.yaml in dotazione che devi modificare per abilitare 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-----
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Nelle righe che iniziano con enabled o verifySsl, devi sostituire false con true. Successivamente, rimuovi i simboli cancelletto (#) prima delle tre sezioni clusterCollectorKey, clusterCollectorCert e checkmkCaCert e inserisci i dati corrispondenti dopo di esse. La tua organizzazione dovrebbe decidere se utilizzare certificati self-signed o ottenere certificati da un'Autorità di Certificazione (CA).

Tieni presente che i certificati devono soddisfare i seguenti requisiti:

  • Il certificato CA deve contenere il nome host o il nome dell'Ingress come FQDN.

  • Per il certificato del server, l'FQDN deve corrispondere al seguente modello: <service_name>.<namespace>.cluster.local.

  • Nella sezione [ v3_ext ] del file di configurazione per la generazione della richiesta di firma del certificato (CSR), l'subjectAltNamee deve corrispondere al seguente modello: subjectAltName = DNS:<service_name>.<namespace>.cluster.local, DNS:<service_name>.<namespace>, IP:<service ip>

Utilizzo del tuo account di servizio

Utilizzando i nostri Helm chart, nel tuo cluster verrà creato un account di servizio per impostazione predefinita. Se disponi già di un account di servizio adeguato, è sufficiente aggiungerlo in values.yaml e impedire la creazione di un nuovo account.

values.yaml
serviceAccount:
  create: false
  name: "myserviceaccount"
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Prerequisiti per il monitoraggio di GKE Autopilot

Se gestisci il tuo cluster GKE (Google Kubernetes Engine) in modalità Autopilot, è possibile effettuare il monitoraggio anche con Checkmk, poiché Checkmk è un cosiddetto partner Autopilot.

Devi solo impostare var_run su readOnly nel tuo file values.yaml:

values.yaml
volumeMountPermissions:
      var_run:
        readOnly: true
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Configura il controller di ammissione Pod Security

Se utilizzi gli standard di sicurezza dei pod nel tuo cluster, devi configurare Checkmk Cluster Collector in modo che abbia accesso illimitato nel namespace corrispondente. Idealmente, crea un namespace con le seguenti specifiche:

namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: checkmk-monitoring
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/enforce-version: latest
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Puoi creare il namespace eseguendo, ad esempio, kubectl apply -f namespace.yaml. Tieni presente che in questo modo non dovrai utilizzare l'opzione --create-namespace quando in seguito eseguirai il comando helm upgrade.

Se il Cluster Collector è già in esecuzione o lo namespace esiste già, puoi anche impostare le etichette di cui sopra con il seguente comando:

user@host:~$ kubectl label --overwrite ns checkmk-monitoring pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/enforce-version=latest
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Politiche di sicurezza dei pod e politiche di rete

Le politiche PodSecurityPolicy (abbreviate in PSP) e NetworkPolicy sono incluse nel nostro Helm chart principalmente per motivi di compatibilità. Poiché le PSP sono state ora rimosse completamente da Kubernetes a partire dalla versione v1.25, le abbiamo disabilitate di default a partire dalla versione 1.3.0 del nostro Helm chart.

La sezione corrispondente ora appare così:

values.yaml
rbac:
  pspEnabled: false
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se nel tuo cluster utilizzi ancora il PSP, è necessario impostare questa opzione su true nel file values.yaml:

values.yaml
rbac:
  pspEnabled: true
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se, in un secondo momento, dovessimo riscontrare che questa voce non viene elaborata correttamente anche quando è disabilitata, la rimuoveremo completamente.

Lo stesso vale per NetworkPolicy. Se la usi nel tuo cluster, dovrai cambiare il percorso in values.yaml da enabled: false a enabled: true. In questo caso, consulta la seguente documentazione all'indirizzo values.yaml per configurare correttamente 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
Copia il contenuto del file negli appunti
Contenuto del file copiato con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

2.3. Installazione dei Helm chart

Dopo aver personalizzato values.yaml o averne creato uno tuo, usa il seguente comando per effettuare l'installazione di tutti i componenti necessari nel tuo cluster in modo da poterlo monitorare in Checkmk:

user@host:~$ helm upgrade --install --create-namespace -n checkmk-monitoring myrelease checkmk-chart/checkmk -f values.yaml
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Poiché questo comando non è intuitivo, di seguito forniamo una spiegazione delle singole opzioni:

Elemento del comando Descrizione

helm upgrade --install

Questa parte è il comando di base per inviare la configurazione al cluster Kubernetes.

--create-namespace

In Kubernetes, devi sempre specificare a quale namespace deve essere aggiunta la configurazione. Hai bisogno di questa opzione se il namespace non esiste ancora. In questo caso, Helm lo creerà.

-n checkmk-monitoring

Questa opzione specifica il namespace a cui deve essere aggiunta la configurazione. checkmk-monitoring è solo un esempio di come potrebbe chiamarsi.

myrelease

Qui, myrelease indica la release. Ogni istanza di un Helm chart in esecuzione nel tuo cluster Kubernetes è chiamata release. Puoi scegliere questo nome liberamente.

checkmk-chart/checkmk

La prima parte di questa opzione descrive il repository che hai creato in precedenza. La seconda parte — dopo la barra — è il pacchetto che contiene le informazioni necessarie per creare la configurazione per il monitoraggio di Kubernetes.

-f values.yaml

Infine, inserisci il file di configurazione che hai creato o adattato in precedenza. Contiene tutte le personalizzazioni da includere nei file di configurazione creati con helm.

Una volta eseguito il comando, il tuo cluster Kubernetes è pronto per il monitoraggio con Checkmk. Il cluster si occuperà ora autonomamente di garantire che i pod necessari e i container in essi contenuti siano in esecuzione e accessibili.

Output dell'Helm chart

Quindi la prossima cosa da fare è configurarlo in Checkmk. Per rendere questo Setup il più semplice possibile, abbiamo dotato l'output dei nostri Helm chart di un'intera serie di comandi. Questo output si adatta automaticamente anche ai valori che hai specificato nel file values.yaml. Se usi il NodePort, otterrai i comandi per visualizzare, tra le altre cose, l’IP e la porta del NodePort. Se invece usi Ingress, l’output verrà adattato di conseguenza. Di seguito mostriamo l’output — leggermente abbreviato — a seguito di un’installazione riuscita quando si utilizza il 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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Da questo output, basta copiare le righe colorate ed eseguire i comandi.

Il primo blocco mostra le informazioni relative al NodePort:

user@host:~$ export NODE_PORT=$(kubectl get --namespace checkmk-monitoring -o jsonpath="{.spec.ports[0].nodePort}" services myrelease-checkmk-cluster-collector);
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!
user@host:~$ export NODE_IP=$(kubectl get nodes --namespace checkmk-monitoring -o jsonpath="{.items[0].status.addresses[0].address}");
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!
user@host:~$ echo http://$NODE_IP:$NODE_PORT
http://10.184.38.103:30035
----
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Questo è esattamente l'indirizzo che dovrai inserire in Checkmk più avanti nella regola Kubernetes nel campo Collector NodePort / Ingress endpoint.

Con i comandi del blocco successivo ottieni sia il token che il certificato per l'account di servizio. I dati vengono così memorizzati nelle variabili d'ambiente TOKEN e CA_CRT. Quando visualizzi la variabile CA_CRT, assicurati di racchiuderla tra virgolette, altrimenti andranno perse le importanti interruzioni di riga presenti nel certificato.

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-----
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Durante il Setup in Checkmk, devi memorizzare sia il token che il certificato. Lascia aperta la shell con queste informazioni oppure copia il token e il certificato in una posizione a cui puoi accedere durante il successivo Setup in Checkmk.

Se hai eseguito i due comandi di esportazione precedenti, puoi usare l'ultimo comando per verificare che il Setup sia andato a buon fine:

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"
    }
  }
  ...
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

All'inizio dell'output altamente abbreviato, ad esempio, puoi vedere la versione del Cluster Collector. Più in basso, seguirebbero i metadati per tutti i nodi di questo cluster.

3. Configurazione del monitoraggio in Checkmk

Successivamente, nella GUI di Checkmk, passiamo alla configurazione dell'agente speciale e di una regola per la creazione automatica di host per i tuoi oggetti Kubernetes. Per configurare l'agente speciale, tuttavia, è necessario soddisfare alcuni prerequisiti:

3.1. Memorizzazione della password (token) in Checkmk

È consigliabile memorizzare la password (token) dell'account di servizio nell'archivio password di Checkmk. Questa è l'opzione più sicura, poiché ti permette di separare a livello organizzativo la conservazione e l'utilizzo della password. In alternativa, inserisci la password direttamente in chiaro durante la creazione della regola (vedi sotto). Per informazioni su come visualizzare la password richiesta, consulta l'output del Helm chart. Aggiungi la password all'archivio password di Checkmk con l'opzione `Setup > General > Passwords > Add password`, ad esempio con l'ID e il titolo `My Kubernetes Token`:

kubernetes password

3.2. Importazione del certificato CA dell’account di servizio in Checkmk.

Affinché Checkmk si fidi dell'Autorità di Certificazione (CA) dell'account di servizio, devi memorizzare il certificato CA in Checkmk. Come visualizzare il certificato richiesto è indicato anche nell'output del grafico Helm chart. Copia tutto qui, comprese le righe BEGIN CERTIFICATE e END CERTIFICATE, e aggiungi il certificato nel menu di configurazione alla voce Setup > General > Global settings > Site management > Trusted certificate authorities for SSL:

kubernetes ca

3.3. Creazione di un host piggyback

Crea un nuovo host in Checkmk come al solito e chiamalo, ad esempio, mykubernetesclusterhost. Come suggeriscono il titolo e il nome dell'host, questo host viene utilizzato per la raccolta dei dati piggyback e anche per la mappatura di tutti i servizi e le metriche a livello di cluster. Poiché questo host riceve dati solo tramite il special agent, assicurati di impostare l'opzione IP address family su No IP nelle proprietà dell'host.

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

3.4. Configurazione della gestione dinamica degli host

CEE Per garantire la separazione tra gli oggetti di diversi cluster Kubernetes, può essere utile creare una cartella per ogni cluster tramite Setup > Hosts > Add folder, in cui la gestione dinamica degli host può creare automaticamente tutti gli host di un cluster. Tuttavia, la creazione o l'utilizzo di tale cartella è facoltativo.

Successivamente, configura una connessione nelle edizioni commerciali per i dati piggyback in entrata: con Setup > Hosts > Dynamic host management > Add connection. Inserisci prima un titolo e poi clicca su show more sotto Connection Properties.

Successivamente, clicca su "Add new element" e seleziona la cartella creata in precedenza sotto "Create hosts in".

Lascia gli attributi predefiniti sotto "Host attributes to set" così come sono. Questi assicurano che Checkmk si limiti a utilizzare i dati piggyback per gli host creati automaticamente e non tenti, ad esempio, di eseguire il ping o di raggiungerli tramite SNMP.

In un ambiente Kubernetes in cui gli oggetti monitorabili e monitorati vanno e vengono continuamente, si consiglia inoltre di attivare l'opzione "Automatically delete hosts without piggyback data". Cosa fa esattamente questa opzione e in quali circostanze gli host vengono effettivamente eliminati è spiegato nel capitolo "Eliminazione automatica degli host" nell'articolo sulla gestione dinamica degli host.

Ora inserisci l'host piggyback creato in precedenza in "Restrict source hosts" e attiva l'opzione "Discover services during creation".

La sezione "Connection Properties" di questa nuova connessione potrebbe quindi apparire così:

Example settings for a dynamic host management.

3.5. Elaborazione dei dati piggyback in Comunità Checkmk

In Comunità Checkmk dovrai creare manualmente gli host per i dati piggyback accumulati. Poiché in un cluster Kubernetes è probabile che si verifichi un numero elevato di host piggyback, ti consigliamo di utilizzare il comando cmk-piggyback list orphans.

3.6. Personalizzazione della scoperta periodica del servizio

Per impostazione predefinita, Checkmk esegue la scoperta del servizio ogni due ore e visualizza il risultato di questa scoperta nel servizio Check_MK Discovery. Puoi trovare questa impostazione nel set di regole Periodic service discovery. Nel contesto di Kubernetes, ti consigliamo di creare una regola per tutti gli host con l'etichetta cmk/kubernetes:yes. Questa etichetta viene assegnata automaticamente da Checkmk a ogni host che rappresenta oggetti Kubernetes. Qui dovresti selezionare un intervallo più breve per la scoperta del servizio e attivare anche l'opzione "Automatically update service configuration". Le impostazioni nella schermata seguente sono solo esempi. Dovrai decidere cosa è più sensato per i tuoi cluster caso per caso.

Per limitare questa regola a tutti gli host del tuo cluster, basta inserire cmk/kubernetes:yes nel campo "Conditions" sotto "Host labels". Tuttavia, se vuoi creare regole individuali per più cluster, usa semplicemente l'etichetta specifica del cluster in questione. Queste etichette hanno sempre il formato cmk/kubernetes/cluster:mycluster.

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

3.7. Configurazione dell'special agent

Ora che tutti i prerequisiti sono stati creati nel cluster e in Checkmk, puoi dedicarti alla configurazione dell'special agent. Lo trovi all'indirizzo Setup > Agents > VM, cloud, container > Kubernetes. Crea una nuova regola con Add rule.

Prima di tutto, devi assegnare un nome al cluster da monitorare. Puoi scegliere questo nome liberamente. Viene utilizzato per dare un nome univoco a tutti gli oggetti provenienti da questo particolare cluster. Ad esempio, se qui inserisci mycluster, i nomi degli host di tutti i pod di questo cluster inizieranno in seguito con pod_mycluster. La parte successiva del nome host sarà quindi sempre lo space dei nomi in cui si trova questo oggetto Kubernetes. Il nome host di un pod potrebbe quindi essere, ad esempio, pod_mycluster_kube-system_svclb-traefik-8bgw7.

In Token, seleziona ora la voce creata in precedenza dall'archivio password di Checkmk.

Example of cluster name and token selection.

In API server connection > Endpoint, Checkmk ti chiede ora di inserire l’URL (o l’indirizzo IP) tramite il quale è possibile accedere al tuo server API Kubernetes. Devi inserire la porta solo se il servizio non viene fornito tramite un host virtuale. Il modo più semplice per scoprire questo indirizzo — se non lo hai già a portata di mano — dipenderà dal tuo ambiente Kubernetes. Il seguente comando ti fornirà l'endpoint del server API nella riga 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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Tuttavia, l'output effettivo di kubectl config view varia notevolmente. Se qui nella riga server è specificata anche una porta, assicurati di includerla anche nella regola.

Se finora hai seguito queste istruzioni passo dopo passo e hai depositato il certificato CA del tuo cluster — come descritto sopra — in Checkmk, seleziona sotto SSL certificate verification la voce Verify the certificate.

 Example of an API server connection.

Ora hai la possibilità di arricchire il monitoraggio del tuo cluster Kubernetes con i dati di utilizzo raccolti dal Checkmk Cluster Collector. Lo ripetiamo ancora una volta per sottolinearne l’importanza: la configurazione del Cluster Collector è assolutamente essenziale per un monitoraggio completo dei tuoi cluster. Solo così potrai ottenere dati importanti come l’utilizzo della CPU e della memoria e ricevere informazioni sui file system utilizzati dai singoli componenti.

Attiva quindi l'opzione "Enrich with usage data from Checkmk Cluster Collector" e specifica l'endpoint del NodePort o dell'Ingress. Come visualizzare nuovamente questo endpoint è indicato nell'output dell'Helm chart.

 Example for the specification of a Cluster Collector connection.

Con le opzioni "Collect information about…​" puoi ora selezionare quali oggetti all'interno del tuo cluster devono essere sottoposti a monitoraggio. La nostra preselezione copre gli oggetti più rilevanti. Se decidi di sottoporre a monitoraggio anche l'Pods of CronJobs, fai riferimento all'aiuto in linea su questo punto.

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

Con le due opzioni successive, puoi limitare ulteriormente gli oggetti da monitorare. Se ti interessano solo gli oggetti di determinati namespace, imposta questa opzione di conseguenza in Monitor namespaces. Qui puoi inserire i singoli namespace da monitorare oppure escludere esplicitamente singoli namespace dal monitoraggio.

Con l'opzione "Cluster resource aggregation" puoi specificare i nodi che non forniscono risorse per il carico di lavoro del tuo cluster. Questi nodi dovrebbero essere esclusi dal calcolo delle risorse disponibili, altrimenti c'è il rischio che i colli di bottiglia di capacità non vengano rilevati. Per impostazione predefinita, escludiamo quindi i nodi control-plane e infra dalla valutazione.

Example configuration for a namespaces and resource aggregation

Come opzione finale, puoi importare le cosiddette annotazioni da Kubernetes. In Checkmk, queste annotazioni diventano etichette dell'host e possono quindi essere utilizzate come condizioni nelle regole. Puoi specificare quali annotazioni devono essere importate utilizzando espressioni regolari. Anche in questo caso, consulta l'aiuto in linea.

Nota: l'opzione "Import all valid annotations" è fornita qui solo per completezza. Non consigliamo di importare ciecamente tutte le annotazioni, poiché ciò può creare una montagna enorme di etichette inutili in Checkmk.

Importante: In "Conditions > Explicit hosts" devi ora inserire l'host creato in precedenza:

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

Quindi salva la regola ed esegui la scoperta del servizio su questo host. Qui vedrai immediatamente i primi servizi a livello di cluster:

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

Ora attiva tutte le modifiche che hai apportato e lascia che la gestione dinamica degli host faccia il lavoro per te. In questo modo verranno creati tutti gli host per i tuoi oggetti Kubernetes in breve tempo.

4. Etichette per gli oggetti Kubernetes

Checkmk genera automaticamente le etichette per gli oggetti Kubernetes come cluster, deployment o namespace durante la scoperta del servizio. Tutte le etichette per gli oggetti Kubernetes generate automaticamente da Checkmk iniziano con cmk/kubernetes/. Ad esempio, un pod riceve sempre un'etichetta per il nodo (cmk/kubernetes/node:mynode), un'etichetta che indica che questo oggetto è un pod (cmk/kubernetes/object:pod) e un'etichetta per lo spazio dei nomi (cmk/kubernetes/namespace:mynamespace). Questo rende molto facile creare filtri e regole per tutti gli oggetti dello stesso tipo o nello stesso namespace.

5. Dashboard e visualizzazioni

5.1. Dashboard Kubernetes

CEE Le edizioni commerciali di Checkmk sono fornite con sei dashboard integrate per Kubernetes. Per poter utilizzare queste dashboard in modo pratico, è necessario installare e configurare il nostro Cluster Collector. Nello specifico, queste sei dashboard si chiamano:

  • Kubernetes

  • Kubernetes cluster

  • Kubernetes DaemonSet

  • Deployment Kubernetes

  • Namespace Kubernetes

  • StatefulSet di Kubernetes

Il punto di accesso è sempre la dashboard di Kubernetes, a cui puoi accedere tramite Monitor > Applications > Kubernetes:

An example of a view of the overview dashboard.

Nella dashboard di Kubernetes, tutti i tuoi cluster Kubernetes sottoposti al monitoraggio saranno elencati sul lato sinistro. Questo elenco di cluster è anche il tuo punto di accesso per approfondire le dashboard di Kubernetes. Cliccando sul nome di un cluster verrai reindirizzato alla dashboard di Kubernetes Cluster del cluster selezionato. Nella dashboard di Kubernetes Cluster, cliccando sul nome corrispondente verrai reindirizzato alle altre dashboard dipendenti dal contesto:

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

5.2. L'inventario HW/SW

Il monitoraggio Kubernetes di Checkmk supporta anche l'inventario HW/SW. Ad esempio, se clicchi sul nome principale del cluster (qui: mycluster) nella dashboard del cluster sopra riportata, verrai reindirizzato all'inventario del cluster.

Allo stesso modo, cioè tramite le box con i nomi primari degli oggetti, potrai accedere all’inventario del rispettivo oggetto anche nelle altre dashboard. L’esempio seguente mostra l’inventario HW/SW di un pod:

kubernetes monitoring hw sw inventory

6. Verifica dell'installazione

Nella sezione dedicata all'output dell'Helm chart hai già imparato il primo metodo per verificare che i componenti necessari per un monitoraggio completo di Kubernetes siano stati installati correttamente. Nella GUI di Checkmk puoi anche verificare il corretto funzionamento dell'installazione e della configurazione in diversi punti.

I servizi più importanti in questo caso sono sicuramente Kubernetes API e Cluster Collector. Questi devono essere presenti sull'host del cluster che hai creato e dovrebbero anche visualizzare determinate informazioni.

The most important services to check for a correct installation

Il servizio Kubernetes API dovrebbe normalmente riportare Live, Ready all'indirizzo Summary. Il servizio Cluster Collector deve mostrare il numero di versione del Cluster Collector installato. Se così non fosse per uno o l'altro di questi, devi verificare l'installazione degli Helm chart e la configurazione dell'special agent.

Ulteriori possibilità di check sono disponibili nelle dashboard del cluster delle edizioni commerciali.

Nella dashboard Kubernetes puoi vedere fin da subito se il Cluster Collector è in esecuzione in un cluster e sta raccogliendo dati. Se le colonne CPU resources e Memory resources non contengono dati, questo è già un forte indicatore del fatto che il Cluster Collector non funziona correttamente. Se configurata correttamente, la dashboard Kubernetes dovrebbe apparire più o meno così:

Kubernetes dashboard with data for CPU resources and Memory resources

Se ora clicchi sul nome del cluster in questa finestra, verrai reindirizzato alla pagina "Kubernetes Cluster" nella dashboard del cluster corrispondente. Qui le tre box "Primary datasource", "Cluster collector" e "API health" dovrebbero essere verdi e mostrare "OK".

A correctly-functioning cluster monitoring.

7. Rimozione dei componenti di monitoraggio da un cluster

Se hai distribuito Checkmk sul tuo cluster utilizzando i nostri Helm chart, puoi rimuovere gli account, i servizi, i pod e le porte dei nodi creati con la stessa facilità con cui li hai configurati. Per farlo, basta disinstallare la release che è stata installata utilizzando i nostri chart.

Se non sei sicuro del nome della release, visualizza prima tutte le release Helm in tutti i 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
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Come nell'esempio di output sopra, qui dovresti trovare una release che contiene un riferimento a Checkmk nella colonna "CHART".

Rimuovi questa release con il seguente comando, specificando lo spazio dei nomi corretto:

user@host:~$ helm uninstall myrelease -n checkmk-monitoring
release "myrelease" uninstalled
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Last modified: Wed, 17 Dec 2025 17:01:40 GMT via commit 48b7fc7fb
In questa pagina