为什么选择 k10s
集群仪表盘是你一天要打开二十次的东西,通常是在出状况的时候。真正重要的两件事是它打开的速度有多快以及你需要记住的东西有多少。
- 没有任何东西藏在需要记忆的按键后面。适用于你所选对象的操作就列在那里,在它们自己的面板中。点击一个,或按旁边的字母。
- 你的鼠标可用。点击一行,点击一个面板,点击
[ zoom ],点击ns default ▾,滚动表格。每个边框按钮都是真实的。 - 一个搜索框覆盖整个集群。
ctrl+p同时搜索资源类型和对象。无需学习前缀语法。 - 它即时打开。启动时注册零个监听,不等待任何东西——informer 按类型惰性启动,在你第一次查看某个类型时。打开 Pods 只监听 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 #示例集群——假数据,明确标注 go run 。 #你的真实集群,如果没有则为“No cluster”
演示是一个上下文,而不是一种模式。k10s demo打开时就在它上面,/demo从任何地方切换到它,并且:ctx始终列出它(标注为k10s demo · sample data,列表下方有图例)。要离开它,
选择任何其他上下文- 没有单独的退出方式。当它处于激活状态时,
标题栏会带有一个DEMO标记,因此它的任何一帧都不会被误认为是真实的
集群。
Plaink10s读取相同的 kubeconfigkubectl也会($KUBECONFIG,否则~/.kube/config)并显示该上下文能触及的内容——仅此而已。
没有 kubeconfig,或某个上下文的 API 服务器无响应时,主
面板会显示No cluster并指向进入的方式:r重试,:ctx选择
另一个上下文,/setup带有 kubectl 和 kubeconfig 链接。docs/cluster-setup.md是同一份指南,篇幅更长。
Install
curl -fsSL https://p10node.com/k10s/install.sh | shmacOS 和 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,带版本号
预构建的静态二进制文件,适用于darwin/amd64、darwin/arm64、linux/amd64、 linux/arm64 和 windows/amd64会在每个 tag 发布——Windows 是 安装脚本会将其指向发布页面的唯一平台。之后的每次 升级都只是:
k10s update
然后运行它:
k10s #你当前的 kubeconfig 上下文 k10s demo #内置的示例集群,无需真实集群 k10s --readonly #只看,不碰:不做任何改变集群的操作 k10s --version #这是哪个构建版本
你会得到什么
每一种资源,都按你思考它们的方式分组
30 种类型,涵盖Workloads · Network · Config · Storage · RBAC · Cluster · Custom Resources,每一种都带有当前命名空间的实时行数。 你的 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 工具包,一键搞定
ddescribe |
真实kubectl describe输出,来自 API |
yYAML |
实时对象 |
l日志 |
跟随(-f),最新的在底部,可回滚 500 行 |
sshell |
一个真正的交互式 exec 会话 - 原生 TTY,支持窗口大小调整,面板内运行 |
pport-forward |
真正的 SPDY 转发,可在面板中启动/停止 |
mtop |
pod/node 指标,按容器细分,含 requests 与 limits 对比 |
eedit ·rrestart ·cscale |
rollout restart、scale、$EDITOR |
o/u |
cordon-uncordon / drain - 仅在选中 Nodes 时提供 |
Ddelete |
红色确认弹窗,因为这事就该让人害怕 |
用核心 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 仍在同步时显示 "no resources found"。
- Namespace 和 context 选择器,从不需要你手动输入名称。
- 没有设置界面。首次运行即打开集群;每项设置都有可用的默认值,
/settings需要时只需一次按键即可调出。 - 可扩展的提示框(
ctrl+z)——因为一条很长的 kubectl 命令或一个 AI 问题,塞不进一个会横向滚动的单行输入框。 - 终端过小的提示而不是错乱的布局。
来自 k9s 的用户
k10s 的存在是因为k9s。该致敬就致敬:k9s 成熟、范围庞大、可通过插件扩展,正是它让我们这一代人不再整天敲kubectl get pods。
k10s 更年轻,也刻意更窄。区别在于理念:
| k9s | k10s | |
|---|---|---|
| 主要输入方式 | 键盘优先、命令驱动 | 鼠标和键盘,同等重要 |
| 发现方式 | 你得学会那些命令 | 所选对象的操作会列在屏幕上 |
| 搜索 | 每个视图内的过滤器,外加:用于在视图之间跳转 |
一个输入框(ctrl+p)覆盖各种 kind和对象 |
| AI | 属于插件领域 | 内置,并注入集群上下文 |
| 范围 | 非常大,有插件生态 | 小、有主见、兼容核心命令插件 |
| 升级 | 由你的包管理器负责 | k10s update,自我替换 |
使用 k9s,如果你想要最大的功能面、完整的插件生态,以及多年生产环境的历练。使用 k10s,如果你想要一个能交给从未打开过 TUI 的队友,并让他们在logs十秒内自己找到
按键
简短版——完整参考在这里。
| 按键 | 操作 |
|---|---|
tab/shift+tab |
循环切换窗格 |
↑↓(j/k)·pgup/pgdn·g/G |
移动 · 翻页 · 首/末 |
| 输入(Resources 聚焦时) | 即时 kind 过滤 ·esc清除 |
f |
find:搜索当前打开表格的每一列 |
ctrl+p |
搜索一切——kind 和对象都在一个输入框里 |
enter/ 双击 |
打开它:有日志就显示日志,否则显示 describe |
z |
缩放 / 恢复中央窗格 |
:// |
命令提示符(带建议弹窗) |
ctrl+a |
AI 提示模式 ✦ |
T/ctrl+t |
循环切换主题 |
ctrl+s |
复制模式——松开鼠标即可选择并复制 |
| 点击 / 滚轮 | 点击窗格任意位置即可选中它,包括空白区域 |
q/ctrl+c |
退出 |
命令
两个前缀,每个前缀只显示自己那一组。/是 k10s 自身(主题、设置、更新)。:是集群,沿用 k9s 的词汇——一个资源视图、namespace、context,或对屏幕上内容执行操作的某个东西。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运行,上限 30s,不附加终端(在 pod 上使用s来获得交互式 shell)。完整命令参考。
配置
k10s 打开时使用kubeconfig 的 current-context—— 也就是会与之通信的kubectl集群。:ctx <name>在不改动 kubeconfig 的情况下为本次会话切换;kubectl config use-context决定下次打开时指向哪里。
主题、命名空间、折叠的侧边栏分组、AI 设置和更新检查会持久化到~/.k10s/config.yaml(可用K10S_CONFIG覆盖),每次更改都会保存。参见config.md。
注意:AI API key 以明文形式存储在该文件中(权限 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 #从源码运行 just shot 140 44 #无头渲染一帧 - 不需要 TTY,不需要集群 just screenshot #从真实终端捕获 README 主视觉图(vhs) just check #fmt + vet + test,按最快失败的顺序执行
cmd/shot正是这一点让这里的 UI 工作很愉快:你可以迭代布局、重放按键(just shot 140 44 j,j,d)并对帧做 diff,无需终端或集群。这些文档里的内容都不是手绘的 - 帧来自那个渲染器,主视觉图来自just screenshot在真实终端中驱动真实二进制文件。
适合新手的问题位于roadmap.md → possible next steps:更多种类、点击排序的列、多选批量删除、在日志流内 grep、保存的视图。
诚实的现状:每条实时路径都是针对真实的 client-go/kubectl API 实现的,并由使用 fake 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 它、在你的公司内部发布它。
