Kubernetes


Über Kubernetes Cluster

Die Benutzerplattform unterstützt eine einfache Art der Definition, Bereitstellung und Verwaltung von Kubernetes Clustern. Die Cluster werden durch reguläre Rechenressourcen (Instanzen) aufgebaut. Im Gegensatz zu einem manuellen Kubernetes Deployment müssen die erforderlichen Schritte wie die Erstellung der Instanz, die Verbindung zu einem Netzwerk, die Definition von Rollen, der Download und die Installation der Software, nicht separat durchgeführt werden. In der Cloud-Plattform wird ein voll funktionsfähiger Kubernetes Cluster durch eine einzige Operation deployed und kann danach umgehend genutzt werden um containerbasierte Anwendungen bereitzustellen.

Wenn Sie einen Cluster definieren, müssen Sie eine Reihe von Parametern angeben:

  • Cluster Name. Benutzerdefinierte Name des Kubernetes Cluster.
  • Image, das für die Erstellung von Master und Slave-Knoten verwendet werden soll. Beachten Sie, dass der Kubernetes-Dienst darauf ausgelegt ist, mit speziellen Images zu arbeiten, so dass die Auswahl von passenden Images sich von der normalen Instanz-Erstellung unterscheidet
  • Master-Flavor. Die empfohlene Konfiguration hängt von der Anzahl der Knoten (Slaves) in Ihrem Cluster ab. Bei Clustern mit bis zu 5 Knoten werden mindestens eine CPU und 4GB RAM empfohlen. Für 6-10 Knoten wählen Sie Zwei CPUs und 8GB RAM . Größere Cluster (bis zu 100 Knoten) erfordern möglicherweise 4CPUS und 16GB RAM auf dem Master.
  • Slave (Knoten) Flavor. Der Flavor, der die minimale Leistung definiert, hängt von der Größe und Anzahl der Anwendungen ab, die Sie im Cluster ausführen möchten. Da Sie Ihren Cluster auch horizontal skalieren können (indem Sie weitere Slaves hinzufügen), ist eine performanter Flavor nicht immer für eine große Anwendung erforderlich - es muss nur groß genug sein, um einen oder mehrere Pods auszuführen. Beachten Sie jedoch, dass alle Slaves die gleiche Größe haben werden - Sie können nachträglich keine Slaves mit einem anderen Flavor zu Ihrem Cluster hinzufügen.
  • Netzwerk, mit dem Sie Ihre Clustermitglieder verbinden. Der Cluster wird öffentlich über Floating IPs erreichbar sein. Stellen Sie also sicher, dass Sie ein Netzwerk haben das über einen mit dem Internet verbundenen Router verfügbar ist
  • Benutzerdefinierte Registry URL (wenn nicht gesetzt, wird Ihr Cluster mit der öffentlichen Docker-Registry starten)
  • Anzahl von Master und Slaves. Für Testcluster können sie einen einzelnen Master verwenden, während für die Produktion 2 oder mehr Master für eine Redundanz empfohlen werden. Die Anzahl der Slaves können Sie unter Berücksichtigung der Anforderungen Ihrer Anwendung festlegen

Erstellen von Kubernetes Cluster

Um einen neuen Cluster zu erstellen, klicken Sie auf "Kubernetes" im linken Navigationsbereich. Drücken Sie danach im geöffneten Fenster auf "Kubernetes Cluster erstellen". Geben Sie die Parameter wie oben beschrieben ein, und klicken Sie auf "Erstelle". Beachten Sie, dass aufgrund der Konfiguration, die während der Bereitstellung durchgeführt wird, eine Cluster-Erstellung erheblich länger dauern kann als die Erstellung einer einzelnen Instanz.

Verwalten von Kubernetes Clustern

In der Cluster-Liste können Sie die Cluster-Parameter ändern, indem Sie im Aktionsmenü auf den Eintrag "Cluster-Details" klicken. Von dort aus können Sie:

  • Parameter des Clusters einsehen (Name, IDs, IPs, verwendeter Flavor, etc.)
  • Die Cluster-API-URL einsehen, die in Verwaltungswerkzeugen und -Anwendungen genutzt werden kann
  • Anzahl der Knoten im Cluster ändern

Sie können einen Cluster, den Sie nicht mehr benötigen, auch entfernen, indem Sie im Aktionsmenü auf "Löschen" klicken.

Zugriff auf Kubernetes-Cluster mit kubectl

kubectl ist ein Standard Tool zur Verwaltung von Kubernetes. Sie können es durch die Verwendung verschiedener Methoden installieren, wie z.B. mit yum oder apt-get auf gängigen Linux-Distributionen, snap auf Ubuntu und homebrew auf MacOS. Weitere Informationen sind auf https://kubernetes.io/docs verfügbar.

Sobald kubectl installiert wurde, müssen Sie den Zugriff auf Ihren Cluster konfigurieren. Um dies zu tun, öffnen Sie zunächst die Cluster-Übersicht ("Zugriff" Tab) und laden Ihre kubeconfig herunter. Jetzt müssen Sie diese in Ihre kubectl einbinden. Hierfür gibt es zwei Wege: Erstens können Sie den Standardpfad unter welchem kubectl seine Konfiguration sucht eingeben - path ~/.kube/config Alternativ können Sie den Standardwert durch Definition einer KUBECONFIG Umgebungsvariable wie z.B. '$ export KUBECONFIG=/home/user/k8s/cluster1/config' überschreiben

Um sicherzustellen, dass alles wie gewünscht funktioniert, führen Sie folgendes Kommando aus:

$ kubectl get namespaces

wenn eine Liste von Namespaces ausgegeben wird, hat sich Ihr kubectl erfolgreich mit Ihrem Cluster verbunden und authentifiziert.

Zugriff auf Kubernetes-Cluster über ein Web-Dashboard

Kubernetes bietet auch ein Web-Dashboard zur Verwaltung Ihres Clusters über Web-UI. Um auf das Dashboard zuzugreifen, müssen Sie kubectl in einem Proxy-Modus ausführen, so hält es die API-Verbindung zu Ihrem Cluster aufrecht, während es selbst als ein Webserver lokal auf Ihrem Computer agiert.

Um kubectl Proxy auszuführen, führen Sie den folgenden Befehl aus:

$ kubectl proxy

Sie können auch das Zeichen "&" am Ende hinzufügen, um diesen Prozess im Hintergrund zu starten. Sobald der Proxy gestartet ist, ist Ihre Web-UI unter: http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ erreichbar.

Sie müssen auch ein sicheres Token zur Authentifizierung verwenden (die Authentifizierung mit kubeconfig wird nicht unterstützt). Um Ihr Token abzurufen, gehen sie wie folgt vor: Führen Sie zuerst einen Befehl aus, um den sicheren Namen zu erhalten, unter dem Ihr Token gespeichert ist:

$ kubectl -n kube-system get secret

Merken sie sich das Secret mit dem Namen "admin-token-xxxxx" in der Ausgabe, wobei xxxxx für verschiedene Cluster variieren wird. Führen Sie nun

$ kubectl -n kube-system describe secret admin-token-xxxxx

aus. Beachten Sie den Token-Inhalt (lange alphanumerische Zeichenfolge). Kopieren Sie ihn und fügen Sie ihn in Ihren Browser ein. Sie sollten nun in der Lage sein, sich erfolgreich an Ihrer Cluster-Web-UI anzumelden.

Persistenten Speicher verwenden

Ein persistentes Volume ermöglicht es Ihnen, ein Speichervolume mit einem Pod zu verbinden, wo die im Container ausgeführte Anwendung ihre Daten speichern kann. Wenn der Anwendungscontainer neu erstellt wird (bei einem Upgrade oder einem anderen Ereignis), wird der Container selbst gelöscht und erneut aus dem Image erstellt, das persistente Volume bleibt jedoch erhalten. Auf diese Weise kann die Anwendung persistente Daten lokal speichern (z. B. eine Datenbank oder andere Dateien), ohne dass die Gefahr besteht, dass diese versehentlich entfernt werden.

Ein Kubernetes-Volume sollte von jedem Knoten aus zugänglich sein, damit dort ein Pod geplant werden kann. Daher ist lokaler Speicher keine optimale Option für persistente Produktionsvolumen. Um die lokale Speicherbeschränkung zu umgehen, verwenden Sie reguläre Volume als Kubernetes-Speichervolume.

Um ein Volume mit einem Pod zu verwenden, erstellen Sie zuerst ein Volume und suchen Sie seine ID (entweder über das Portal oder die CLI). Nehmen wir an, die gefundene ID ist „b6da200d-2760-494c-8d4d-a03de08f0c38“. Verwenden Sie dann die folgende Syntax in Ihrer YAML-Datei, um ein solches Volume in einen Container aufzunehmen:

  volumes:
  - name: vol1
    # This OpenStack volume must already exist.
    cinder:
      volumeID: b6da200d-2760-494c-8d4d-a03de08f0c38
      fsType: ext4

Beispielsweise kann ein YAML-Beschreibungs-Pod basierend auf einem Ubuntu-Container, der ein Volume in das Verzeichnis „/myvol“ einbindet, folgendermaßen aussehen:

apiVersion: v1
kind: Pod
metadata:
  name: test-volume
spec:
  containers:
  - image: ubuntu:18.04
    name: my-application
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 30; done;"]
    volumeMounts:
    - mountPath: /mywol
      name: vol1
  volumes:
  - name: vol1
    # This OpenStack volume must already exist.
    cinder:
      volumeID: b6da200d-2760-494c-8d4d-a03de08f0c38
      fsType: ext4

Beachten Sie, dass es sich bei solchen Volumes um reguläre Block-Speicher handelt, die lokal auf den Knoten bereitgestellt werden. Sie unterstützen nur den ReadWriteOnce-Modus (siehe https://kubernetes.io/docs/concepts/storage/persistent-volumes/ für mehr Details). Sie können dasselbe Volume nicht gleichzeitig auf mehreren Pods mounten.