Apache Superset mit Ubuntu MicroK8s Single Node Kubernetes

Kubernetes wird oft mit weitläufigen Clustern und komplexen verteilten Systemen assoziiert. Und obwohl seine Stärke zweifellos in großen Bereitstellungen liegt, wussten Sie, dass Sie Kubernetes auf Ubuntu effektiv auf einem einzelnen Knoten betreiben können, ähnlich wie Sie Docker verwenden würden? Dieser Ansatz reduziert die Komplexität erheblich und ist somit ein idealer Ausgangspunkt für Entwickler, Tester oder sogar kleine Produktionsumgebungen. Auf Ubuntu ist die einfachste und effizienteste Art, Single Node Kubernetes zum Laufen zu bringen, mit MicroK8s. In diesem Beitrag führen wir Sie durch die Installation von MicroK8s auf einem einzelnen Ubuntu-Server und stellen dann ein leistungsstarkes BI-Tool, Apache Superset, bereit, um seine Fähigkeiten zu demonstrieren.


Warum MicroK8s für Single-Node Kubernetes?

MicroK8s, bereitgestellt von Canonical (den Entwicklern von Ubuntu), bietet eine leichte, vollständig konforme Kubernetes-Distribution. Es ist unglaublich einfach zu installieren und zu verwalten, was es perfekt für die lokale Entwicklung, IoT und Edge-Computing-Szenarien macht, wo ein ausgewachsener Multi-Node-Cluster überdimensioniert wäre. Es ist wirklich die beste Wahl, wenn Sie Kubernetes auf einem einzigen Node nutzen möchten.


Installation: MicroK8s zum Laufen bringen

Der Installationsprozess für MicroK8s nutzt Snap, das universelle Paketverwaltungssystem von Ubuntu. Der Schlüssel hierbei ist die Auswahl des richtigen „Kanals“ für Ihre Installation.

Überprüfen Sie zunächst die verfügbaren Kanäle:

snap info microk8s

Sie werden in der Regel den neuesten stable-Kanal wählen wollen. Snap übernimmt dann automatisch kleinere Updates innerhalb dieses Kanals (z. B. von 1.33.0 auf 1.33.1). Es wird generell nicht empfohlen, den latest-Kanal zu verwenden, da dieser häufiger bahnbrechende Änderungen einführen kann.

Um MicroK8s zu installieren, verwenden Sie den folgenden Befehl, wobei Sie 1.xx durch Ihre gewünschte stabile Version ersetzen (z. B. 1.30/stable):

sudo snap install microk8s --classic --channel=1.xx/stable

Nach Abschluss der Installation können Sie den Status überprüfen:

microk8s status

Dies zeigt Ihnen, welche Komponenten laufen und ob MicroK8s einsatzbereit ist.


Wichtige Addons aktivieren

MicroK8s wird mit einer Reihe nützlicher Addons geliefert, die einfach aktiviert werden können. Für unsere Superset-Bereitstellung benötigen wir einige davon:

  • Helm: Ein Paketmanager für Kubernetes, der die Bereitstellung von Anwendungen vereinfacht.
  • Hostpath-Storage: Ermöglicht die Speicherung persistenter Volumes direkt auf dem Host-Rechner. Standardmäßig befinden sich diese Volumes unter /var/snap/microk8s/common/default-storage/.
  • Ingress: Verwaltet den externen Zugriff auf Dienste innerhalb des Clusters und ermöglicht das Routing von HTTP/S-Verkehr.
  • Cert-Manager: Automatisiert die Verwaltung und Ausstellung von SSL/TLS-Zertifikaten.

Aktivieren Sie diese mit den folgenden Befehlen:

microk8s enable helm
microk8s enable hostpath-storage
microk8s enable ingress
microk8s enable cert-manager

Damit der Cert-Manager automatisch Zertifikate für Ingress-Ressourcen beziehen kann, müssen Sie einen ClusterIssuer erstellen. Dies geschieht typischerweise mit einer YAML-Datei, die Ihre gewählte Zertifizierungsstelle (z. B. Let’s Encrypt) definiert.


Arbeitsabläufe optimieren: Kubectl & Helm Aliase

Die meisten Kubernetes- und Helm-Tutorials gehen davon aus, dass die Befehle kubectl und helm direkt verfügbar sind. MicroK8s bietet eigene Versionen (microk8s.kubectlmicrok8s.helm). Um Ihnen das Leben zu erleichtern und gängiger Dokumentation zu folgen, erstellen Sie Aliase:

Bash

sudo snap alias microk8s.kubectl kubectl
sudo snap alias microk8s.helm helm

Jetzt können Sie kubectl und helm direkt verwenden!


Apache Superset BI bereitstellen: Ein praktisches Beispiel mit MicroK8s

Nachdem unsere Single-Node Kubernetes-Umgebung bereit ist, wollen wir Apache Superset bereitstellen, eine Open-Source-Business-Intelligence- und Datenvisualisierungsplattform.

1. Umgebung vorbereiten und Superset Helm Chart herunterladen

Erstellen Sie zunächst ein Verzeichnis für Ihre Kubernetes-Konfigurationen und fügen Sie das Superset Helm Repository hinzu:

mkdir /kubernetes && cd /kubernetes
helm repo add superset https://apache.github.io/superset

Als Nächstes ziehen Sie das Superset Helm Chart und extrahieren dessen Inhalt:

helm pull superset/superset
tar xfvz superset-*.tgz
cd /kubernetes/superset

2. Helm Chart konfigurieren

Helm Charts verwenden values.yaml-Dateien für die Konfiguration. Es ist bewährte Praxis, diese Datei zu kopieren und Ihre Änderungen in einer neuen Datei vorzunehmen, um das Original als Referenz zu behalten:

cp -a values.yaml my-values.yaml

Öffnen Sie nun my-values.yaml mit Ihrem bevorzugten Texteditor. Wir müssen mehrere Einstellungen anpassen, damit Superset korrekt funktioniert.

Datenbanktreiber

Superset wird nicht mit vorinstallierten Datenbanktreibern geliefert. Sie müssen im Abschnitt bootstrapScriptangeben, welche Sie benötigen, abhängig von den Datenbanken, zu denen Sie eine Verbindung herstellen möchten. Zum Beispiel, um eine Verbindung zu PostgreSQL und MySQL herzustellen:

bootstrapScript: |
  #!/bin/bash
  pip install .[postgres] \
  pip install .[mysql]
  if [ ! -f ~/bootstrap ]; then echo "Running Superset with uid {{ .Values.runAsUser }}" > ~/bootstrap; fi

Eine vollständige Liste der verfügbaren Treiber finden Sie in der offiziellen Superset-Dokumentation.

Benutzerdefinierten Secret Key erstellen

Aus Sicherheitsgründen müssen Sie einen eindeutigen SECRET_KEY generieren. Verwenden Sie den folgenden Befehl, um einen starken Schlüssel zu generieren:

openssl rand -base64 42

Aktualisieren Sie dann den Abschnitt secret innerhalb von configOverrides in Ihrer my-values.yaml:

configOverrides:
  my_override: |
    # This will make sure the redirect_uri is properly computed, even with SSL offloading
    ENABLE_PROXY_FIX = True
    FEATURE_FLAGS = {
        "DYNAMIC_PLUGINS": True
    }
  secret: |
    # Generate your own secret key for encryption. Use `openssl rand -base64 42` to generate a good key
    SECRET_KEY = 'IHR_GENERIERTER_SECRET_KEY_HIER' # <--- DIESEN ERSETZEN
Ingress-Konfiguration

Um auf Superset über Ihren Browser zuzugreifen, konfigurieren Sie Ingress. Dieser Abschnitt ermöglicht den externen Zugriff und integriert sich mit Cert-Manager für SSL. Denken Sie daran, example.domain.com durch Ihre tatsächliche Domain zu ersetzen.

ingress:
  enabled: true
  ingressClassName: ~ # Verwenden Sie ~ damit der MicroK8s Ingress Controller dies verwaltet
  annotations:
    cert-manager.io/issuer: "letsencrypt" # Angenommen, Sie haben einen ClusterIssuer namens 'letsencrypt'
    ## Extend timeout to allow long running queries.
    # nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    # nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    # nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
  path: /
  pathType: ImplementationSpecific
  hosts:
    - example.domain.com # <--- DIESEN ERSETZEN
  tls:
    - secretName: example-tls # <--- DIESEN ERSETZEN
      hosts:
        - example.domain.com # <--- DIESEN ERSETZEN
  extraHostsRaw: []
Datenbank-Passwörter

Apache Superset verwendet eine eigene PostgreSQL-Datenbank. Sie müssen dasselbe Passwort an zwei Stellen in my-values.yaml festlegen:

Unter supersetNode:

supersetNode:
  connections:
    db_pass: IHR_DB_PASSWORT # <--- DIESES ERSETZEN

Und unter postgresql:

postgresql:
  auth:
    password: IHR_DB_PASSWORT # <--- DIESES ERSETZEN
Web-Admin-Passwort

Legen Sie schließlich ein Passwort für den Superset-Web-Administrationsbenutzer fest:

init:
  adminUser:
    password: IHR_ADMIN_PASSWORT # <--- DIESES ERSETZEN

3. Apache Superset installieren

Nachdem alle notwendigen Konfigurationen in my-values.yaml vorgenommen wurden, können Sie Superset nun mit Helm installieren:

helm upgrade --install --values my-values.yaml superset superset/superset

Dieser Befehl wird Superset in Ihrem Single-Node MicroK8s-Cluster bereitstellen. Sie können den Fortschritt der Bereitstellung mit kubectl get pods und kubectl get ingress überwachen. Sobald alles läuft und Ihr DNS auf die IP-Adresse Ihres Servers zeigt, sollten Sie Apache Superset über die in Ingress konfigurierte Domain erreichen können.


Fazit

Sie haben erfolgreich eine Single-Node Kubernetes-Umgebung mit MicroK8s auf Ubuntu eingerichtet und eine komplexe Anwendung wie Apache Superset bereitgestellt. Dies demonstriert die Leistungsfähigkeit und Flexibilität von Kubernetes, selbst in einem vereinfachten Setup. Von hier aus können Sie weitere Anwendungen erkunden, tiefer in Kubernetes-Konzepte eintauchen und Ihre Reise in die Welt der Container-Orchestrierung fortsetzen!

Wenn Sie Fragen haben oder eine Beratung wünschen, sprechen Sie uns gerne an.

Weitere interessante Artikel zum Thema Kubernetes finden Sie hier.