
⎈❏ Terminal e console Web para Kubernetes
= Kubebox [small]#^⎈❏^# Antonin Stefanutti https://github.com/astefanutti[@astefanutti] // Meta :description: Console de terminal e 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"] ++++
++++=== Recursos
KUBECONFIG ou $HOME/.kube)Veja a seção <> para alguns exemplos, e siga image:https://img.shields.io/badge/%40kubebox-00ACEE.svg?&logo=twitter&colorA=555&logoColor=fff[link={uri-kubebox-twitter}] para algumas atualizações.
== Executar
As seguintes alternativas estão disponíveis para usar o Kubebox, dependendo das suas preferências e restrições:
=== Executável
Baixe o executável standalone do Kubebox para seu sistema operacional:
$ 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
Em seguida, execute:
$ ./kubebox
=== Servidor
O Kubebox pode ser servido a partir de um serviço hospedado no seu cluster Kubernetes. A emulação de terminal é fornecida pelo {uri-xterm-js}[Xterm.js] e a comunicação com a API master do Kubernetes é proxyada pelo servidor.
Para implantar o servidor no seu cluster Kubernetes, execute:
$ kubectl apply -f https://raw.github.com/astefanutti/kubebox/master/kubernetes.yaml
Para desligar o servidor e limpar os recursos, execute:
$ kubectl delete namespace kubebox
Para que o recurso Ingress funcione, o cluster deve ter um controlador Ingress em execução. Consulte {uri-ingress-controllers}[Controladores Ingress] para mais informações.
Alternativamente, para implantar o servidor no seu cluster OpenShift, execute:
$ oc new-app -f https://raw.github.com/astefanutti/kubebox/master/openshift.yaml
=== Kubectl
Você pode executar o Kubebox como um cliente in-cluster com kubectl, por exemplo:
$ kubectl run kubebox -it --rm --env="TERM=xterm" --image=astefanutti/kubebox --restart=Never
Se o RBAC estiver habilitado, você terá que usar a opção --serviceaccount e fazer referência a uma conta de serviço com permissões suficientes.
=== Docker
Você pode executar o Kubebox usando Docker, por exemplo:
$ docker run -it --rm astefanutti/kubebox
Talvez você queira montar seu diretório home para que o Kubebox possa usar o arquivo ~/.kube/config, por exemplo:
$ docker run -it --rm -v ~/.kube/:/home/node/.kube/:ro astefanutti/kubebox
=== Online
O Kubebox está disponível online em https://astefanutti.github.com/kubebox. Observe que este endereço precisa corresponder às origens permitidas para CORS pelo servidor da API. Isso pode ser alcançado com a {uri-kube-apiserver}[CLI do servidor API do Kubernetes], por exemplo:
$ kube-apiserver --cors-allowed-origins .*
== Autenticação
Tentamos suportar as várias estratégias de autenticação suportadas pelo kubectl, a fim de fornecer integração perfeita com sua configuração local. Aqui estão as diferentes estratégias de autenticação que suportamos, dependendo de como você está usando o Kubebox:
[cols="<,^,^,^",options="header"] |=== ||Executável|Docker|Online
|OpenID Connect |{icon-check} |{icon-check} |{icon-check}footnote:[Arquivos de certificado de autoridade (CA) personalizados do IDP não são suportados nas versões Web.]
|Amazon EKS| {icon-check} | |
|Digital Ocean |{icon-check} | | |===
Se o modo que você está usando não for suportado, você pode atualizar o token/certificado de autenticação manualmente e atualizar seu arquivo kubeconfig de acordo.
== cAdvisor
O Kubebox depende do {uri-cadvisor}[cAdvisor] para recuperar as métricas de uso de recursos. Antes da versão 0.8.0, o Kubebox costumava acessar os endpoints do cAdvisor, que estão embutidos no Kubelet. No entanto, esses endpoints estão sendo descontinuados e eventualmente serão removidos, conforme discutido em https://github.com/kubernetes/kubernetes/issues/68522[kubernetes#68522].
A partir da versão 0.8.0, o Kubebox espera que o cAdvisor seja implantado como um https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/[DaemonSet]. Isso pode ser feito com:
$ kubectl apply -f https://raw.githubusercontent.com/astefanutti/kubebox/master/cadvisor.yaml
Recomenda-se usar o arquivo cadvisor.yaml fornecido, que é testado para funcionar com o Kubebox.
No entanto, o exemplo de DaemonSet do projeto {uri-cadvisor}[cAdvisor] também deve funcionar bem.
Observe que os contêineres cAdvisor devem ser executados com um contexto de segurança privilegiado, para que possam acessar o tempo de execução do container em cada nó.
Você pode alterar as opções padrão --storage_duration e --housekeeping_interval, adicionadas aos argumentos do container cAdvisor declarados no arquivo cadvisor.yaml, para ajustar a duração da janela móvel de armazenamento (padrão 5m0s) e o período de amostragem (padrão 10s), respectivamente.
Você também pode precisar fornecer o caminho do soquete do tempo de execução do container do seu cluster, caso não siga a convenção usual.
== Teclas de Atalho
[cols="1v,2v"] |=== |Tecla |Descrição
2+^.e|Geral
|kbd:[l], kbd:[Ctrl+l] |Login
|kbd:[n] |Alterar namespace atual
|[kbd:[Shift]+]kbd:[←], kbd:[→] + [kbd:[Alt]+]kbd:[1], ..., kbd:[9] |Navegar entre telas + (use kbd:[Shift] ou kbd:[Alt] dentro do terminal exec)
|kbd:[Tab], kbd:[Shift+Tab] |Mudar foco dentro da tela ativa
|kbd:[↑], kbd:[↓] |Navegar por lista / formulário / log
|kbd:[PgUp], kbd:[PgDn] |Mover uma página para cima / para baixo
|kbd:[Enter] |Selecionar item / enviar formulário
|kbd:[Esc] |Fechar janela modal / cancelar formulário
|kbd:[Ctrl+z] |Fechar tela atual
|kbd:[q], kbd:[Ctrl+q] |Sair footnote:[Não disponível nas versões Web.]
2+^.e|Login
|kbd:[←], kbd:[→] |Navegar por configurações do Kube
2+^.e|Pods
|kbd:[Enter] |Selecionar pod / alternar entre containers
|kbd:[r] |Shell remoto no container
|kbd:[m] |Uso de memória
|kbd:[c] |Uso de CPU
|kbd:[t] |Uso de rede
|kbd:[f] |Uso do sistema de arquivos
|kbd:[e] |Eventos do pod
|kbd:[Shift+e] |Eventos do namespace
|kbd:[Ctrl+e] |Eventos do cluster
|===
== FAQ
** A partir da versão 0.8.0, o Kubebox espera que o {uri-cadvisor}[cAdvisor] seja implantado como um DaemonSet. Consulte a seção <> para mais detalhes;
spec.nodeName)$ kubectl auth can-i list pods -n cadvisor yes
== Desenvolvimento
$ git clone https://github.com/astefanutti/kubebox.git
$ cd kubebox
$ npm install
$ node index.js
== Screenshots
Eventos do cluster: ++++
++++Shell em um container: ++++
++++Suporte a temas de terminal: ++++
++++Versão para navegador Web: ++++
++++