IT-Knowledgebase
de DevOps Software Kubernetes kubectl

Die Benutzung von kubectl

kubectl ist ein Programm mit dem man mit einem Kubernetes Cluster interagieren kann. Sobietet das Tool uns die Möglichkeit Ressourcen zu erstellen, zu löschen, den Status zu überprüfen oder diese zu aktualisieren.

Die kubectl Version darf nur einen geringen Unterschied zu dem Kubernetes Cluster haben. So ist für ein Cluster mit der Version 1.20.1 die kubectl Version 1.19 - 1.21 nötig.

Kubectl installieren

kubectl lässt sich auf viele Wege installieren. Wir wollen hier die gängisten beschreiben.

Installation über Debian/Ubuntu

1sudo apt-get update && sudo apt-get install -y apt-transport-https
2curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /usr/share/keyrings/kubernetes.gpg
3echo "deb [arch=amd64 signed-by=/usr/share/keyrings/kubernetes.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
4sudo apt-get update
5sudo apt-get install -y kubectl

installation mit homebrew auf macos

1brew install kubrnetes-cli

kubectl testen

Um die Version zu testen die wir installiert haben schreiben wir

1➜ kubectl version
2Client Version: v1.29.1
3Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
4Server Version: v1.29.1

Beispielhafte Ausgabe von kubectl version

kubectl konfigurieren

Für jedes Cluster und jeden User gibt es eine kubectl-Konfigurationsdatei, die normalerweise unter $HOME/.kube/config liegt. Dabei legt jedes Tool zur Cluster erstellung eine solche Datei an. Sollten Sie keine Datei haben, starten sie mit dem Tool ihrer Wahl (k3s,kind,kubeadm) ein neues Cluster und/oder kopieren Sie eine config-Datei in das entsprechende Verzeichnis.

kubectl verwenden

kubectl ist aufgebaut, dass zuerst ein Verb kommt was man genau machen möchte. Diese Verben sind natürlich alle auf Englisch und z.B. get, describe, delete oder edit und beschreiben eigentlich schon sehr gut, was Sie tun. Danach kommt was man mit dem Verb meint also welche Ressource möchte man ansprechen. Bekannte Ressourcen sind z.B. pods, deployments und services. Zum Schluss kommt noch der Name der Ressource wie .zB. mein-service1.

Anbei ist einmal eine Tabelle der Verben

Befehl Beschreibung
get Listet die Kubernetes Ressourcen auf
describe Gibt detailierte Informationen einer Ressource
logs Listet die Logs von einem Container auf
create Erstellt eine Ressource
apply Updatet eine Ressource (anhand von einer Manifest-Datei)
delete Löscht eine Re
exec Führt Befehle innerhalb eines Container aus
cordon Macht einen Server nicht erreichbar für den Scheduler
uncordon Macht einen Server wieder erreichbar für den Scheduler
drain Bewegt alle Pods von dem betroffenen Server
api-versions Listet alle API Gruppen und ihre Versionen auf, die der API-Server kennt.
api-resources Listet alle verfügbarren API Ressourcen auf

Häufig verwendete Befehle

Hier ist noch eine kleine Sammlung von häufigen Befehlen

1kubectl get nodes

Mittels des folgenden Befehls lassen sich alle Server auflisten

1kubectl get pods

Listet alle Pods in dem aktiven Namespace auf (normalerweise ist es default)

1kubectl get deployments,services

Listet alle Deployments und Services auf

Namespace wechseln

Den namespace kann man mittels dem Parameter -n einfach wechseln oder mittels --all-namespaces alle Ressourcen in jedem namespace anzeigen lassen. Die Kurzform dafür ist auch -A. Um den Namespace dauerhaft zu wechseln, muss ein Eintrag in die Config-Datei gemacht werden oder aber dieser Befehl benutzt werden:

1kubectl config set-context --current --namespace=my-namespace

Ressourcen filtern

In Kubernetes wird jeder Ressource eigentlich mindestens ein Label zugewiesen. Mittels kubectl kann man diese Label als Filter benutzten. Dabei sind auch mehrere Labels suchbar:

1kubectl get pods -l environment=production,app=wordpress

listet alle pods mit dem label environment=production und dem label app=wordpress auf

Wenn man viele Labels matchen möchte ist es ggf. übersichtlicher die set-based schreibweise zu verwenden.

1kubectl get pods -l 'environment in (production),tier in (frontend)'