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.

Inhalt

  1. Andere Beiträge
  2. Autovervollständigung für kubectl
  3. kubectl abkürzen
  4. Secrets mit Alias schnell dekodieren
  5. Schnelles Wechseln von Contexts und Namespaces mit kubectx und kubens
  6. Logs mehrerer Pods gleichzeitig verfolgen mit kubetail
  7. Buntes kubectl mit kubecolor
  8. Grafische Übersicht über den Cluster mit octant
  9. 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.

Kubecolor-Ausgabe von kubectl describe service podinfo

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.