
PigeonEye 发布快速原生 Kubernetes GUI 和 CLI 工具
来源标题:PigeonEye is a fast, native Kubernetes GUI and CLI Tool
PigeonEye 是一款快速、原生的 Kubernetes GUI 工具,集群中所有资源类型(包括每个 CRD)都会自动显示,列与 kubectl get 输出一致。在拥有 23,770 个 pod 和 171,267 个事件的生产集群上测量,过滤 2.4 万行列表时每次按键约 0.5 毫秒,pod 变更约 0.2 毫秒落地。其速度来自 Table API 服务端列、流式分页、虚拟滚动、惰性全文索引、基于 watch 的增量更新和视图缓存。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
Kubernetes 集群的鸟瞰视图。比任何工具都快。
PigeonEye 是一款快速的原生 Kubernetes GUI。集群提供的每一种资源类型——包括每一个 CRD——都会自动显示出来,列与 kubectl get 打印的完全一致。
在拥有 23,770 个 pod 和 171,267 个事件的 production 集群上实测:
表格只渲染屏幕上的行(虚拟滚动),因此对 24k 行的列表进行过滤时,每次击键仍保持在约 0.5ms。打开列表后通过 watch 保持实时更新,再次访问某个视图时从缓存恢复 watch——无需重新 list——因此只会收到自那以后发生变化的内容。
保持实时更新的开销也很低。在那个 24k 行的列表上,一个 pod 发生变化大约 0.2ms 就能落地:事件只会与它所指名的行进行匹配,而不是重新索引整个列表;而且无论一次 rollout 同时退役多少个 pod,它们都会在单次遍历中离开。
速度的来源:server-side printer columns(Table API,每个视图一次请求——不做全对象同步)、流式分页、虚拟滚动、懒构建的全文索引、基于 watch 的增量更新(合并为批次),以及返回时恢复 watch 的视图缓存。
每种资源,零配置——kind 来自 Discovery API,因此每个 CRD 都会自动出现,并带有 kubectl get 打印的列。
列随你定——隐藏、拖动重排,以及从任意字段或 label 添加自定义列(相当于 kubectl -o custom-columns,但用点击代替输入)。把常用 kind 固定到你自己的分组中——也可以把集群本身组织成命名的 context 分组。
能真正找到东西的搜索——对每个字段做全文搜索,外加 regex、! 取反、按列值过滤和数值比较(> 500)。
一次搜索所有打开的集群——: pod api-server 会向所有集群提问,并说明每个结果来自哪个集群;选中一个结果会切换 tab、kind 和 namespace,并把光标落到对应行上。在你提问之前不产生任何开销,而已经浏览过的集群会从内存中作答。
拆分为两个实时视图——⌘\ 将两个完全独立的窗格并排摆放:不同的集群、kind 和 namespace,各自拥有自己的 watch、搜索、排序和详情面板。⌘← / ⌘→ 移动焦点;每个快捷键都作用于当前聚焦的窗格。
跨集群 Issues——一个 ⚠ 列表,汇集处于不良状态的 pod 和未 Ready 的节点,从每个已连接的集群收集并在后台刷新。↵ 直接跳转到对应资源所在的 tab。该列表是窗口化的,因此有四千个问题时打开速度和四个问题一样快——这一点很重要,因为恰恰在出事的时候它最长。
一眼看清 rollout——Deployments、StatefulSets、DaemonSets、ReplicaSets 和 Argo Rollouts 在副本仍在铺开时会带一个圆点,因此半完成的 rollout 无需打开就能看到。打开一个,它会告诉你 rollout 实际处在哪一步——Rolling out、Applying(spec 已改变,controller 尚未对其采取行动)、Not fully available、Paused、Stuck 或 Synced——并附上判定背后的副本数和 generation 数字,在稳定之前会自行刷新。
pod 为什么没起来,就在列表里——状态列显示 Pending;旁边的事件列显示 FailedScheduling,悬停其上会给出 0/50 nodes are available: insufficient cpu。那里只显示警告,因此空白单元格意味着没有问题,有文字的行才是需要关注的行。
分享确切的视图——复制一个指向该视图或单个资源的 peye:// 链接。打开它的人会落到相同的集群、kind、namespace 和行。
真正的日志查看器——follow、previous(崩溃的)容器、since 时间窗口、时间戳、视图内搜索、复制/下载,以及合并的 workload 日志。
Shell 与调试——pod exec、透明的特权节点 shell,以及镜像 pod 安全上下文的临时调试容器(可通过 restricted PodSecurity / Kyverno)。
安全的编辑与操作——带 dry-run 的 YAML server-side apply、从模板创建、scale、rollout restart / history / undo、drain、CronJob trigger、secret reveal、port-forward 管理器、实时 top 指标,以及 auth can-i。
能向你提问的登录方式——过期的 token 会在应用内的终端中重新登录(AWS SSO、gcloud、Teleport、Azure、OIDC),因此需要 OTP 或口令的 CLI 有地方可以询问。kubeconfig 的 exec 块只容纳一条命令,没有“先运行这个”的钩子,因此每个 context 也可以自带一条 pre-connect 命令——tsh login、堡垒机隧道、VPN——在连接前运行,并保存在你的机器上而不是共享的 kubeconfig 中。凭据确实已过期的集群会被移出后台轮询,直到你再次登录,因此会打开浏览器的凭据助手(aws-vault、oidc-login)绝不会在你不知情的情况下被定时器重新执行。
键盘优先、颜色编码的多集群 tab、浅色/深色主题,以及应用内更新——顶栏会标记新版本并原地升级,无需 brew。
对比 k9s 与 Lens
PigeonEye
k9s
Lens/OpenLens
原生 GUI
✅
终端
Electron
在 24k pod 集群上的冷启动
约 0.35s 首屏
快
慢(全量同步)
所有 CRD / 聚合 API,零配置
✅
✅
✅
Regex / 取反 / 数值 / 按列过滤
✅
regex/!
基础
日志:previous · since · 搜索 · 下载
✅
✅
✅(仅 Lens)
合并的 workload/Service 日志
✅
✅
部分
临时调试容器(策略安全)
✅
—
—
节点 shell(nsenter)
✅
需手动启用
✅
Secret 解码 / reveal
✅
✅
✅
apply 前的 server dry-run
✅
—
—
从模板创建
✅
空白 YAML
✅
Rollout history / undo
✅
✅
✅
CronJob trigger / suspend
✅
✅
—
节点与 pod 指标列(metrics-server)
✅
✅
需要 Prometheus
auth can-i / 权限
✅
反向查找
RBAC 视图
跨所有打开的集群按名称搜索
✅
—
—
并排两个独立窗格
✅
—
—
一个列表中跨所有集群的问题资源
✅
—
—
深链到确切视图 / 资源
✅
—
—
登录重新认证,包括会弹出提示的 CLI(OTP)
✅
—
—
按 context 的 pre-connect 命令(隧道 / tsh login)
✅
—
—
时间序列指标图表
—
—
✅(Prometheus)
Helm / 扩展 / xray 树 / linter
—
xray/popeye/插件
Helm/扩展
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。