So verwenden Sie die Befehlszeilenschnittstelle für Kubernetes-Cluster auf CODE-DE OpenStack Magnum

In diesem Artikel werden Sie das Command Line Interface (CLI) verwenden, um schnell Kubernetes-Clustern auf OpenStack Magnum-Servern zu erstellen und zu testen.

Was wir behandeln werden

  • Die Vorteile der Verwendung von CLI gegenüber der grafischen Schnittstelle von Horizon

  • Debugging von OpenStack- und Magnum-Befehlen

  • Wie man eine neue Kubernetes-Cluster-Vorlage mit CLI erstellt

  • Erstellen eines neuen Kubernetes-Clusters mit CLI

  • Gründe, warum die Erstellung des Clusters fehlschlagen kann

  • CLI-Befehle zum Löschen eines Clusters

Voraussetzungen

No. 1 Konto

Sie benötigen ein Hosting-Konto mit Horizon-Schnittstelle https://cloud.fra1-1.cloudferro.com/auth/login/?next=/.

No. 2 Privater und öffentlicher Schlüssel

Ein SSH-Schlüsselpaar, das im OpenStack Dashboard erstellt wurde. Um es zu erstellen, folgen Sie diesem Artikel Wie erstellt man ein Schlüsselpaar im OpenStack Dashboard?. Sie haben ein Schlüsselpaar mit dem Namen sshkey erstellt, das Sie auch für dieses Tutorial verwenden können.

Nr. 3 Befehlsstruktur der OpenStack-Client-Befehle

Hier ist das Handbuch für OpenStackClient-Befehle: Command Structure Xena version.

Nr. 4 Befehlsliste der OpenStack-Client-Befehle

Dies sind alle Befehle, die von der Xena-Version von OpenStackClient unterstützt werden: Xena Command List.

Nr. 5 Dokumentation für Magnum-Client

Dies sind alle Befehle, die von der Xena-Version von MagnumClient unterstützt werden: Magnum User Guide.

Nr. 6 Wie man OpenStack und Magnum Clients installiert

Der Schritt, der diesem Artikel unmittelbar vorausgeht, ist: Installation von OpenStack- und Magnum-Clients für die Befehlszeilenschnittstelle von CODE-DE Horizon.

In dieser Anleitung haben Sie das CLI installiert und in diesem Tutorial werden Sie es verwenden, um mit Kubernetes auf OpenStack Magnum zu arbeiten.

Nr. 7 Autohealing von Kubernetes-Clustern

Um mehr über Autohealing von Kubernetes-Clustern zu erfahren, folgen Sie diesem offiziellen Artikel What is Magnum Autohealer?.

Die Vorteile der Verwendung der CLI

Sie können die CLI und die Horizon-Oberfläche austauschbar verwenden, aber es gibt mindestens drei Vorteile bei der Verwendung der CLI.

Reproduzieren von Befehlen durch Ausschneiden und Einfügen

Hier ist ein Befehl zum Auflisten von Flavors im Systemm

openstack flavor list
../_images/flavors_list.png

Wenn Sie diese Zeile in einer Texteditor-App gespeichert haben, können Sie sie nach Belieben reproduzieren. Um die Liste der Flavors mit Horizon zu erhalten, müssen Sie dagegen auf eine Reihe von Schaltflächen auf dem Bildschirm klicken

Compute => Instances => Launch instance => Flavor

um erst dann die Liste der zur Auswahl stehenden Flavors zu erhalten:

../_images/horizon_flavors.png

Ein weiterer Vorteil ist, dass durch die Speicherung der Befehle in einem Texteditor automatisch eine Dokumentation für den Server und den Cluster erstellt wird.

CLI-Befehle können automatisiert werden

Sie können die vorhandene Automatisierung nutzen. Das Ergebnis der folgenden Ubuntu-Pipeline ist die Url für die Kommunikation von kubectl mit dem Kubernetes-Cluster:

../_images/kubernetes_url.png

Sie können zwei Befehle in einem einzigen zusammengefassen:

KUBERNETES_URL=$(openstack coe cluster show k8s-cluster
   | awk '/ api_address /{print $4}')

Das Ergebnis des ersten Befehls

openstack coe cluster show k8s-cluster

ist eine Reihe von Zeilen, die mit dem Namen des Parameters beginnen, gefolgt von dem tatsächlichen Wert.

../_images/api_address.png

Die zweite Anweisung, rechts neben dem Pipeline-Symbol |

awk '/ api_address /{print $4}')

sucht nach der Zeile, die mit api_address beginnt, und extrahiert ihren Wert https://64.225.132.135:6443. Das Endergebnis wird in die Systemvariable KUBERNETES_URL exportiert, wodurch es automatisch für die Verwendung durch den Kubernetes-Cluster-Befehl kubectl beim Zugriff auf die Cloud eingerichtet wird.

CLI ermöglicht den Zugriff auf alle vorhandenen OpenStack- und Magnum-Parameter

CLI-Befehle bieten Zugriff auf eine größere Anzahl von Parametern als in Horizon. In Horizon beträgt die standardmäßige Zeitspanne für die Erstellung eines Clusters beispielsweise 60 Minuten, während Sie in der Befehlszeilenschnittstelle andere Werte festlegen können.

Debuggen von OpenStack- und Magnum-Befehlen

Um zu sehen, was tatsächlich im Hintergrund passiert, wenn Client-Befehle ausgeführt werden, fügen Sie den Parameter –debug hinzu:

openstack coe cluster list --debug

Die Ausgabe wird mehrere Bildschirme lang sein und aus GET- und POST-Webaufrufen bestehen, wobei Dutzende von Parametern auf dem Bildschirm angezeigt werden. (Die Ausgabe ist zu umfangreich, um sie hier wiederzugeben.)

So geben Sie OpenStack-Befehle ein

Bemerkung

Im folgenden Beispiel wird die Version fedora-coreos-34.20210904.3.0 der Fedora-Images verwendet. Da das System mit der Zeit aktualisiert wird, können sich die tatsächlichen Werte ändern, zum Beispiel einer der Werte fedora-coreos-35 oder fedora-coreos-33.20210426.3.0. Verwenden Sie den Horizon-Befehl Compute -> Images, um zu sehen, welche Fedora-Images derzeit verfügbar sind, und bearbeiten und ersetzen Sie diese dann nach Bedarf.

Es gibt mehrere Möglichkeiten, Openstack-Befehle in die Terminal-Befehlszeilenschnittstelle zu schreiben und einzugeben.

Eine Möglichkeit besteht darin, den Befehl openstack einzugeben und Enter auf der Tastatur zu drücken. Sie gelangen in den Zeilenmodus des Befehls openstack und können Zeile für Zeile verschiedene Openstack-Parameter eingeben. Dies ist ausschließlich für die manuelle Dateneingabe gedacht und lässt sich nur schwer automatisieren.

../_images/ku_openstack_line_entry.png

Geben Sie quit ein und drücken Sie Enter auf der Tastatur, um diesen Modus zu verlassen.

Die übliche Art der Eingabe von Openstack-Parametern erfolgt in einer einzigen langen Zeile. Lassen Sie Leerzeichen zwischen den Parametern, aber geben Sie die Werte der Bezeichnungen ohne Leerzeichen dazwischen ein. Zum Beispiel so:

../_images/ku_long_line.png

Die Zeilenumbrüche und Leerzeichen müssen in diesem Fall manuell entfernt werden.

Ein eleganterer Weg ist die Verwendung des Backslash-Zeichens \ im Zeilentext. Das Zeichen nach dem Backslash wird nicht berücksichtigt. Wenn Sie es also ganz am Ende der Zeile eingeben, wird das EOL-Zeichen vermieden und die erste und die zweite Zeile werden als eine durchgehende Zeile behandelt. Das ist genau das, was Sie wollen. Hier sehen Sie, wie eine Eingabezeile mit diesem Ansatz aussehen könnte:

openstack coe cluster template create kubecluster \
--image "fedora-coreos-34.20210904.3.0" \
--external-network external \
--master-flavor eo1.large \
--flavor eo1.large \
--docker-volume-size 50 \
--network-driver calico \
--docker-storage-driver overlay2 \
--master-lb-enabled \
--volume-driver cinder \
--labels boot_volume_type=,boot_volume_size=50,kube_tag=v1.18.2,availability_zone=nova \
--coe kubernetes -f value -c uuid

Das Ende jeder Zeile wird durch einen Backslash eingeleitet, so dass alle diese Zeilen dem Terminal-Befehlszeilen-Scanner als eine (lange) Zeile erscheinen. Beim Kopieren und Einfügen in die Terminal-Zeile ist jedoch folgende Situation zu beachten:

../_images/ku_blanks.png

Wenn die Leerzeichen am Anfang jeder Zeile stehen, ist das ein Problem. Beseitigen Sie diese, indem Sie einen beliebigen Texteditor aufrufen und sie entweder manuell oder über die Ersetzen-Funktion entfernen. Was Sie im Texteditor brauchen, ist dies:

../_images/ku_no_blanks.png

Nun können Sie ihn kopieren und in die Terminal-Befehlszeile einfügen:

../_images/ku_blanks_ok.png

Sie bemerken, dass die Zeile mit Labels lang werden kann und ihr rechter Teil auf dem Bildschirm nicht mehr sichtbar ist. Verwenden Sie \ und neue Zeile, um die lange Zeile **–labels in mehrere kürzere Zeilen zu unterteilen:

../_images/ku_labels_broken.png

Durch Drücken von Enter auf der Tastatur wird dieser gesamte Befehl aktiviert und vom System akzeptiert, wie Sie in der Zeile unter dem Befehl sehen können.

Warnung

Wenn Sie neu in Kubernetes sind, erstellen Sie Cluster zunächst nur direkt mit der Standard-Cluster-Vorlage. Sobald Sie mehr Erfahrung gesammelt haben, können Sie Ihre eigenen Cluster-Vorlagen erstellen. Hier erfahren Sie, wie Sie dies mit der CLI tun.

OpenStack-Befehl zur Erstellung eines Clusters

In diesem Schritt können Sie einen neuen Cluster erstellen, indem Sie entweder die Standard-Cluster-Vorlage oder eine der Vorlagen verwenden, die Sie bereits erstellt haben.

Geben Sie

openstack coe cluster create -h

ein, um die Parameter anzuzeigen. Geben Sie alle oder fast alle der erforderlichen Parameter an.

usage: openstack coe cluster create
[-h]
--cluster-template <cluster-template>
[--discovery-url <discovery-url>]
[--docker-volume-size <docker-volume-size>]
[--labels <KEY1=VALUE1,KEY2=VALUE2;KEY3=VALUE3...>]
[--keypair <keypair>]
[--master-count <master-count>]
[--node-count <node-count>]
[--timeout <timeout>]
[--master-flavor <master-flavor>]
[--flavor <flavor>]
<name>

So könnte ein solcher Befehl aussehen:

openstack coe cluster create
   --cluster-template k8s-stable-1.23.5
   --docker-volume-size 50
   --labels eodata_access_enabled=false,floating-ip-enabled=true,
   --merge-labels
   --keypair sshkey
   --master-count 3
   --node-count 2
   --timeout 190
   --master-flavor eo1.large
   --flavor eo1.large
   newcluster

Warnung

Wenn Sie die Standard-Cluster-Vorlage k8s-stable-1.23.5 verwenden, müssen Sie das Label master-lb-enabled=true nicht angeben, da der Master-Load-Balancer immer mit der Standard-Cluster-Vorlage erstellt wird. Die einzige Möglichkeit, den Master-Load-Balancer nicht mit der Standardvorlage zu erstellen, ist die Angabe des Flags –master-lb-disabled. Auch die Verwendung von master-lb-enabled=false mit anschließendem –merge-labels funktioniert nicht, d.h. es wird nicht verhindert, dass der Master-LB erstellt wird.

Hier sind einige spezielle Etiketten, deren Funktionalität nur über CLI und nicht auch über Horizon verfügbar ist.

Wie man einen Cluster mit aktivierter Auto-Healing-Funktion richtig bildet

Bemerkung

Voraussetzung Nr. 6 zeigt Ihnen, wie Sie die Befehlszeilenschnittstelle mit Ihrem Cloud-Server aktivieren. Voraussetzung Nr. 7 gibt Ihnen eine formale Einführung in das Konzept des Kubernetes-Autohealing, wie es in OpenStack Magnum implementiert ist.

Die einzige Möglichkeit, die Auto-Healing-Funktion einzuschalten und gleichzeitig zu gewährleisten, dass der Cluster normal gebildet wird, besteht darin, das folgende Label einzurichten:

auto_healing_enabled=True

Warnung

Fügen Sie die obige Bezeichnung nicht ein, wenn Sie einen Cluster ohne Auto-Healing erstellen möchten..

Hier ist eine Variation des CLI-Befehls zur Erstellung eines Clusters. Es werden mittlere Werte anstelle von großen für Flavors verwendet, es gibt nur einen Master- und einen Worker-Knoten, Auto-Healing ist aktiviert usw.

openstack coe cluster create –cluster-template k8s-stable-1.23.5 –labels floating-ip-enabled=true,master-lb-enabled=true,auto_healing_enabled=true –merge-labels –keypair sshkey –master-count 1 –node-count 1 –master-flavor eo1.medium –flavor eo1.medium newcluster

Ausführen des Befehls zur Erstellung eines Clusters

Kopieren Sie den obigen Befehl und fügen Sie ihn in das Terminal ein, in dem OpenStack- und Magnum-Clients aktiv sind:

../_images/cli_newcluster.png

So überprüfen Sie den Status des Clusters

Der Befehl zum Anzeigen des Status von Clustern lautet

openstack coe cluster list

newcluster befindet sich im Status CREATE_IN_PROGRESS, d.h. er wird im Hintzergrund erstellt. Wiederholen Sie den Befehl nach ein oder zwei Minuten und sehen Sie den neuesten Status, der jetzt CREATE_FAILED lautet. Um zu sehen, warum die Erstellung des Clusters abgebrochen wurde, gehen Sie zur Horizon-Benutzeroberfläche, listen Sie die Cluster auf und klicken Sie auf den Namen von newcluster.

Unter Stack erscheint eine Meldung wie diese:

Resource CREATE failed: OverQuotaClient: resources.secgroup_kube_master: Quota exceeded for resources:
['security_group_rule']. Neutron server returns request_ids: ['req-1aff5045-db64-4075-81df-80611db8cb6c']

Die Quote für die Regeln der Sicherheitsgruppe wurde überschritten. Um dies zu überprüfen, führen Sie folgenden Befehl aus:

openstack quota show --default

Das Ergebnis kann in einem normalen Terminalfenster zu unübersichtlich sein, so dass in diesem Fall mehr Informationen über die Horizon-Schnittstelle verfügbar sind:

../_images/overview.png

Rote und orange Farben bedeuten Gefahr, und Sie müssen entweder den Support bitten, Ihre Quoten zu verdoppeln oder die Instanzen und Cluster zu löschen.

Bemerkung

Es würde den Rahmen dieses Artikels sprengen, das Löschen von Elementen über die Horizon-Schnittstelle zu beschreiben. Stellen Sie sicher, dass vor der Erstellung eines neuen Clusters Quoten verfügbar sind.

Fehler bei der Erstellung eines Clusters

Es gibt viele Gründe, warum ein Cluster nicht erstellt werden kann. Möglicherweise ist der Zustand der Systemkontingente nicht optimal oder es gibt eine Diskrepanz zwischen den Parametern des Clusters und den Parametern im Rest der Cloud. Wenn Sie beispielsweise bei der Erstellung eines Clusters die Standard-Cluster-Vorlage zugrunde legen, wird dieser die Fedora-Distribution verwenden und 10 GiB Speicher benötigen. Dies kann zu Konflikten mit –docker-volume-size führen, wenn dieser auf mehr als 10 GiB eingestellt wurde.

Die Flavors für Master und Minions sind eo1.large. Wenn Sie ein größeres Docker-Image wünschen, erhöhen Sie die Größe des –master-flavor.

Die gesamte Cloud kann überlastet sein und die Erstellung des Clusters kann länger als die standardmäßigen 60 Minuten dauern. Setzen Sie in solchen Fällen den Parameter –timeout auf 120 oder 180 Minuten.

Wenn der Erstellungsprozess vorzeitig fehlgeschlagen ist, dann

  • Systemquoten überprüfen

  • den/die fehlgeschlagenen Cluster löschen

  • die Systemquoten erneut überprüfen

  • ändern Sie die Parameter und

  • führen Sie den Befehl zur Erstellung von Clustern erneut aus.

CLI-Befehle zum Löschen eines Clusters

Wenn der Cluster nicht erstellt werden konnte, beansprucht er immer noch Systemressourcen. Löschen Sie ihn mit einem Befehl wie

openstack coe cluster delete

Wenn Sie die Cluster auflisten, sehen Sie zunächst, dass der Status DELETE_IN_PROGRESS lautet, und nach einer Weile wird der newcluster verschwinden.

Versuchen Sie nun, den Cluster largecluster zu löschen. Es gibt zwei davon, also geben Sie einen Befehl wie

openstack coe cluster delete largecluster

wird nicht akzeptiert. Geben Sie anstelle des Namens den Wert uuid ein:

openstack coe cluster delete e80c5815-d20b-4a2b-8588-49cf7a7e1aad

Diese Anfrage wird angenommen und nach ein oder zwei Minuten verschwindet der gewünschte Cluster.

Jetzt gibt es nur noch einen largecluster, so dass dieses Kommando funktionieren wird:

openstack coe cluster delete largecluster

Das Löschen von Clustern, die nicht ordnungsgemäß installiert wurden, hat eine erhebliche Menge an Systemressourcen freigesetzt. Es gibt keine orangefarbenen und roten Quoten mehr:

../_images/after_delete_cluster.png

In diesem Schritt haben Sie die Cluster, deren Erstellung vorzeitig abgebrochen wurde, erfolgreich gelöscht und damit den Weg für die Erstellung des nächsten Clusters unter etwas anderen Bedingungen geebnet.

Was als nächstes zu tun ist

In diesem Tutorial haben Sie die CLI-Befehle verwendet, um Cluster-Vorlagen und Cluster selbst zu erstellen. Wenn der Cluster-Prozess fehlgeschlagen ist, wurde gezeigt, wie Sie die Systemressourcen freigeben und es erneut versuchen können.

OpenStack und Magnum ermöglichen es Ihnen, vollwertige Kubernetes-Cluster mit nur einer Handvoll CLI-Befehle zu erstellen. Der nächste Schritt besteht darin, direkt mit den Kubernetes-Clustern zu arbeiten. Dazu installieren Sie den Befehl kubectl mit dem Artikel Zugriff auf Kubernetes-Cluster nach der Bereitstellung mit Kubectl auf CODE-DE OpenStack Magnum und installieren damit die Anwendungen, die Sie auf Kubernetes-Clustern ausführen möchten.