Umgang mit mehreren Kubernetes-Clustern mit kubesh

Wenn Sie mit mehreren Kuberenetes-Clustern arbeiten, müssen Sie den verschiedenen Tools mitteilen, nach welchem ​​Cluster Sie suchen möchten. Es gibt einige Tools und Problemumgehungen dafür, aber ich finde sie umständlich und / oder fehleranfällig. Also kratzte ich mich am Juckreiz: Ich stelle dir kubesh vor:

Motivation

Ich verwende GKE für die Arbeit und für mein Builderscon-Projekt.

Dies bedeutet, dass ich zwei Google-Konten habe: eines für die Arbeit und eines für meine privaten Bedürfnisse. Und ich habe jeweils mehrere Cluster.

Für die längste Zeit e (obwohl umständlich) authentifiziere ich mich erneut und lasse gcloud die Standardanmeldeinformationen der Anwendung in ~ / speichern .config / gcloud / application_default_credentials.json und lassen Sie meine kubeconfig von Zeit zu Zeit über gcloud container cluster get-credentials aktualisieren.

Aber im Laufe der Zeit sah ich mich einigen problematischen Situationen gegenüber.

Ein Problem war, dass ich anfing, Vorfälle zu haben, bei denen ich morgens an einem Cluster arbeitete. Einige Zeit später entschloss ich mich, an einem anderen Projekt zu arbeiten, und mir wurde klar, dass ich vom Cluster aus an dem Cluster arbeitete Morgen, als ich eigentlich an einem anderen arbeiten wollte. Ich habe dies noch nicht getan, aber ich schaudere, wenn ich darüber nachdenke, was passieren würde, wenn ich mich irgendwie dazu entschließen würde, eine Kubernetes-Ressource in einem unbeabsichtigten Cluster zu löschen.

Es gab auch Fälle, in denen ich an zwei Clustern arbeitete, die miteinander kommunizieren mussten. Möglicherweise haben Sie einen Cluster, in dem eine organisationsweite Prometheus-Instanz ausgeführt wird, und der andere Kubernetes-Cluster überwachen möchte. In dieser Situation möchte ich beide Cluster gleichzeitig überwachen.

Stand der Technik

Es gibt andere Tools, die ähnliche Aufgaben ausführen. Ein Tool, das mir empfohlen wurde, war kubectx :

Während dies die Verwaltung von Kontexten erheblich vereinfacht, da kubectl use-context darunter verwendet wird, sind die Auswirkungen global. Das heißt, wenn Sie es in einem Terminal verwenden und zur Verwendung von kubectl zu einem anderen Terminal zurückkehren, arbeiten Sie möglicherweise nicht mehr am vorgesehenen Cluster.

Sie können auch mehrere kubecfg-Dateien erstellen und wechseln, indem Sie verschiedene KUBE_CONFIG-Variablen festlegen. Dies scheint der am weitesten verbreitete Weg zu sein, aber ich finde es inakzeptabel, kubeconfig-Einträge pflegen zu müssen. Eigentlich denke ich, dass ich das auf jeden Fall kann, aber möchte ich meinen Kollegen sagen, dass sie lernen sollen, wie man diese Dateien erstellt und verwaltet? Hmm…

Kratzt an meinem Juckreiz

Jetzt habe ich also kubesh . Dies erzeugt im Grunde eine neue Shell, die kubectl , stern und helm auf ihre jeweiligen Wrapper zeigt. Diese Wrapper stellen nur den Kubernetes-Kontext bereit, den Sie beim Starten von kubesh

angegeben haben

Die Effekte sind lokal für Ihre Shell-Sitzung. Auf einem anderen Terminal sind Sie absolut sicher vor den Auswirkungen. Wenn Sie an einem anderen Cluster arbeiten, sollte Ihr Setup nicht geändert werden.

Wenn Sie mehr Konsistenz wünschen, können Sie eine weitere neue Shell öffnen und folgende Schritte ausführen:

Und dies erzwingt nachfolgende Aufrufe von kubectl und Freunden, die auf den Cluster verweisen, der nur durch my-other-context angegeben wird.

Sie können sogar zufälligen kubectl use-context in einem anderen Terminal ausführen, und es würde weiterhin funktionieren (Hinweis: Führen Sie use-context nicht aus, während Sie verwenden kubesh ist in Kraft).

Peco-Integration

Wenn Sie es leid sind, lange Kontextnamen zu schreiben, integrieren Sie einfach kubesh in peco (Haftungsausschluss: Ich bin der Autor)

In der README für kubesh erfahren Sie, wie Sie peco integrieren:

Jetzt können Sie einen Kontext interaktiv auswählen!

Jetzt sollten Sie problemlos zwischen Clustern navigieren können. Viel Spaß beim Hacken!