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 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
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
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 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 |
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
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
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)'