
⎈❏ Terminal et console Web pour Kubernetes
= Kubebox [small]#^⎈❏^# Antonin Stefanutti https://github.com/astefanutti[@astefanutti] // Meta :description: Console terminal et Web pour 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"] ++++
++++=== Fonctionnalités
KUBECONFIG ou $HOME/.kube)Voir la section <> pour des exemples, et suivez image:https://img.shields.io/badge/%40kubebox-00ACEE.svg?&logo=twitter&colorA=555&logoColor=fff[link={uri-kubebox-twitter}] pour des mises à jour.
== Exécution
Les alternatives suivantes sont disponibles pour utiliser Kubebox, selon vos préférences et contraintes :
=== Exécutable
Téléchargez l'exécutable autonome Kubebox pour votre système d'exploitation :
$ 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
Ensuite exécutez :
$ ./kubebox
=== Serveur
Kubebox peut être servi à partir d'un service hébergé dans votre cluster Kubernetes. L'émulation de terminal est fournie par {uri-xterm-js}[Xterm.js] et la communication avec l'API master Kubernetes est relayée par le serveur.
Pour déployer le serveur dans votre cluster Kubernetes, exécutez :
$ kubectl apply -f https://raw.github.com/astefanutti/kubebox/master/kubernetes.yaml
Pour arrêter le serveur et nettoyer les ressources, exécutez :
$ kubectl delete namespace kubebox
Pour que la ressource Ingress fonctionne, le cluster doit avoir un contrôleur Ingress en cours d'exécution. Voir {uri-ingress-controllers}[Ingress controllers] pour plus d'informations.
Alternativement, pour déployer le serveur dans votre cluster OpenShift, exécutez :
$ oc new-app -f https://raw.github.com/astefanutti/kubebox/master/openshift.yaml
=== Kubectl
Vous pouvez exécuter Kubebox comme client in-cluster avec kubectl, par exemple :
$ kubectl run kubebox -it --rm --env="TERM=xterm" --image=astefanutti/kubebox --restart=Never
Si RBAC est activé, vous devrez utiliser l'option --serviceaccount et référencer un compte de service avec des permissions suffisantes.
=== Docker
Vous pouvez exécuter Kubebox avec Docker, par exemple :
$ docker run -it --rm astefanutti/kubebox
Vous pouvez monter votre répertoire personnel pour que Kubebox puisse utiliser le fichier ~/.kube/config, par exemple :
$ docker run -it --rm -v ~/.kube/:/home/node/.kube/:ro astefanutti/kubebox
=== En ligne
Kubebox est disponible en ligne à l'adresse https://astefanutti.github.com/kubebox. Notez que cela nécessite que cette adresse corresponde aux origines autorisées pour CORS par le serveur API. Cela peut être réalisé avec l'interface CLI du serveur API Kubernetes, par exemple :
$ kube-apiserver --cors-allowed-origins .*
== Authentification
Nous essayons de supporter les différentes stratégies d'authentification prises en charge par kubectl, afin de fournir une intégration transparente avec votre configuration locale. Voici les différentes stratégies d'authentification que nous supportons, selon la façon dont vous utilisez Kubebox :
[cols="<,^,^,^",options="header"] |=== ||Exécutable|Docker|En ligne
|OpenID Connect |{icon-check} |{icon-check} |{icon-check}footnote:[Les fichiers de certificat d'autorité IDP personnalisés ne sont pas supportés dans les versions Web.]
|Amazon EKS| {icon-check} | |
|Digital Ocean |{icon-check} | |
|Google Kubernetes Engine| {icon-check} | | |===
Si le mode que vous utilisez n'est pas supporté, vous pouvez rafraîchir manuellement le token d'authentification/les certificats et mettre à jour votre fichier kubeconfig en conséquence.
== cAdvisor
Kubebox s'appuie sur cAdvisor pour récupérer les métriques d'utilisation des ressources. Avant la version 0.8.0, Kubebox accédait aux endpoints cAdvisor, qui sont intégrés dans le Kubelet. Cependant, ces endpoints sont progressivement dépréciés et seront éventuellement supprimés, comme discuté dans https://github.com/kubernetes/kubernetes/issues/68522[kubernetes#68522].
À partir de la version 0.8.0, Kubebox attend que cAdvisor soit déployé en tant que DaemonSet. Cela peut être fait avec :
$ kubectl apply -f https://raw.githubusercontent.com/astefanutti/kubebox/master/cadvisor.yaml
Il est recommandé d'utiliser le fichier cadvisor.yaml fourni, qui est testé pour fonctionner avec Kubebox. Cependant, l'exemple de DaemonSet du projet cAdvisor devrait également fonctionner correctement. Notez que les conteneurs cAdvisor doivent s'exécuter avec un contexte de sécurité privilégié, afin de pouvoir accéder au runtime de conteneur sur chaque nœud.
Vous pouvez modifier les options par défaut --storage_duration et --housekeeping_interval, ajoutées aux arguments du conteneur cAdvisor dans le fichier cadvisor.yaml, pour ajuster la durée de la fenêtre de stockage (par défaut 5m0s) et la période d'échantillonnage (par défaut 10s) respectivement. Vous devrez peut-être également fournir le chemin du socket du runtime de conteneur de votre cluster, s'il ne suit pas la convention habituelle.
== Raccourcis clavier
[cols="1v,2v"] |=== |Raccourci |Description
2+^.e|Général
|kbd:[l], kbd:[Ctrl+l] |Connexion
|kbd:[n] |Changer de namespace actuel
|[kbd:[Shift]+]kbd:[←], kbd:[→] + [kbd:[Alt]+]kbd:[1], ..., kbd:[9] |Naviguer entre les écrans + (utilisez kbd:[Shift] ou kbd:[Alt] dans le terminal exec)
|kbd:[Tab], kbd:[Shift+Tab] |Changer le focus dans l'écran actif
|kbd:[↑], kbd:[↓] |Naviguer dans la liste / formulaire / log
|kbd:[PgUp], kbd:[PgDn] |Monter / descendre d'une page
|kbd:[Enter] |Sélectionner un élément / soumettre un formulaire
|kbd:[Esc] |Fermer la fenêtre modale / annuler le formulaire
|kbd:[Ctrl+z] |Fermer l'écran actuel
|kbd:[q], kbd:[Ctrl+q] |Quitter footnote:[Non disponible dans les versions Web.]
2+^.e|Connexion
|kbd:[←], kbd:[→] |Naviguer dans les configurations Kube
2+^.e|Pods
|kbd:[Enter] |Sélectionner le pod / parcourir les conteneurs
|kbd:[r] |Shell distant dans le conteneur
|kbd:[m] |Utilisation mémoire
|kbd:[c] |Utilisation CPU
|kbd:[t] |Utilisation réseau
|kbd:[f] |Utilisation du système de fichiers
|kbd:[e] |Événements du pod
|kbd:[Shift+e] |Événements du namespace
|kbd:[Ctrl+e] |Événements du cluster
|===
== FAQ
** À partir de la version 0.8.0, Kubebox attend que cAdvisor soit déployé en tant que DaemonSet. Voir la section <> pour plus de détails ;
$ kubectl auth can-i list pods -n cadvisor yes
== Développement
$ git clone https://github.com/astefanutti/kubebox.git
$ cd kubebox
$ npm install
$ node index.js
== Captures d'écran
Événements du cluster : ++++
++++Shell dans un conteneur : ++++
++++Support de thème de terminal : ++++
++++Version navigateur Web : ++++
++++