
⎈❏ Терминал и веб-консоль для Kubernetes
= Kubebox [small]#^⎈❏^# Antonin Stefanutti https://github.com/astefanutti[@astefanutti] // Meta :description: Терминал и веб-консоль для 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"] ++++
++++=== Возможности
KUBECONFIG или $HOME/.kube)Смотрите раздел <> для примеров и следите за image:https://img.shields.io/badge/%40kubebox-00ACEE.svg?&logo=twitter&colorA=555&logoColor=fff[link={uri-kubebox-twitter}] для обновлений.
== Запуск
Для использования Kubebox доступны следующие альтернативы, в зависимости от ваших предпочтений и ограничений:
=== Исполняемый файл
Загрузите автономный исполняемый файл Kubebox для вашей ОС:
$ 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
Затем выполните:
$ ./kubebox
=== Сервер
Kubebox может быть развёрнут в виде сервиса, работающего в вашем кластере Kubernetes. Эмуляция терминала обеспечивается {uri-xterm-js}[Xterm.js], а связь с API мастер-узла Kubernetes проксируется сервером.
Чтобы развернуть сервер в вашем кластере Kubernetes, выполните:
$ kubectl apply -f https://raw.github.com/astefanutti/kubebox/master/kubernetes.yaml
Чтобы остановить сервер и очистить ресурсы, выполните:
$ kubectl delete namespace kubebox
Чтобы ресурс Ingress работал, в кластере должен быть запущен контроллер Ingress. Смотрите {uri-ingress-controllers}[Ingress controllers] для дополнительной информации.
Альтернативно, чтобы развернуть сервер в вашем кластере OpenShift, выполните:
$ oc new-app -f https://raw.github.com/astefanutti/kubebox/master/openshift.yaml
=== Kubectl
Вы можете запустить Kubebox как внутрикластерный клиент с помощью kubectl, например:
$ kubectl run kubebox -it --rm --env="TERM=xterm" --image=astefanutti/kubebox --restart=Never
Если включён RBAC, вам нужно использовать опцию --serviceaccount и указать сервисный аккаунт с достаточными правами.
=== Docker
Вы можете запустить Kubebox с помощью Docker, например:
$ docker run -it --rm astefanutti/kubebox
Возможно, вы захотите смонтировать ваш домашний каталог, чтобы Kubebox мог использовать файл ~/.kube/config, например:
$ docker run -it --rm -v ~/.kube/:/home/node/.kube/:ro astefanutti/kubebox
=== Онлайн
Kubebox доступен онлайн по адресу https://astefanutti.github.com/kubebox. Обратите внимание, что требуется, чтобы этот адрес совпадал с разрешёнными источниками для CORS со стороны API-сервера. Это можно сделать с помощью {uri-kube-apiserver}[CLI API-сервера Kubernetes], например:
$ kube-apiserver --cors-allowed-origins .*
== Аутентификация
Мы стараемся поддерживать различные стратегии аутентификации, поддерживаемые kubectl, чтобы обеспечить бесшовную интеграцию с вашей локальной средой. Вот различные стратегии аутентификации, которые мы поддерживаем, в зависимости от того, как вы используете Kubebox:
[cols="<,^,^,^",options="header"] |=== | |Исполняемый файл|Docker|Онлайн
|OpenID Connect |{icon-check} |{icon-check} |{icon-check}footnote:[Файлы пользовательских сертификатов IDP не поддерживаются в веб-версиях.]
|Amazon EKS| {icon-check} | |
|Digital Ocean |{icon-check} | |
|Google Kubernetes Engine| {icon-check} | | |===
Если используемый вами режим не поддерживается, вы можете обновить токен/сертификаты аутентификации вручную и соответствующим образом изменить файл kubeconfig.
== cAdvisor
Kubebox полагается на {uri-cadvisor}[cAdvisor] для получения метрик использования ресурсов. До версии 0.8.0 Kubebox использовал конечные точки cAdvisor, встроенные в Kubelet. Однако эти конечные точки устаревают и в конечном итоге будут удалены, как обсуждается в https://github.com/kubernetes/kubernetes/issues/68522[kubernetes#68522].
Начиная с версии 0.8.0, Kubebox ожидает, что cAdvisor будет развёрнут как https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/[DaemonSet]. Это можно сделать с помощью:
$ kubectl apply -f https://raw.githubusercontent.com/astefanutti/kubebox/master/cadvisor.yaml
Рекомендуется использовать предоставленный файл cadvisor.yaml, который протестирован на совместную работу с Kubebox.
Однако пример DaemonSet из проекта {uri-cadvisor}[cAdvisor] также должен работать нормально.
Обратите внимание, что контейнеры cAdvisor должны работать с привилегированным контекстом безопасности, чтобы они могли получить доступ к среде выполнения контейнеров на каждом узле.
Вы можете изменить параметры --storage_duration и --housekeeping_interval по умолчанию, добавленные в аргументы контейнера cAdvisor, объявленные в файле cadvisor.yaml, чтобы настроить длительность скользящего окна хранения (по умолчанию 5m0s) и период выборки (по умолчанию 10s) соответственно.
Возможно, вам также потребуется указать путь к сокету среды выполнения контейнеров вашего кластера, если он не соответствует обычному соглашению.
== Горячие клавиши
[cols="1v,2v"] |=== |Keybinding |Описание
2+^.e|Общие
|kbd:[l], kbd:[Ctrl+l] |Вход
|kbd:[n] |Сменить текущее пространство имён
|[kbd:[Shift]+]kbd:[←], kbd:[→] + [kbd:[Alt]+]kbd:[1], ..., kbd:[9] |Навигация по экранам (используйте kbd:[Shift] или kbd:[Alt] внутри терминала exec)
|kbd:[Tab], kbd:[Shift+Tab] |Изменить фокус в активном экране
|kbd:[↑], kbd:[↓] |Навигация по списку / форме / логу
|kbd:[PgUp], kbd:[PgDn] |Перемещение на страницу вверх / вниз
|kbd:[Enter] |Выбрать элемент / отправить форму
|kbd:[Esc] |Закрыть модальное окно / отменить форму
|kbd:[Ctrl+z] |Закрыть текущий экран
|kbd:[q], kbd:[Ctrl+q] |Выход footnote:[Недоступно в веб-версиях.]
2+^.e|Вход
|kbd:[←], kbd:[→] |Навигация по конфигурациям Kube
2+^.e|Поды
|kbd:[Enter] |Выбрать под / переключить контейнеры
|kbd:[r] |Удалённая оболочка в контейнере
|kbd:[m] |Использование памяти
|kbd:[c] |Использование ЦП
|kbd:[t] |Использование сети
|kbd:[f] |Использование файловой системы
|kbd:[e] |События пода
|kbd:[Shift+e] |События пространства имён
|kbd:[Ctrl+e] |События кластера
|===
== ЧАВО (FAQ)
** Начиная с версии 0.8.0, Kubebox ожидает, что {uri-cadvisor}[cAdvisor] будет развёрнут как DaemonSet. Смотрите раздел <> для подробностей;
spec.nodeName field selector)$ kubectl auth can-i list pods -n cadvisor yes
== Разработка
$ git clone https://github.com/astefanutti/kubebox.git
$ cd kubebox
$ npm install
$ node index.js
== Скриншоты
События кластера: ++++
++++Оболочка в контейнере: ++++
++++Поддержка темы терминала: ++++
++++Веб-версия: ++++
++++