b'nerd GmbH b'nerd GmbH

Erste Schritte Erste Schritte mit kubectl

Eine Übersicht über die wichtigsten Funktionen und Befehle.

Erste Schritte

Die Kommandozeilen-Anwendung kubectl ist sozusagen der all-in-one Werkzeugkasten im Kubernetes Cluster. In diesem Artikel geben wir einen Überblick und zeigen, wie man mithilfe von kubectl mit der Kubernetes-API interagiert, um Objekte wie Pods, ReplicaSets oder Services zu erstellen, untersuchen, verwalten oder zu löschen.

Zuerst gehen wir auf die Installation ein und erklären dann im Anschluss die Grundlagen der kubectl-Syntax, anhand einiger oft verwendeter Befehle.

Installation

Tools wie kubectl sind gegenüber der Kubernetes-API vorwärts und rückwärts kompatibel, solange der Unterschied nicht mehr als zwei Minor-Verionen beträgt. Wir empfehlen trotzdem, eine kubectl-Version zu installieren, die nicht älter ist, als die des auf dem Server installierten Kubernetes. Das beugt möglichen Problemen vor.

Eine Installation auf Linux-Distributionen wie Ubuntu kann entweder über einen der gängigen Paketmanager (z.B. snap) oder über ein Binary via curl erfolgen:

1) Installation über den Snap Paketmanager:

sudo snap install kubectl --classic

anschließend prüfen, ob die Installation erfolgreich war.

kubectl version

2) Download und Installation mit Curl

Zuerst die aktuelle Version herunterladen:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

Dann das Binary über die checksum-Datei validieren:

curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check

Ist die Validierung erfolgreich, sollte man folgende Ausgabe erhalten:

kubectl: OK

kubectl kann installiert werden:

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

Abschließend prüfen, ob die Installation erfolgreich war:

kubectl version --client

Syntax und Grundlagen

kubectl-Befehle sind immer nach dem folgenden Schema aufgebaut:

kubectl [Command][TYPE][NAME][flags]

Command: spezifiziert welche Operation ausgeführt werden soll. Häufig genutzte Commands sind zum Beispiel get, describe, apply oder delete.

TYPE: legt fest, für welche Art von Ressourcen eine bestimmte Aktion durchgeführt werden soll. Das können u.a. Deployments, Pods, Nodes oder auch Services sein.

NAME: Über NAME können wir die Aktionen eindeutig einer bestimmten Ressource zuweisen. Hier muss aber unbedingt auf Groß- und Kleinschreibung geachtet werden. "niginx-depl" und "Nginx-depl" sind beispielsweise nicht dieselbe Ressource.

flags: haben, ähnlich wie in der Kommandozeile die Funktion, das Verhalten der Befehle zu ändern.

Hinweis: Standardmäßig interagiert kubectl mit dem default Namespace. Um Befehle in einem anderen Namespace auszuführen nutzt man die --namespace flag.

Beispiel: Wir möchten uns eine Liste aller laufenden Pods, in den vorhandenen Namespaces ausgeben lassen.

kubectl get pods --all-namespaces

Als Command nutzen wir den Befehl get, der uns eine oder mehrere Ressourcen anzeigt. Die gewünschte Ressource sind Pod(s) und über die flag all-namespaces teilen wir Kubernetes mit, dass sich unsere Abfrage auf alle Namespaces bezieht. Um Informationen zu einem bestimmten Namespace zu erhalten, fügen wir der namespace flag den entsprechenden Namen an. Den Command NAME brauchen wir in diesem Beispiel nicht, da wir eine Auflistung aller Pods wünschen.

help

Die -h bzw. --help flag kann jedem Befehl angehängt werden und listet zahlreiche Beispiele, Optionen und Hilfestellungen auf.

Beispiel: Informationen zu kubectl.

kubectl -h

Beispiel: Hilfe zum Command run.

kubectl run -h

get

Zur Statusabfrage von Ressourcen nutzen wir den Befehl get . Gibt eine Liste mit den wichtigsten Informationen zu der gewünschten Ressource aus und kann über flags spezifiziert werden.

Um den Zustand eines Pods in einem bestimmten Namespace auszugeben könnte der Befehl lauten:

kubectl get pod <resource_name> -n <namespace>

apply

Wendet mittels einer Datei(YAML- oder JSON-Format)Konfigurationen auf eine bestehende Ressource an. Existiert die Ressource noch nicht, wird sie erstellt.

kubectl apply -f FILENAME

edit

Möchte man Änderungen an Ressourcen vornehmen, kann man das ganz einfach über den edit-Befehl in der Kommandozeile tun.

Hier am Beispiel eines Deployments:

kubectl edit deployment <deployment-name> -n <namespace>

Der Befehl öffnet das Deployment File in einem Texteditor und man kann entsprechend Änderungen durchführen. Etwa um die Anzahl der Replicas oder die Version eines Images zu ändern.

describe

Der Command describe gibt Informationen zu einzelnen oder mehreren Ressourcen aus und ist hilfreich bei der Fehlersuche, da er detaillierte Beschreibung der ausgewählten Ressourcen, einschließlich verwandter Ressourcen wie Ereignisse oder Controller liefert.

Zum Beispiel:

kubectl describe pod <resource_name> -n <namespace>

Fazit

kubectl ist ein leistungsstarkes und gleichzeitig unkompliziertes Tool, dass es Nutzern ermöglicht zahlreiche Änderungen an den Kubernetes Kern-Konfigurationen vorzunehmen. Die Befehle sind immer nach den gleichen Syntaxregeln aufgebaut und lassen sich auf jede Art von Ressource anwenden. Das macht kubectl zu einem unverzichtbaren Bestandteil im Kubernetes-Werkzeugkasten.

Tipp: K9s

Für all diejenigen, denen die herkömmliche Verwaltung von Kubernetes über die Kommandozeile und kubectl zu unübersichtlich ist, lohnt sich ein Blick auf das Open-Source-Tool K9s. K9s funktioniert nach dem gleichen Prinzip, wie Abfragen über kubectl, bietet darüber hinaus aber zahlreiche Möglichkeiten, den Zustand von Ressourcen und Cluster-Metriken in Echtzeit und mit wenig Aufwand über das Terminal zu tracken. Außerdem lassen sich umständliche Befehle durch das Zuweisen von Aliases vereinfachen.

Sie haben Fragen oder wünschen ein individuelles Angebot? Wir beraten Sie gerne.

Kontakt

Unsere Cloud Experten beraten Sie gerne und individuell.

Unser Büro

Sartoriusstraße 22

20257 Hamburg, Deutschland


Mo - Fr: 09.00 - 18.00 Uhr

Telefon
+49 40 239 69 754 0
Email
hello@bnerd.com