跳到正文
Hacker News· pierreneter·· 10 天前AI 评分22

k10s:一款可点击的 Kubernetes TUI(Go、Bubble Tea)

Show HN: K10s – A Clickable Kubernetes TUI (Go, Bubble Tea)

AI 导读

k10s 是一款用 Go 和 Bubble Tea 构建的可点击 Kubernetes 终端界面,所有操作都列在选中对象旁的独立面板中,支持鼠标点击或按键执行,无需记忆快捷键。

正文 · AI 翻译

k10s running in a terminal: resource sidebar, pod table with live status, and an action pane for the selected pod

这是 k10s demo 在离线演示后端上运行的真实终端截图 - just screenshot。这些文档中的每一帧都来自运行中的二进制文件,绝非手绘。

为什么选择 k10s

集群仪表盘是你一天要打开二十次的东西,通常是在出问题的时候。真正重要的只有两件事:打开速度有多快,以及你需要记住的东西有多少。

  • 没有任何功能藏在需要记忆的快捷键后面。适用于你所选对象的操作就列在旁边的窗格中。点击一个,或按下它旁边的字母。
  • 鼠标可用。点击一行、点击一个窗格、点击 [ zoom ]、点击 ns default ▾、滚动表格。每个边框按钮都是真实的。
  • 一个搜索框覆盖整个集群。ctrl+p 同时搜索资源类型和对象。无需学习前缀语法。
  • 瞬间打开。启动时注册零个 watch,不等待任何东西 - informer 按类型惰性启动,首次查看时才启动。打开 Pods 只 watch pods,而不是你拥有的每个 Secret 和 Event。(实现方式及回归防护)
  • 能看见屏幕的 AI。ctrl+a,用自然语言提问。当前上下文、命名空间、类型和选中对象会被注入到提示中,所以“这个 pod 为什么不健康?”指的就是这个 pod。
  • 自我更新。/update 在运行中的二进制文件上安装最新版本 - 校验和验证、原子操作,并提示重启以使用新版本。
  • 你的 k9s 风格命令插件也能用。将作用域快捷键放在 ~/.k10s/plugins.yaml 中;它们会出现在内置操作旁边,并接收选中的对象、命名空间、上下文和列值。

30 秒内试用(无需集群)

k10s 附带一个离线演示后端:一个逼真的集群供你点击浏览,包括一个可以戳一戳的 CrashLoopBackOff。它是选择性启用的,因为示例数据绝不应被误认为是你的机器。

git clone https://github.com/p10node/k10s && cd k10s
go run . demo     # the sample cluster - fake data, clearly labelled
go run .          # your real cluster, or "No cluster" if there isn't one

演示是一个上下文,不是一种模式。k10s demo 打开它,/demo 从任何地方切换到它,:ctx 总是列出它(标记为 k10s demo · sample data,列表下方有图例)。要离开它,选择任何其他上下文 - 没有单独的退出方式。当它处于活动状态时,标题栏会带有一个 DEMO 标记,因此它的任何一帧都不会被误认为是真实集群。

普通的 k10s 读取与 kubectl 相同的 kubeconfig($KUBECONFIG,否则 ~/.kube/config),并显示该上下文能访问的内容 - 仅此而已。如果没有 kubeconfig,或者上下文的 API 服务器无响应,主面板会显示无集群并指出进入方式:r 重试,:ctx 选择另一个上下文,/setup 提供 kubectl 和 kubeconfig 链接。docs/cluster-setup.md 是同一份指南的详细版本。

安装

curl -fsSL https://p10node.com/k10s/install.sh | sh

macOS 和 Linux,amd64 和 arm64。它会选择正确的预构建二进制文件,根据发布清单验证其 sha256,并将其安装到 /usr/local/bin(或当需要密码而无法询问时安装到 ~/.local/bin)。--dir、--version 和 --no-sudo 在 docs/install.md 中,还包括如何在运行前阅读它以及匹配的 uninstall.sh。

如果机器上有 Go:

go install github.com/p10node/k10s@latest

或者从克隆的仓库安装,这还会将版本信息写入二进制文件:

git clone https://github.com/p10node/k10s && cd k10s
just install                 # → $GOBIN/k10s, version-stamped

每个标签都会发布适用于 darwin/amd64、darwin/arm64、linux/amd64、linux/arm64 和 windows/amd64 的预构建静态二进制文件 — Windows 是安装脚本唯一会引导至 发布页面 的平台。之后的每次升级只需:

k10s update

然后运行它:

k10s                  # your current kubeconfig context
k10s demo             # the built-in sample cluster, no cluster needed
k10s --readonly       # look, never touch: nothing that changes the cluster
k10s --version        # which build is this

你将获得什么

所有资源,按你思考它们的方式分组

涵盖 Workloads · Network · Config · Storage · RBAC · Cluster · Custom Resources 共 30 种,每种都带有当前命名空间的实时行数。你的 CRD 会被自动发现——无需配置。

分组可折叠:space、left 或点击标题,重启后仍会记住,其中 Config/Storage/RBAC 默认折叠。折叠的分组也不会向你的集群请求任何内容——侧边栏决定哪些种类会被计数,计数是对每个可见种类发起一次 limit=1 请求,每次六个,被拒绝的会被记住。

Pods · Deployments · ReplicaSets · StatefulSets · DaemonSets · Jobs · CronJobs · HPAs · Services · Endpoints · Ingresses · NetworkPolicies · ConfigMaps · Secrets · ResourceQuotas · LimitRanges · PDBs · PVCs · PVs · StorageClasses · ServiceAccounts · Roles · RoleBindings · ClusterRoles · ClusterRoleBindings · Nodes · Namespaces · Events · CRDs · Custom Resources

整套 day-2 工具包,一键直达

d describe 来自 API 的真实 kubectl describe 输出
y YAML 实时对象
l logs 跟随(-f),最新在底部,可回滚 500 行
s shell 真正的交互式 exec 会话——原始 TTY、感知尺寸变化、面板内运行
p port-forward 真正的 SPDY 转发,可在面板中启动/停止
m top pod/node 指标,按容器显示,含 requests 与 limits 对比
e edit · r restart · c scale rollout restart、scale、$EDITOR
o / u cordon-uncordon / drain——仅在选中 Nodes 时提供
D delete 红色确认弹窗,因为它就该让人害怕

使用核心 k9s plugins.yaml 格式添加你自己的限定范围操作。它们可以运行前台或后台命令、请求确认、有意覆盖内置快捷键,并且可在同一面板中点击。参见插件指南和可安装示例。

在你原本就在看的面板中跟随日志(z 可放大)

╭─ logs -f billing-worker-6f8d9c5b7-qq91x ────────────────────────────────── [ close ] [ restore ] ╮
│   8 2026-08-25T08:12:18.331Z INFO  http          GET  /v1/users/me         200 3.1ms             │
│     trace=44b1e2f9                                                                               │
│   7 2026-08-25T08:12:21.660Z INFO  worker        flushed batch size=250 dur=41ms                 │
│   6 2026-08-25T08:12:25.019Z INFO  http          GET  /healthz             200 0.3ms             │
│   5 2026-08-25T08:12:31.402Z INFO  http          DELETE /v1/sessions/9a1   204 5.7ms             │
│     trace=7c0d19ba                                                                               │
│   4 2026-08-25T08:12:33.881Z WARN  gc            pause=18ms heap=412Mi                           │
│   3 2026-08-25T08:12:40.117Z INFO  http          GET  /v1/orders/88213     200 7.4ms             │
│     trace=e21f8b05                                                                               │
│   2 2026-08-25T08:12:44.590Z INFO  metrics       scrape ok series=1842                           │
│   1 2026-08-25T08:12:51.008Z INFO  http          GET  /healthz             200 0.3ms             │
│ ● following  newest at bottom                                        500 loaded · ↑ for older    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

一个已经带有上下文的 AI 提示

╭─ Prompt · plain text → AI · /commands still work · esc close ─ [ grow ] [ AI · claude-sonnet-5 ] ╮
│ ✦ ask about your cluster…   ·   /settings to change provider/model                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
 ● AI mode — plain text goes to claude-sonnet-5    tab panes · enter open · ctrl+p search · f find…

ctrl+a 可切换它。自带密钥——OpenAI 兼容(因此也支持 Groq、Together、OpenRouter、vLLM、Ollama、LM Studio、任何本地网关)或 Anthropic。回答会以普通文本视图打开,可滚动、放大和关闭。除非你在 AI 模式下按回车,否则不会有任何集群数据离开你的机器。k10s 自行发起的唯一其他网络调用是每天一次的更新检查,它只向 GitHub 询问版本号,仅此而已。

八种内置主题,外加你自己的——实时预览

tokyo-night(默认)· catppuccin-mocha · dracula · nord · gruvbox-dark · solarized-dark · solarized-light · matrix

T 循环切换,/theme 打开一个选择器,在你浏览列表时逐个应用每个主题——你是在真实 UI 上评判它,而不是凭名字——esc 则恢复你原来的设置。把 YAML 调色板放入 ~/.k10s/themes,重启,它就会出现在同一个选择器中——无需重新构建。参见自定义主题指南和可安装演示。

只有漫长一天之后才会显现的细节

  • 复制模式(ctrl+s)会释放鼠标,让你的终端可以拖拽选择并复制——这是每个捕获鼠标的 TUI 都会破坏的一件事。
  • 诚实的加载状态,而不是在 watch 仍在同步时显示“未找到资源”。
  • 从不要求你输入名称的命名空间和上下文选择器。
  • 没有设置界面。首次运行即打开集群;每项设置都有可用的默认值,想要时按一下 /settings 即可。
  • 可增大的提示输入框(ctrl+z)——因为一行高、横向滚动的字段装不下长长的 kubectl 命令或 AI 问题。
  • 终端过小提示,而不是乱码的布局。

来自 k9s

k10s 的存在是因为 k9s。功劳该给谁就给谁:k9s 成熟、范围庞大、可通过插件扩展,正是它让我们这一代人不再整天敲 kubectl get pods。

k10s 更年轻,也刻意更窄。区别在于理念:

k9s k10s
主要输入方式 键盘优先、命令驱动 鼠标和键盘,同等重要
发现方式 你得去学那些命令 所选对象的可用操作会列在屏幕上
搜索 按视图过滤,外加 : 在视图间跳转 一个输入框(ctrl+p)同时覆盖类型和对象
AI 插件领域 内置,并注入集群上下文
范围 非常大,插件生态 小巧、有主见、核心命令插件兼容
升级 你的包管理器 k10s update,自我替换

在以下情况用 k9s:你想要最大的功能面、完整的插件生态,以及多年生产环境的历练。在以下情况用 k10s:你想要一个能交给从未打开过 TUI 的队友、让他们十秒内自己找到 logs 的东西。

按键

简版——完整参考在这里。

按键 操作
tab / shift+tab 循环切换窗格
↑↓(j/k)· pgup/pgdn · g/G 移动 · 翻页 · 首/尾
输入(资源聚焦时) 即时类型过滤 · esc 清除
f 查找:搜索当前打开表格的每一列
ctrl+p 搜索一切——类型和对象在一个框里
enter / 双击 打开它:有日志就显示日志,否则显示 describe
z 缩放 / 还原中央窗格
: / / 命令提示符(带建议弹窗)
ctrl+a AI 提示模式 ✦
T / ctrl+t 循环切换主题
ctrl+s 复制模式——松开鼠标即可选择并复制
点击 / 滚轮 点击窗格任意位置即可选中它,包括空白处
q / ctrl+c 退出

命令

两个前缀,各自只显示自己那一套。/ 是 k10s 本身(主题、设置、更新)。: 是集群,沿用 k9s 的词汇——资源视图、命名空间、上下文,或对屏幕上内容执行的操作。enter 会立即运行高亮的建议——无需再走一遍提示符。

/theme  /settings  /mouse  /update  /version  /demo  /setup  /help    k10s itself

:po  :deploy  :rs  :sts  :ds  :job  :cj  :hpa      workloads
:svc  :ep  :ing  :netpol                           network
:cm  :sec  :quota  :limits  :pdb                   config
:pvc  :pv  :sc                                     storage
:sa  :role  :rb  :crole  :crb                      rbac
:no  :ns  :ev  :crd  :cr                           cluster + custom

the short form is what the popup lists; every kind also answers to its
plural and singular - :pods, :pod, :deployments, :persistentvolumes ...
and `:aliases` prints the lot

:po kube-system                 that kind, in that namespace (`all` works)
:svc api                        an argument that is not a namespace filters
:ns   :ctx                      namespace / context picker
:ns <name>   :ctx <name>        switch either outright
:aliases  :search <term>  :filter <term>  :scale <n>  :q

/ 是 k10s,: 是集群——命名空间和上下文是 :ns 和 :ctx,不是 /ns 和 /context。:aliases 会打印完整的 : 词汇表。

任何不是 / 或 : 命令的内容都会作为 shell 命令运行,其输出会在主面板中打开——date、kubectl get pods -o wide、helm list。通过你自己的 $SHELL 运行,上限 30 秒,不附带终端(要在 pod 上获得交互式 shell,请使用 s)。完整命令参考。

配置

k10s 打开时使用 kubeconfig 的 current-context——也就是 kubectl 会连接的那个集群。:ctx <name> 会在本次会话中切换而不改动 kubeconfig;kubectl config use-context 才会改变下次打开时的位置。

主题、命名空间、折叠的侧边栏分组、AI 设置和更新检查会持久化到 ~/.k10s/config.yaml(可用 K10S_CONFIG 覆盖),每次更改都会保存。参见 config.md。

注意:AI API 密钥以明文存储在该文件中(权限 0600),并在 UI 中打码显示。如果这在你的环境中不可接受,就留空,AI 模式便会保持关闭。

文档

architecture.md 包、Source 边界、渲染管线、鼠标区域
performance.md 惰性监听、低成本计数,以及保持其快速的防护措施
ui.md 布局、窗格、焦点、缩放、覆盖层
keybindings.md 完整按键 + 鼠标参考
commands.md 提示模式、斜杠命令、AI 设置
themes.md 主题列表、选择器、调色板约定
config.md · update.md 哪些内容会持久化 · 自更新如何工作
cluster-setup.md 没有集群?安装 kubectl 并获取一个 ~/.kube/config
backends.md · dev.md 实时后端 vs 演示后端 · 构建、测试、无头渲染器
roadmap.md 已完成的内容、缺失的内容,以及已知的限制
marketing.md · build-in-public.md 这个项目是如何被分享的

贡献

门槛是刻意设低的。just 列出了每一个配方:

just dev            # run from source
just shot 140 44    # render one frame headlessly - no TTY, no cluster
just screenshot     # capture the README hero from a real terminal (vhs)
just check          # fmt + vet + test, in the order that fails fastest

cmd/shot 正是这里 UI 工作令人愉快的原因:你可以迭代布局、重放按键(just shot 140 44 j,j,d)并对比帧,而无需终端或集群。这些文档中没有任何内容是手工绘制的——帧来自那个渲染器,主图来自 just screenshot 在真实终端中驱动真实二进制文件。

适合新手的问题位于 roadmap.md → possible next steps:更多种类、点击排序列、多选批量删除、在日志流中 grep、保存的视图。

诚实的现状:每条实时路径都是针对真实的 client-go/kubectl API 实现的,并由使用假 clientset 的测试覆盖,但作者尚未在生产集群上对这个代码树进行冒烟测试。请先在 kind 上试用。已知限制列在路线图中,而不是被埋没。

致谢

致我的同事们——你们的问题、肩并肩的调试会话,以及“你能帮我看看那个 pod 是不是在运行吗?”的询问,正是这个项目存在的全部原因。k10s 不是作为一个项目而构建的;它的构建是为了让查看我们的集群不再是你一天中烦人的部分。其中的每一个面板都是对你们中某个人问我的某个问题的回答。感谢你们的启发、耐心,以及作为第一批用户。

Cảm ơn các đồng nghiệp của tôi - repo này được viết ra để phục vụ các bạn, và chính các bạn là nguồn cảm hứng cho k10s.

致 @derailed 和 k9s,感谢你们证明了 Kubernetes TUI 可以成为你真正愿意打开的东西。

致 Charm——Bubble Tea、Lip Gloss、Bubbles——以及致 BubbleZone,正是它让这一切变得可点击。

许可证

Apache-2.0——与 Kubernetes、Helm 和 k9s 相同的许可证。使用它、fork 它、在你的公司内部发布它。

来源:Hacker News · github.com