
⎈❏ Terminal und Webkonsole für Kubernetes
= Kubebox [small]#^⎈❏^# Antonin Stefanutti https://github.com/astefanutti[@astefanutti] // Meta :description: Terminal- und Web-Konsole für Kubernetes // Settings :idprefix: :idseparator: - :experimental: // Aliases ifdef::env-github[] :note-caption: ℹ️ :icon-check: ✔️ :icon-edit: ✏️ endif::[] ifndef::env-github[] :icons: font :icon-check: icon:check[] :icon-edit: icon:pencil[fw] endif::[] // URIs :uri-kubebox-download: https://github.com/astefanutti/kubebox/releases/download/v0.10.0 :uri-kubebox-twitter: https://twitter.com/kubebox :uri-kube-apiserver: https://kubernetes.io/docs/admin/kube-apiserver/ :uri-ingress-controllers: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-controllers :uri-service-account: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ :uri-xterm-js: https://github.com/xtermjs/xterm.js :uri-cadvisor: https://github.com/google/cadvisor
{description}
// image::./docs/kubebox.png[kubebox, align="center"] ++++
++++=== Funktionen
KUBECONFIG-Umgebungsvariable oder $HOME/.kube)Siehe den Abschnitt <> für einige Beispiele, und folgen Sie image:https://img.shields.io/badge/%40kubebox-00ACEE.svg?&logo=twitter&colorA=555&logoColor=fff[link={uri-kubebox-twitter}] für Neuigkeiten.
== Ausführen
Die folgenden Alternativen stehen Ihnen zur Nutzung von Kubebox zur Verfügung, abhängig von Ihren Vorlieben und Einschränkungen:
=== Ausführbare Datei
Laden Sie die eigenständige ausführbare Kubebox-Datei für Ihr Betriebssystem herunter:
$ curl -Lo kubebox {uri-kubebox-download}/kubebox-linux && chmod +x kubebox
$ curl -Lo kubebox {uri-kubebox-download}/kubebox-linux-arm && chmod +x kubebox
$ curl -Lo kubebox {uri-kubebox-download}/kubebox-macos && chmod +x kubebox
Dann ausführen:
$ ./kubebox
=== Server
Kubebox kann von einem Dienst in Ihrem Kubernetes-Cluster bereitgestellt werden. Die Terminalemulation wird von {uri-xterm-js}[Xterm.js] bereitgestellt, und die Kommunikation mit der Kubernetes-Master-API wird durch den Server weitergeleitet.
Um den Server in Ihrem Kubernetes-Cluster bereitzustellen, führen Sie aus:
$ kubectl apply -f https://raw.github.com/astefanutti/kubebox/master/kubernetes.yaml
Um den Server herunterzufahren und Ressourcen zu bereinigen, führen Sie aus:
$ kubectl delete namespace kubebox
Damit die Ingress-Ressource funktioniert, muss der Cluster einen laufenden Ingress-Controller haben. Siehe {uri-ingress-controllers}[Ingress-Controller] für weitere Informationen.
Alternativ, um den Server in Ihrem OpenShift-Cluster bereitzustellen, führen Sie aus:
$ oc new-app -f https://raw.github.com/astefanutti/kubebox/master/openshift.yaml
=== Kubectl
Sie können Kubebox als In-Cluster-Client mit kubectl ausführen, z.B.:
$ kubectl run kubebox -it --rm --env="TERM=xterm" --image=astefanutti/kubebox --restart=Never
Wenn RBAC aktiviert ist, müssen Sie die Option --serviceaccount verwenden und auf ein Dienstkonto mit ausreichenden Berechtigungen verweisen.
=== Docker
Sie können Kubebox mit Docker ausführen, z.B.:
$ docker run -it --rm astefanutti/kubebox
Möglicherweise möchten Sie Ihr Home-Verzeichnis einbinden, damit Kubebox auf die Datei ~/.kube/config zugreifen kann, z.B.:
$ docker run -it --rm -v ~/.kube/:/home/node/.kube/:ro astefanutti/kubebox
=== Online
Kubebox ist online unter https://astefanutti.github.com/kubebox verfügbar. Beachten Sie, dass diese Adresse mit den für CORS vom API-Server erlaubten Ursprüngen übereinstimmen muss. Dies kann mit dem {uri-kube-apiserver}[Kubernetes-API-Server-CLI] erreicht werden, z.B.:
$ kube-apiserver --cors-allowed-origins .*
== Authentifizierung
Wir versuchen, die verschiedenen Authentifizierungsstrategien zu unterstützen, die von kubectl unterstützt werden, um eine nahtlose Integration mit Ihrer lokalen Umgebung zu ermöglichen. Hier sind die verschiedenen Authentifizierungsstrategien, die wir unterstützen, abhängig davon, wie Sie Kubebox verwenden:
[cols="<,^,^,^",options="header"] |=== |Ausführbare Datei|Docker|Online
|OpenID Connect |{icon-check} |{icon-check} |{icon-check}footnote:[Eigene IDP-Zertifizierungsstellendateien werden in Webversionen nicht unterstützt.]
|Amazon EKS| {icon-check} | |
|Digital Ocean |{icon-check} | |
|Google Kubernetes Engine| {icon-check} | | |===
Wenn der von Ihnen verwendete Modus nicht unterstützt wird, können Sie das Authentifizierungstoken/die Zertifikate manuell aktualisieren und Ihre kubeconfig-Datei entsprechend ändern.
== cAdvisor
Kubebox verlässt sich auf {uri-cadvisor}[cAdvisor], um die Ressourcennutzungsmetriken abzurufen. Vor Version 0.8.0 griff Kubebox auf die cAdvisor-Endpunkte zu, die in den Kubelet eingebettet sind. Diese Endpunkte werden jedoch als veraltet eingestuft und werden schließlich entfernt, wie in https://github.com/kubernetes/kubernetes/issues/68522[kubernetes#68522] diskutiert.
Ab Version 0.8.0 erwartet Kubebox, dass cAdvisor als https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/[DaemonSet] bereitgestellt wird. Dies kann erreicht werden mit:
$ kubectl apply -f https://raw.githubusercontent.com/astefanutti/kubebox/master/cadvisor.yaml
Es wird empfohlen, die bereitgestellte Datei cadvisor.yaml zu verwenden, die getestet wurde und mit Kubebox funktioniert.
Allerdings sollte das DaemonSet-Beispiel aus dem {uri-cadvisor}[cAdvisor]-Projekt ebenfalls einwandfrei funktionieren.
Beachten Sie, dass die cAdvisor-Container mit einem privilegierten Sicherheitskontext ausgeführt werden müssen, damit sie auf die Container-Laufzeit auf jedem Knoten zugreifen können.
Sie können die Standardoptionen --storage_duration und --housekeeping_interval, die den cAdvisor-Container-Argumenten in der cadvisor.yaml-Datei hinzugefügt wurden, ändern, um die Dauer des Speicherverschiebungsfensters (standardmäßig 5m0s) bzw. den Abtastzeitraum (standardmäßig 10s) anzupassen.
Möglicherweise müssen Sie auch den Pfad des Container-Laufzeit-Sockets Ihres Clusters angeben, falls dieser nicht der üblichen Konvention folgt.
== Tastenkombinationen
[cols="1v,2v"] |=== |Tastenbelegung |Beschreibung
2+^.e|Allgemein
|kbd:[l], kbd:[Ctrl+l] |Anmelden
|kbd:[n] |Aktuellen Namespace ändern
|[kbd:[Shift]+]kbd:[←], kbd:[→] + [kbd:[Alt]+]kbd:[1], ..., kbd:[9] |Bildschirme navigieren + (innerhalb des Exec-Terminals kbd:[Shift] oder kbd:[Alt] verwenden)
|kbd:[Tab], kbd:[Shift+Tab] |Fokus innerhalb des aktiven Bildschirms ändern
|kbd:[↑], kbd:[↓] |Liste / Formular / Log navigieren
|kbd:[PgUp], kbd:[PgDn] |Eine Seite nach oben/unten bewegen
|kbd:[Enter] |Element auswählen / Formular absenden
|kbd:[Esc] |Modales Fenster schließen / Formular abbrechen
|kbd:[Ctrl+z] |Aktuellen Bildschirm schließen
|kbd:[q], kbd:[Ctrl+q] |Beenden footnote:[Nicht in Webversionen verfügbar.]
2+^.e|Anmelden
|kbd:[←], kbd:[→] |Kube-Konfigurationen navigieren
2+^.e|Pods
|kbd:[Enter] |Pod auswählen / Container durchlaufen
|kbd:[r] |Remote-Shell in Container
|kbd:[m] |Speichernutzung
|kbd:[c] |CPU-Nutzung
|kbd:[t] |Netzwerknutzung
|kbd:[f] |Dateisystemnutzung
|kbd:[e] |Pod-Ereignisse
|kbd:[Shift+e] |Namespace-Ereignisse
|kbd:[Ctrl+e] |Cluster-Ereignisse
|===
== FAQ
** Ab Version 0.8.0 erwartet Kubebox, dass {uri-cadvisor}[cAdvisor] als DaemonSet bereitgestellt wird. Siehe Abschnitt <> für weitere Details;
spec.nodeName)$ kubectl auth can-i list pods -n cadvisor yes
== Entwicklung
$ git clone https://github.com/astefanutti/kubebox.git
$ cd kubebox
$ npm install
$ node index.js
== Screenshots
Cluster-Ereignisse: ++++
++++Shell in einem Container: ++++
++++Unterstützung für Terminal-Designs: ++++
++++Webbrowser-Version: ++++
++++