Kubernetes zuhause - Praktische Tools
Bei der Verwendung von Kubernetes sind verschiedene Tools und Aliase nützlich. Hier gibt es eine kleine Übersicht, was ich nützlich finde.
Andere Beiträge
Dieser Beitrag ist Teil einer Reihe von Blogposts. Ich betreibe zuhause einen Kubernetes-Cluster, in dem ich ein paar Anwendungen wie Nextcloud, Jellyfin oder Vaultwarden betreibe.
- Kubernetes zuhause mit Rancher Desktop und K3s - Einführung und Installation
- Praktische Tools - Die Arbeit mit Kubernetes etwas erleichtern
- GitOps mit Flux CI/CD - Kubernetes-Konfiguration im Git pflegen
- CI/CD-Deployment von Apps - CI/CD-Deployment von Apps
- Anwendung deployen mit Flux CI/CD und Helm
- Webanwendung nach außen verfügbar machen mit Ingress
Inhalt
- Andere Beiträge
- Autovervollständigung für
kubectl
kubectl
abkürzen- Secrets mit Alias schnell dekodieren
- Schnelles Wechseln von Contexts und Namespaces mit
kubectx
undkubens
- Logs mehrerer Pods gleichzeitig verfolgen mit
kubetail
- Buntes
kubectl
mitkubecolor
- Grafische Übersicht über den Cluster mit
octant
- Installation
Autovervollständigung für kubectl
Um nicht alle Namen von Verben, Resourcen und deren Typen für kuebctl
jedes Mal vollständig ausschreiben zu müssen, bietet sich die Verwendung der Autovervollständigung an. Diese muss je nach Shell erst noch geladen werden. Dazu die folgenden Befehle in die .bashrc
bzw. .zshrc
hinzufügen:
- Bash:
source <(kubectl completion bash)
- ZSH:
source <(kubectl completion zsh)
kubectl
abkürzen
Trivial aber zeitsparend - das häufige Eintippen von kubectl
auf k
verkürzen:
alias k=kubectl
Nutzt man die Bash, muss außerdem noch die Auto-Vervollständigung für das Alias aktiviert werden, in der .bashrc
:
complete -o default -F __start_kubectl k
Nutzt man die ZSH, geht das automatisch.
Secrets mit Alias schnell dekodieren
Ruft man die Daten eines Kubernetes-Secrets über kubectl
ab, erhält man sie Base64-kodiert, nebst einer Menge Metadaten. Will man nur die Daten, im Klartext, sehen, hilft eine Shell-Funktion. jq
muss installiert sein. Die Shell-Funktion kann so in die $HOME/.bashrc
bzw. $HOME/.zshrc
eingetragen werden:
kgs () {
if (kubectl get secret $@ &>/dev/null);
then
kubectl get secret $@ -o json|jq ".data|map_values(@base64d)"
else
echo "Secret not found: $@. Did you specify the correct namespace?" >> /dev/stderr
fi
}
Verwendet wird die Funktion so:
# Das Secret geheimnis aus dem aktuellen Namespace abrufen
$ kgs geheimnis
{
"foo": "alice",
"bar": "bob"
}
# Das Secret geheimnis2 aus dem Namespace geheimnisse abrufen
$ kgs -n geheimnisse geheimnis2
{
"asdf": "fdsa"
}
Schnelles Wechseln von Contexts und Namespaces mit kubectx
und kubens
Verwaltet man mehrere Kubernetes-Cluster, muss man den Context wechseln, um mit Tools wie kubectl
andere Cluster anzusprechen. Ein Context ist eine Kombination aus Cluster, User und Namespace. Definiert wird jededer Context in $HOME/.kube/config
. Bei der Installation von Rancher Desktop wurde bereits der Eintrag rancher-desktop
angelegt.
Um bequem in einen anderen Context zu wechseln, bieten sich die Werkzeuge kubectx und kubens an. Die Shellscripte unterstüzen Tab-Completion von Context-Namen und verwenden fzf, wenn es installiert ist.
Das Projekt hat verschiedene Installationsmethoden, darunter brew
. Nutzt man asdf
, kann kubectx damit ebenfalls installiert werden.
Mit dem Befehl kubectx
lässt sich zwischen in der Konfiguration definierten Kontexten wechseln:
# Zeigt eine Übersicht der Kontexte an. Ist FZF installiert,
# kann auch gleich interaktiv gewechselt werden.
$ kubectx
docker-desktop
k3s
rancher-desktop
# Auf den Kontext k3s wechseln. Nimmt als Argument vollständige
# Namen von Kontexten. Unterstützt Autovervollständigung.
$ kubectx k3s
Switched to context "k3s".
# Zurückwechseln auf den vorherigen Kontext
$ kubectx -
Switched to context "rancher-desktop".
Parallel dazu wird auch kubens
mitgeliefert, um nur den Namespace zu wechseln. Verwendeter Cluster und User bleiben gleich.
# Zeigt eine Übersicht der Namespaces an. Ist FZF installiert,
# kann auch gleich interaktiv gewechselt werden.
$ kubens
default
kube-node-lease
kube-public
kube-system
podinfo
# Auf den Namespace podinfo wechseln. Nimmt als Argument vollständige
# Namen von Namespaces. Unterstützt Autovervollständigung.
$ kubens podinfo
Context "rancher-desktop" modified.
Active namespace is "podinfo".
# Zurückwechseln auf den vorherigen Namespace
$ kubens -
Context "rancher-desktop" modified.
Active namespace is "default".
Logs mehrerer Pods gleichzeitig verfolgen mit kubetail
Vor allem wenn man mehrere Replikas eines Pods gleichzeitig betreibt, wird das Verfolgen von Logs mehrerer Pods schnell unhandlich. Mit kubetail
gibt es ein hilfreiches Werkzeug. Damit können die Logs mehrerer Pods nach verschiedenen Kriterien gleichzeitig verfolgt werden. Die Logs der unterschiedlichen Pods werden dabei auch farblich voneinander unterschieden.
Das Projekt hat verschiedene Installationsmethoden, darunter brew
. Nutzt man asdf
, kann kubetail
damit ebenfalls installiert werden.
kubetail
bietet verschiedene Optionen:
# Logs aller Pods, deren Name mit podinfo beginnt
$ kubetail podinfo
Will tail 1 logs...
podinfo-77674f8bc8-g4fnm
[podinfo-77674f8bc8-g4fnm] {"level":"info","ts":"2022-12-18T16:18:07.764Z","caller":"podinfo/main.go:149","msg":"Starting podinfo","version":"6.0.3","revision":"","port":"9898"}
[podinfo-77674f8bc8-g4fnm] {"level":"info","ts":"2022-12-18T16:18:07.765Z","caller":"api/server.go:252","msg":"Starting HTTP Server.","addr":":9898"}
# Logs aller Pods in einem Namespace
$ kubetail -n podinfo
# […]
# Logs aller Pods mit einem Label:
$ kubetail -l app.kubernetes.io/name=podinfo
# […]
Buntes kubectl
mit kubecolor
Die Ausgabe von kubectl
ist bereits recht übersichtlich, könnte aber noch von etwas Farbe profitieren. Kubecolor
ist ein Wrapper um kubectl
, der die Ausgabe einfärbt.
Möchte man kubecolor
mit brew
installieren, muss man von der Dokumentation abweichend einen anderen Befehl eingeben.
$ brew install https://github.com/kubecolor/tap/kubecolor
Das in der Dokumentation erwähnte Rezept unter hidetatz/tap/kubecolor
funktioniert nicht.
Man kann nun entweder direkt kubecolor
statt kubectl
eingeben oder auch den kubectl
-Befehl in der .bashrc
bzw. .zshrc
überlagern lassen.
alias kubectl=kubecolor
Damit dann weiterhin die Auto-Vervollständigung auf der Shell funktioniert, muss der Shell noch beigebracht werden, dass auch für kubecolor
die kubectl
-Vervollständigung zu verwenden ist:
In der .zshrc
:
# Use kubectl completion when using kubecolor
compdef _kubectl kubecolor
In der .bashrc
:
# Use kubectl completion when using kubecolor
complete -o default -F __start_kubectl kubecolor
Grafische Übersicht über den Cluster mit octant
Wächst die Anzahl an Ressourcen im Kubernetes-Cluster, ist es ein grafischer Überblick hilfreich. Ich nutze dafür gern Octant von VMWare. Das Programm bietet eine Weboberfläche, mit der man den Cluster erforschen kann. Mit dem Tool lassen sich auch per Mausklick Terminals in Pods starten und lokale Port-Weiterleitungen für Services einrichten. Sehr von Vorteil ist, dass das Programm lokal auf dem eigenen Rechner läuft und die lokalen Berechtigungen dafür nutzt. Es muss also nicht als Workload im Cluster installiert werden; ebensowenig ist die Einrichtung von Authentifizierung und Berechtigungen notwendig.
Installation
Für das Programm gibt es verschiedene Downloads bei github - Windows, Linux, macOS. Es ist auch bei Homebrew verfügbar:
$ brew install octant
Danach muss es auf der Kommandozeile mit octant
gestartet werden. Es öffnet sich automatisch ein Browser mit der Weboberfläche auf http://localhost:7777.