
⎈❏ Terminal y consola web para Kubernetes
= Kubebox [small]#^⎈❏^# Antonin Stefanutti https://github.com/astefanutti[@astefanutti] // Meta :description: Terminal y consola web para 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"] ++++
++++=== Características
KUBECONFIG o $HOME/.kube)Vea la sección <> para algunos ejemplos, y siga image:https://img.shields.io/badge/%40kubebox-00ACEE.svg?&logo=twitter&colorA=555&logoColor=fff[link={uri-kubebox-twitter}] para conocer las novedades.
== Ejecución
Las siguientes alternativas están disponibles para usar Kubebox, según sus preferencias y restricciones:
=== Ejecutable
Descargue el ejecutable independiente de Kubebox para su SO:
$ 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
Luego ejecute:
$ ./kubebox
=== Servidor
Kubebox puede servirse desde un servicio alojado en su clúster de Kubernetes. La emulación de terminal es proporcionada por {uri-xterm-js}[Xterm.js] y la comunicación con la API del master de Kubernetes es proxyada por el servidor.
Para desplegar el servidor en su clúster de Kubernetes, ejecute:
$ kubectl apply -f https://raw.github.com/astefanutti/kubebox/master/kubernetes.yaml
Para detener el servidor y limpiar los recursos, ejecute:
$ kubectl delete namespace kubebox
Para que el recurso Ingress funcione, el clúster debe tener un controlador Ingress en ejecución. Consulte {uri-ingress-controllers}[Ingress controllers] para más información.
Alternativamente, para desplegar el servidor en su clúster de OpenShift, ejecute:
$ oc new-app -f https://raw.github.com/astefanutti/kubebox/master/openshift.yaml
=== Kubectl
Puede ejecutar Kubebox como un cliente in-cluster con kubectl, por ejemplo:
$ kubectl run kubebox -it --rm --env="TERM=xterm" --image=astefanutti/kubebox --restart=Never
Si RBAC está habilitado, deberá usar la opción --serviceaccount y hacer referencia a una cuenta de servicio con permisos suficientes.
=== Docker
Puede ejecutar Kubebox usando Docker, por ejemplo:
$ docker run -it --rm astefanutti/kubebox
Es posible que desee montar su directorio home para que Kubebox pueda usar el archivo ~/.kube/config, por ejemplo:
$ docker run -it --rm -v ~/.kube/:/home/node/.kube/:ro astefanutti/kubebox
=== En línea
Kubebox está disponible en línea en https://astefanutti.github.com/kubebox. Tenga en cuenta que requiere que esta dirección coincida con los orígenes permitidos para CORS por el servidor API. Esto se puede lograr con la {uri-kube-apiserver}[CLI del servidor API de Kubernetes], por ejemplo:
$ kube-apiserver --cors-allowed-origins .*
== Autenticación
Intentamos admitir las diversas estrategias de autenticación compatibles con kubectl, para proporcionar una integración perfecta con su configuración local. Aquí están las diferentes estrategias de autenticación que admitimos, según cómo use Kubebox:
[cols="<,^,^,^",options="header"] |=== ||Ejecutable|Docker|En línea
|OpenID Connect |{icon-check} |{icon-check} |{icon-check}footnote:[Los archivos de autoridad certificadora IDP personalizados no son compatibles en las versiones Web.]
|Amazon EKS| {icon-check} | |
|Digital Ocean |{icon-check} | |
|Google Kubernetes Engine| {icon-check} | | |===
Si el modo que está utilizando no es compatible, puede actualizar el token/certificado de autenticación manualmente y actualizar su archivo kubeconfig en consecuencia.
== cAdvisor
Kubebox utiliza {uri-cadvisor}[cAdvisor] para recuperar las métricas de uso de recursos. Antes de la versión 0.8.0, Kubebox accedía a los endpoints de cAdvisor que están integrados en el Kubelet. Sin embargo, estos endpoints están siendo obsoletos y eventualmente se eliminarán, como se discute en https://github.com/kubernetes/kubernetes/issues/68522[kubernetes#68522].
A partir de la versión 0.8.0, Kubebox espera que cAdvisor esté desplegado como un https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/[DaemonSet]. Esto se puede lograr con:
$ kubectl apply -f https://raw.githubusercontent.com/astefanutti/kubebox/master/cadvisor.yaml
Se recomienda usar el archivo cadvisor.yaml proporcionado, que ha sido probado para funcionar con Kubebox.
Sin embargo, el ejemplo de DaemonSet del proyecto {uri-cadvisor}[cAdvisor] también debería funcionar correctamente.
Tenga en cuenta que los contenedores de cAdvisor deben ejecutarse con un contexto de seguridad privilegiado, para que puedan acceder al runtime de contenedores en cada nodo.
Puede cambiar las opciones predeterminadas --storage_duration y --housekeeping_interval, agregadas a los argumentos del contenedor de cAdvisor declarados en el archivo cadvisor.yaml, para ajustar la duración de la ventana móvil de almacenamiento (predeterminado 5m0s) y el período de muestreo (predeterminado 10s) respectivamente.
También es posible que deba proporcionar la ruta del socket del runtime de contenedores de su clúster, en caso de que no siga la convención habitual.
== Atajos de teclado
[cols="1v,2v"] |=== |Combinación de teclas |Descripción
2+^.e|General
|kbd:[l], kbd:[Ctrl+l] |Iniciar sesión
|kbd:[n] |Cambiar namespace actual
|[kbd:[Shift]+]kbd:[←], kbd:[→] + [kbd:[Alt]+]kbd:[1], ..., kbd:[9] |Navegar entre pantallas + (use kbd:[Shift] o kbd:[Alt] dentro del terminal exec)
|kbd:[Tab], kbd:[Shift+Tab] |Cambiar el foco dentro de la pantalla activa
|kbd:[↑], kbd:[↓] |Navegar lista / formulario / log
|kbd:[PgUp], kbd:[PgDn] |Mover una página arriba / abajo
|kbd:[Enter] |Seleccionar elemento / enviar formulario
|kbd:[Esc] |Cerrar ventana modal / cancelar formulario
|kbd:[Ctrl+z] |Cerrar pantalla actual
|kbd:[q], kbd:[Ctrl+q] |Salir footnote:[No disponible en versiones Web.]
2+^.e|Inicio de sesión
|kbd:[←], kbd:[→] |Navegar configuraciones de Kube
2+^.e|Pods
|kbd:[Enter] |Seleccionar pod / ciclar contenedores
|kbd:[r] |Shell remoto dentro del contenedor
|kbd:[m] |Uso de memoria
|kbd:[c] |Uso de CPU
|kbd:[t] |Uso de red
|kbd:[f] |Uso del sistema de archivos
|kbd:[e] |Eventos del pod
|kbd:[Shift+e] |Eventos del namespace
|kbd:[Ctrl+e] |Eventos del clúster
|===
== Preguntas frecuentes
** A partir de la versión 0.8.0, Kubebox espera que {uri-cadvisor}[cAdvisor] esté desplegado como un DaemonSet. Consulte la sección <> para más detalles;
spec.nodeName)$ kubectl auth can-i list pods -n cadvisor yes
== Desarrollo
$ git clone https://github.com/astefanutti/kubebox.git
$ cd kubebox
$ npm install
$ node index.js
== Capturas de pantalla
Eventos del clúster: ++++
++++Shell dentro de un contenedor: ++++
++++Soporte de temas de terminal: ++++
++++Versión para navegador web: ++++
++++