Das Aufsetzen von Checkmk in Kubernetes ist mit der inzwischen verfügbaren Checkmk-Container-Registry und den vordefinierten Manifesten für das Deployment jetzt deutlich einfacher. In diesem Blog erkläre ich Ihnen, wie Sie Checkmk für Ihr Kubernetes-Monitoring mit einem Klick aufsetzen und aktualisieren können.

In dieser Anleitung werde ich die Checkmk Enterprise Edition auf einem Vanilla-Kubernetes-Cluster mit der Version 1.18 ausrollen. Die Vorgehensweise für das Deployment der Checkmk Raw Edition ist ähnlich. Manche Schritte können Sie sogar überspringen, da Sie zum Beispiel kein Pull-Secret einrichten müssen, um das Container-Image aus der Registry zu beziehen.

Voraussetzung für das Deployment ist ein persistentes Volume, auf dem Checkmk Daten speichern kann.

Disclaimer:
Der Betrieb von Checkmk in Kubernetes wird nicht offiziell unterstützt! Dieser Blogartikel zeigt lediglich Möglichkeiten auf. Das Vorgehen wurde nur unter Vanilla Kubernetes 1.18 getestet.
Wir empfehlen, den Monitoring-Server getrennt von der zu überwachenden Infrastruktur zu betreiben. Denn vom Ast aus lässt sich der Baum schlecht überwachen.
..

1. Herunterladen der Manifeste

Zunächst müssen Sie die Manifeste aus unserem GitHub Repository beziehen, indem Sie diese entweder einzeln herunterladen oder das Repository klonen. Sie sollten anschließend alle Dateien in einem Ordner wie diesem vorfinden:

Liste von allen Kubernetes-Manifesten für Checkmk

Wenn es um die Verwaltung Ihres Clusters geht, empfehle ich Ihnen, dass Sie Ihre Kubernetes-Manifeste in einem Git haben und dabei dem GitOps-Ansatz folgen.

2. Anpassen der Manifeste

Nun können Sie mit der Vorbereitung der Manifeste für das spätere Deployment von Checkmk beginnen. Ich gehe in dieser Anleitung nur auf die Manifeste ein, die Sie definitiv anpassen müssen.

Am Ende des Artikels habe ich Ihnen noch einmal alle Manifeste und ihre Funktionen in einer Liste zusammengestellt.

Ingress für die Checkmk-Benuzteroberfläche

Damit die Checkmk-Benutzeroberfläche von außen zugänglich ist, müssen Sie ein Ingress einrichten. Je nachdem, wie Ihr Cluster eingerichtet ist, kann dieser Vorgang variieren.

Bearbeiten Sie dafür die checkmk-server_ingress.yaml 

Das Kubernetes-Ingress-Manifest für Checkmk

In meinem Fall ändere ich Zeile 9 in - host: checkmk.10.199.31.20.nip.io um.

Sollten Sie keine Ingress-Konfiguration haben, löschen Sie diese Datei einfach und machen Sie Checkmk über den NodePort erreichbar.

Secret: Checkmk-Images aus der Registry beziehen​​​​​​​

Wenn Sie die Raw Edition verwenden, können Sie diesen Schritt überspringen.

Als nächstes müssen Sie das Pull-Secret einrichten, um das Checkmk-Image aus der offiziellen Container-Repository beziehen zu können. Hierfür benötigen Sie eine Checkmk-Subskription. Sie können dafür die Zugangsdaten verwenden, die Sie generell auch für den Download von Checkmk benutzen.

Um das Secret zu erstellen, das Sie für das Abrufen des Images benötigen, adaptieren Sie diesen Befehl:

kubectl create secret docker-registry regcred --docker-server=registry.checkmk.com --docker-username=<your-name> --docker-password=<your-pword> 

Der Befehl für das Abrufen des Secrets lautet​​​​​​​

kubectl get secret regcred --output=yaml

Befehl zum Erstellen des Docker-Secrets für die offizielle Checkmk-Container-Registry

Nutzen Sie den String aus .dockerconfigjson  und fügen Sie diesen in Zeile 11 der checkmk-server_secret-pull-credentials.yaml ein.

Das Pull-Secret-Manifest

Damit haben Sie die wichtigsten Änderungen vorgenommen, die Sie für das Deployment von Checkmk benötigen.

3. Bereitstellung von Checkmk in Kubernetes

Für das Deployment von Checkmk in Kubernetes müssen Sie lediglich folgenden Befehl im Ordner mit den Manifesten ausführen:

kubectl apply -f .

Applying the Checkmk manifests to deploy Checkmk in Kubernetes

Ob der Checkmk-Pod erfolgreich gespawned wurde, können Sie anschließend mit kubectl get pods -n checkmk überprüfen.

Checking via command line the state of the Checkmk pod

Damit haben Sie Checkmk erfolgreich in Kubernetes aufgesetzt. Gehen Sie zur URL, die Sie konfiguriert haben. Dort können Sie sich dann anmelden. Falls Sie die Zugangsdaten in der checkmk-server_secret-site-credentials.yaml nicht angepasst haben, lautet der Standard-Login cmkadmin // cmk

Um Ihren Kubernetes-Cluster zu überwachen, folgen Sie einfach den Anweisungen in unserem Handbuch zum Kubernetes-Monitoring.

4. Optional: Die anderen Manifeste

Sie fragen sich vielleicht, wofür die anderen vordefinierten Manifeste sind. Ein wichtiges Manifest ist zum Beispiel die checkmk-server_deployment.yaml.

Deployment manifest for Checkmk

Ob der Checkmk-Pod erfolgreich gespawned wurde, können Sie anschließend mit kubectl get pods -n checkmk überprüfen.

Container registry tags explained

Im Moment gibt check-mk-enterprise:2.0.0-latest den letzten Daily Build von Version 2.0.0 aus. Dieser wird von uns jedoch nicht auf Stabilität getestet. Wir planen jedoch, dass dieser Tag künftig die letzte Patch-Version von 2.0.0 ausgibt.

Sie können hier auch Limits setzen, was wir für Checkmk jedoch nicht empfehlen, da je nach Überwachungslast insbesondere der Arbeitsspeicher deutlich in die Höhe gehen kann.

Wenn sie kein persistentes Volume in Ihrem Cluster haben, können Sie die kommentierten Zeilen 75 & 76 verwenden. Dies führt jedoch dazu, dass Sie bei einem Neustart des Pods die Monitoring-Konfiguration und -Daten verlieren.

Deployment-Manifest mit persistenten Storage

Hier ist eine kurze Übersicht der verbleibenden Manifeste:

  • 00-namespace.yaml: Erzeugt den Namespace Checkmk. Das Manifest beginnt mit 00, damit es als erstes ausgeführt wird. Ändern Sie dies nur, wenn Sie Checkmk in einem anderen Namespace ausführen wollen. In diesem Fall müssen Sie jedoch alle anderen Manifeste ebenfalls ändern.
  • checkmk-monitoring_rbac.yaml: Damit wird ein Service-Account, eine ClusterRole und ein ClusterRoleBinding angelegt, die man für das Kubernetes-Monitoring über die Kubernetes-API benötigt. Idealerweise sollten Sie dies nicht ändern.
  • checkmk-server_configmap.yaml: Hier können Sie den Namen Ihrer Checkmk-Site ändern.
  • checkmk-server_network-policy.yaml: Das Manifest wird benötigt, wenn Sie eine Netzwerkrichtlinie in Ihrem Cluster verwenden.
  • checkmk-server_persistent-volume-claim.yaml: In der Datei sollten Sie den StorageClassName und den Speicherplatz ändern.
  • checkmk-server_secret-site-credentials.yaml: Mit der Datei wird das Standardpasswort für den Login in Ihre Checkmk-Site festgelegt. Das Passwort können Sie mit Hilfe des Kommentars in der Datei einfach ändern.
  • checkmk-server_service.yaml: Das Manifest ermöglicht es Ihnen, die Checkmk-Site über einen Port auf einem beliebigen, aktuell arbeitenden Knoten zu erreichen – falls Sie kein Ingress haben. Um den Port zu finden, verwenden Sie das Kommando kubectl get svc -n checkmk
    Als Ausgabe erhalten Sie anschließend etwas wie 80:31859/TCP. Den Port können Sie anschließend verwenden, um auf Checkmk zuzugreifen.

Ich wünsche Ihnen viel Spaß beim Ausprobieren von Checkmk in Kubernetes. Sie haben damit außerdem eine hervorragende Möglichkeit, Entwicklungszweige von Checkmk zum Testen von neuen Funktionen auszuprobieren, da Sie Instanzen problemlos erstellen und wieder löschen können.

Bitte kontaktieren Sie uns, wenn Sie Ideen oder Kommentare haben. Sie können uns auch Pull-Requests senden, wenn Sie Vorschläge für Verbesserungen haben. Kubernetes ändert sich schnell, daher ist die Wahrscheinlichkeit groß, dass die Manifeste für Ihre Version vielleicht nicht funktionieren. Ist dies der Fall, melden Sie sich bitte ebenfalls bei uns.

Happy monitoring!