
⎈❏ Terminale e console web per Kubernetes
= Kubebox [small]#^⎈❏^# Antonin Stefanutti https://github.com/astefanutti[@astefanutti] // Meta :description: Console terminale e Web per 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"] ++++
++++=== Funzionalità
KUBECONFIG o $HOME/.kube)Vedi la sezione <> per alcuni esempi, e segui image:https://img.shields.io/badge/%40kubebox-00ACEE.svg?&logo=twitter&colorA=555&logoColor=fff[link={uri-kubebox-twitter}] per alcuni aggiornamenti.
== Esecuzione
Le seguenti alternative sono disponibili per utilizzare Kubebox, a seconda delle tue preferenze e vincoli:
=== Eseguibile
Scarica l'eseguibile standalone di Kubebox per il tuo sistema operativo:
$ 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
Poi esegui:
$ ./kubebox
=== Server
Kubebox può essere servito da un servizio ospitato nel tuo cluster Kubernetes. L'emulazione del terminale è fornita da {uri-xterm-js}[Xterm.js] e la comunicazione con l'API master di Kubernetes è proxyata dal server.
Per distribuire il server nel tuo cluster Kubernetes, esegui:
$ kubectl apply -f https://raw.github.com/astefanutti/kubebox/master/kubernetes.yaml
Per arrestare il server e pulire le risorse, esegui:
$ kubectl delete namespace kubebox
Affinché la risorsa Ingress funzioni, il cluster deve avere un controller Ingress in esecuzione. Vedi {uri-ingress-controllers}[Ingress controllers] per maggiori informazioni.
In alternativa, per distribuire il server nel tuo cluster OpenShift, esegui:
$ oc new-app -f https://raw.github.com/astefanutti/kubebox/master/openshift.yaml
=== Kubectl
Puoi eseguire Kubebox come client in-cluster con kubectl, ad esempio:
$ kubectl run kubebox -it --rm --env="TERM=xterm" --image=astefanutti/kubebox --restart=Never
Se RBAC è abilitato, dovrai usare l'opzione --serviceaccount e fare riferimento a un service account con autorizzazioni sufficienti.
=== Docker
Puoi eseguire Kubebox usando Docker, ad esempio:
$ docker run -it --rm astefanutti/kubebox
Potresti voler montare la tua home directory in modo che Kubebox possa fare affidamento sul file ~/.kube/config, ad esempio:
$ docker run -it --rm -v ~/.kube/:/home/node/.kube/:ro astefanutti/kubebox
=== Online
Kubebox è disponibile online su https://astefanutti.github.com/kubebox. Nota che richiede che questo indirizzo corrisponda alle origini consentite per CORS dal server API. Ciò può essere ottenuto con {uri-kube-apiserver}[CLI del server API Kubernetes], ad esempio:
$ kube-apiserver --cors-allowed-origins .*
== Autenticazione
Cerchiamo di supportare le varie strategie di autenticazione supportate da kubectl, per fornire un'integrazione fluida con la tua configurazione locale. Ecco le diverse strategie di autenticazione che supportiamo, a seconda di come utilizzi Kubebox:
[cols="<,^,^,^",options="header"] |=== ||Executable|Docker|Online
|OpenID Connect |{icon-check} |{icon-check} |{icon-check}footnote:[I file dell'autorità di certificazione IDP personalizzati non sono supportati nelle versioni Web.]
|Amazon EKS| {icon-check} | |
|Digital Ocean |{icon-check} | |
|Google Kubernetes Engine| {icon-check} | | |===
Se la modalità che stai usando non è supportata, puoi aggiornare manualmente il token/certificato di autenticazione e aggiornare di conseguenza il tuo file kubeconfig.
== cAdvisor
Kubebox si basa su {uri-cadvisor}[cAdvisor] per recuperare le metriche di utilizzo delle risorse. Prima della versione 0.8.0, Kubebox accedeva agli endpoint cAdvisor, che sono incorporati in Kubelet. Tuttavia, questi endpoint sono in fase di deprecazione e verranno infine rimossi, come discusso in https://github.com/kubernetes/kubernetes/issues/68522[kubernetes#68522].
A partire dalla versione 0.8.0, Kubebox si aspetta che cAdvisor sia distribuito come https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/[DaemonSet]. Ciò può essere ottenuto con:
$ kubectl apply -f https://raw.githubusercontent.com/astefanutti/kubebox/master/cadvisor.yaml
Si consiglia di utilizzare il file cadvisor.yaml fornito, che è testato per funzionare con Kubebox. Tuttavia, l'esempio di DaemonSet, dal progetto {uri-cadvisor}[cAdvisor], dovrebbe funzionare ugualmente. Nota che i container cAdvisor devono essere eseguiti con un contesto di sicurezza privilegiato, in modo che possano accedere al runtime dei container su ogni nodo.
Puoi modificare le opzioni predefinite --storage_duration e --housekeeping_interval, aggiunte agli argomenti del container cAdvisor dichiarati nel file cadvisor.yaml, per regolare rispettivamente la durata della finestra di archiviazione (default 5m0s) e il periodo di campionamento (default 10s). Potresti anche dover fornire il percorso del socket del runtime dei container del tuo cluster, nel caso non segua la convenzione usuale.
== Tasti rapidi
[cols="1v,2v"] |=== |Combinazione di tasti |Descrizione
2+^.e|Generale
|kbd:[l], kbd:[Ctrl+l] |Accesso
|kbd:[n] |Cambia namespace corrente
|[kbd:[Shift]+]kbd:[←], kbd:[→] + [kbd:[Alt]+]kbd:[1], ..., kbd:[9] |Naviga tra le schermate (usa kbd:[Shift] o kbd:[Alt] all'interno del terminale exec)
|kbd:[Tab], kbd:[Shift+Tab] |Cambia focus all'interno della schermata attiva
|kbd:[↑], kbd:[↓] |Naviga lista / modulo / log
|kbd:[PgUp], kbd:[PgDn] |Sposta su/giù di una pagina
|kbd:[Enter] |Seleziona elemento / invia modulo
|kbd:[Esc] |Chiudi finestra modale / annulla modulo
|kbd:[Ctrl+z] |Chiudi schermata corrente
|kbd:[q], kbd:[Ctrl+q] |Esci footnote:[Non disponibile nelle versioni Web.]
2+^.e|Accesso
|kbd:[←], kbd:[→] |Naviga tra le configurazioni Kube
2+^.e|Pod
|kbd:[Enter] |Seleziona pod / cicla container
|kbd:[r] |Shell remota nel container
|kbd:[m] |Utilizzo memoria
|kbd:[c] |Utilizzo CPU
|kbd:[t] |Utilizzo rete
|kbd:[f] |Utilizzo filesystem
|kbd:[e] |Eventi pod
|kbd:[Shift+e] |Eventi namespace
|kbd:[Ctrl+e] |Eventi cluster
|===
== FAQ
** A partire dalla versione 0.8.0, Kubebox si aspetta che {uri-cadvisor}[cAdvisor] sia distribuito come DaemonSet. Vedi la sezione <> per maggiori dettagli;
spec.nodeName field selector)$ kubectl auth can-i list pods -n cadvisor yes
== Sviluppo
$ git clone https://github.com/astefanutti/kubebox.git
$ cd kubebox
$ npm install
$ node index.js
== Screenshot
Eventi cluster: ++++
++++Shell in un container: ++++
++++Supporto temi terminale: ++++
++++Versione browser web: ++++
++++