= Kubebox [small]#^⎈❏^# Antonin Stefanutti https://github.com/astefanutti[@astefanutti] // Meta :description: 用于Kubernetes的终端和Web控制台 // 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] 提供,与 Kubernetes Master API 的通信通过服务器代理。
要在 Kubernetes 集群中部署服务器,请运行:
$ kubectl apply -f https://raw.github.com/astefanutti/kubebox/master/kubernetes.yaml
若要关闭服务器并清理资源,请运行:
$ kubectl delete namespace kubebox
为了使 Ingress 资源生效,集群必须运行 Ingress 控制器。 更多信息请参见 {uri-ingress-controllers}[Ingress 控制器]。
另外,要在 OpenShift 集群中部署服务器,请运行:
$ oc new-app -f https://raw.github.com/astefanutti/kubebox/master/openshift.yaml
=== Kubectl
您可以使用 kubectl 以 集群内 客户端的方式运行 Kubebox,例如:
$ kubectl run kubebox -it --rm --env="TERM=xterm" --image=astefanutti/kubebox --restart=Never
如果启用了 RBAC,您需要使用 --serviceaccount 选项并引用具有足够权限的服务账户。
=== Docker
您可以使用 Docker 运行 Kubebox,例如:
$ 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。 请注意,此地址需要与 API 服务器允许的 CORS 来源相匹配。 可以通过 {uri-kube-apiserver}[Kubernetes API 服务器 CLI] 实现,例如:
$ kube-apiserver --cors-allowed-origins .*
== 认证
我们尽力支持 kubectl 支持的各种认证策略,以便与您的本地设置无缝集成。以下是 Kubebox 支持的不同认证策略,具体取决于您的使用方式:
[cols="<,^,^,^",options="header"] |=== ||可执行文件|Docker|在线
|OpenID Connect |{icon-check} |{icon-check} |{icon-check}footnote:[自定义 IDP 证书颁发机构文件在 Web 版本中不受支持。]
|Amazon EKS| {icon-check} | |
|Digital Ocean |{icon-check} | |
|Google Kubernetes Engine| {icon-check} | | |===
如果您使用的模式不受支持,可以手动刷新认证令牌/证书,并相应地更新您的 kubeconfig 文件。
== cAdvisor
Kubebox 依赖 {uri-cadvisor}[cAdvisor] 来获取资源使用指标。 在 0.8.0 版本之前,Kubebox 使用 Kubelet 中嵌入的 cAdvisor 端点。然而,这些端点已被弃用,最终将被移除,详见 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 配合使用。
不过,来自 {uri-cadvisor}[cAdvisor] 项目的 DaemonSet 示例也应该正常工作。
注意,cAdvisor 容器必须使用 特权 安全上下文运行,以便能够访问每个节点上的容器运行时。
您可以更改 cadvisor.yaml 文件中 cAdvisor 容器参数中默认的 --storage_duration 和 --housekeeping_interval 选项,分别调整存储滑动窗口的持续时间(默认为 5m0s)和采样周期(默认为 10s)。
如果集群的容器运行时套接字路径不符合常规惯例,您可能还需要提供该路径。
== 热键
[cols="1v,2v"] |=== |快捷键 |说明
2+^.e|通用
|kbd:[l], kbd:[Ctrl+l] |登录
|kbd:[n] |切换当前命名空间
|[kbd:[Shift]+]kbd:[←], kbd:[→] + [kbd:[Alt]+]kbd:[1], ..., kbd:[9] |导航屏幕 + (在执行终端内使用 kbd:[Shift] 或 kbd:[Alt])
|kbd:[Tab], kbd:[Shift+Tab] |在活动屏幕内切换焦点
|kbd:[↑], kbd:[↓] |浏览列表/表单/日志
|kbd:[PgUp], kbd:[PgDn] |上/下翻一页
|kbd:[Enter] |选择项目/提交表单
|kbd:[Esc] |关闭模态窗口/取消表单
|kbd:[Ctrl+z] |关闭当前屏幕
|kbd:[q], kbd:[Ctrl+q] |退出 footnote:[在 Web 版本中不可用。]
2+^.e|登录
|kbd:[←], kbd:[→] |浏览 Kube 配置
2+^.e|Pod
|kbd:[Enter] |选择 Pod / 循环切换容器
|kbd:[r] |远程进入容器 Shell
|kbd:[m] |内存使用情况
|kbd:[c] |CPU 使用情况
|kbd:[t] |网络使用情况
|kbd:[f] |文件系统使用情况
|kbd:[e] |Pod 事件
|kbd:[Shift+e] |命名空间事件
|kbd:[Ctrl+e] |集群事件
|===
== FAQ
** 从 0.8.0 版本开始,Kubebox 期望 {uri-cadvisor}[cAdvisor] 部署为 DaemonSet。更多细节参见 <> 章节;
spec.nodeName 字段选择器选择)$ kubectl auth can-i list pods -n cadvisor yes
== 开发
$ git clone https://github.com/astefanutti/kubebox.git
$ cd kubebox
$ npm install
$ node index.js
== 截图
集群事件: ++++
++++进入容器 Shell: ++++
++++终端主题支持: ++++
++++Web 浏览器版本: ++++
++++