Lens — Kubernetes 集群的桌面 IDE
是什么
Lens 是一个专门用来管 Kubernetes 集群的桌面应用。日常类比:像 VS Code,但打开的不是代码文件夹,而是一整个 K8s 集群——左侧树是命名空间和资源,右侧编辑面板是 YAML 和实时日志,下方 terminal 已经登好 kubectl。
你常用的命令:
kubectl get pods -n productionkubectl logs -f my-app-7d8f9kubectl exec -it my-app-7d8f9 -- shkubectl edit deployment my-app在 Lens 里全都变成点击:左侧选 production 命名空间,点 pod 名字看 status,点 Logs 标签看实时日志,点 Pod Shell 直接进容器,点 Edit 弹出 YAML 编辑器。底层仍然是同一份 kubectl,但日常 90% 的操作不用记命令。
为什么重要
不理解 Lens 这类工具的存在理由,就解释不了下面这些事:
- 为什么运维一个人能稳稳管 5 个以上集群——不是他记忆力好,是工具替他切 context
- 为什么”K8s 学习曲线陡”和”K8s 在企业普及”可以同时成立——下沉给开发者的入口靠这类 IDE
- 为什么开源协议会从 MIT 转成 BSL(Business Source License)——商业可持续 vs 社区信任的拉扯
- 为什么 CNCF 后来出了官方的 Headlamp——前车之鉴让基金会不想再依赖单一公司
核心要点
Lens 把三件事捏成一个体验:
-
多集群聚合:你把多份
kubeconfig文件同时挂进来——dev、stage、prod、海外、客户——左侧 catalog 一键切换。类比:浏览器的多账户切换,cookie 各自独立但 UI 共享。底层做法是每个集群起一个独立 kubectl proxy,UI 按当前选中的集群路由请求。 -
kubectl 在你看不见的地方:Lens 内置了多版本 kubectl 二进制,发现你的集群是 v1.28 就用 v1.28 对应的 kubectl。terminal 标签打开就是
kubectl --kubeconfig=... --context=...已经预设好的 shell。类比:像 nvm 自动给你切 Node 版本,你不用想。 -
Helm + Prometheus 内嵌:Helm Chart 直接在 UI 里搜索、安装、升级;集群里如果有 Prometheus,Lens 自动检测并把 CPU/内存/网络画成图表叠到资源详情页。类比:把
helm install和 Grafana 简化版捏到同一个窗口里,少开两个 tab。
实践案例
案例 1:挂 kubeconfig
ls ~/.kube/config # 默认集群prod-config # 生产eks-staging # AWS EKS
export KUBECONFIG=~/.kube/config:~/.kube/prod-config:~/.kube/eks-staging打开 Lens,左侧 Catalog 自动出现三个集群条目。逐部分解释:
KUBECONFIG环境变量用:分隔多份配置文件,Lens 启动时合并读取- 不同集群的
current-context互不干扰——切换是改 UI 选中态,不是改文件 - 每个集群点开后 Lens 起一个独立 kubectl proxy 进程在本地随机端口
案例 2:写一个 Lens 扩展
import { Renderer } from "@k8slens/extensions";
export default class MyExtension extends Renderer.LensExtension { clusterPages = [ { id: "my-page", components: { Page: () => <div>我的自定义集群页面</div>, }, }, ];}写完打成 npm 包,用户在设置里装上就能在左侧菜单看到自定义页面。CRD(自定义资源)的可视化通常这样写——比如 Argo CD、Istio、Cert-Manager 都有官方/社区扩展。
案例 3:BSL 后社区怎么应对
# OpenLens:去掉 Mirantis 统计的社区 forkbrew install --cask openlens
# Headlamp:CNCF 官方 Web/桌面双形态brew install --cask headlamp
# k9s:终端 TUI,零 GUI 依赖brew install k9s三者各有取舍:OpenLens 跟 Lens 几乎一样但不再随原版升级;Headlamp 有 CNCF 背书更安全但功能不如 Lens 全;k9s 极轻量但要记快捷键。
踩过的坑
-
Lens Desktop 现在要登录 Lens ID 才能用:Mirantis 在 Personal 版强制登录,引发”为啥本地工具要联网”的争议。隔离环境(金融、政府)直接不能装,只能换 OpenLens 或 Headlamp。
-
BSL 不是 OSI 认证开源:Business Source License 在 4 年后才转 Apache 2.0,期间禁止”做成 SaaS 卖给别人”。企业法务要看清楚——内部使用没事,但拿去做托管服务卖钱不行。
-
Electron 内存吃得猛:单实例 600MB+ 起步,挂 5 个集群轻松到 2-4 GB。内存紧张的开发机建议同时只挂当前要用的集群,或者换 k9s。
-
EKS / GKE 的 exec credential plugin 要 PATH:kubeconfig 里写
aws eks get-token这种 exec plugin,Lens 启动时的 PATH 不一定有 aws CLI。Mac 上要么从 terminalopen -a Lens启动让 PATH 继承,要么在 Lens 设置里手动加 PATH。
适用 vs 不适用场景
适用:
- 同时管 3+ 集群、每天要切换的运维或 SRE
- K8s 新人——可视化降低了”先学 50 个 kubectl 子命令”的门槛
- 给业务开发提供”看自己 pod 日志 + exec 进去调试”的入口,不教完整 kubectl
- 想顺便看资源指标但又不想搭完整 Grafana
不适用:
- 隔离环境 / 金融政府场景(强制登录 Lens ID)→ 换 OpenLens 或 Headlamp
- CI/CD 自动化场景——脚本里就该用 kubectl/helm CLI,不是 GUI
- 内存紧张的老笔记本 → 换 k9s(终端 TUI,几十 MB 内存)
- 需要完全开源协议 → 选 Headlamp(Apache 2.0)
历史小故事(可跳过)
- 2014 年:芬兰公司 Kontena 做 K8s 商业产品,内部工具 Lens 还没开源。
- 2019 年:Kontena 把 Lens 以 MIT 协议开源,定位”K8s IDE”,迅速积累 stars。
- 2020 年:Mirantis(Docker Enterprise 的接盘方)收购 Kontena,Lens 成为 Mirantis 产品线之一。
- 2022 年:Mirantis 把 Lens Desktop 转 BSL,理由是”商业可持续”。社区当天 fork 出 OpenLens,去掉 Mirantis 的遥测和登录强制。
- 2023 年:Lens Cloud / Lens Pro 付费订阅上线;Lens Desktop 个人版仍免费但强制登录 Lens ID。
- 2024 年:CNCF 把 Headlamp 收为沙箱项目,作为”中立、永远 Apache 2.0”的替代。
学到什么
-
桌面 IDE 模式可以适配任何”远端复杂系统”:K8s 的 kubectl 体验差,Lens 用”挂载 + 树形 + 编辑面板”模式封装。同样思路可以套到数据库(DBeaver、TablePlus)、消息队列(Offset Explorer)等任何”有 endpoint + 多对象 + 操作命令”的系统。
-
协议变更会立刻被社区 fork:MIT → BSL 的代价是失去信任。OpenLens 当天就出现,说明开源生态的”叛逆能力”非常强——商业方真要转协议要算清楚是不是值得。
-
CNCF 生态有 anti-fragile 机制:Lens 出问题,CNCF 立刻把 Headlamp 拉成官方替代。基金会的存在价值之一就是”单点故障的备胎”。
-
多 kubeconfig 合并:
KUBECONFIG=a:b:c这个 trick 不光 Lens 用,所有 K8s GUI 都靠它,是日常运维必备的环境变量技巧。
延伸阅读
- 官方文档:docs.k8slens.dev —— Catalog / Hotbar / Extensions 三个核心概念
- Lens Desktop 转 BSL 公告:mirantis.com/blog/introducing-lens-desktop-pro —— 看官方怎么解释商业化决策
- Headlamp —— CNCF 官方替代,Apache 2.0
- k9s —— 终端 TUI 替代,极轻量
- kubernetes —— Lens 管的核心系统
- helm —— Lens 内嵌的包管理器
关联
- kubernetes —— Lens 管的核心系统
- helm —— Lens 内嵌的 Chart 浏览/安装
- electron —— Lens 的桌面壳
- react —— Lens UI 框架
- k9s —— 终端 TUI 替代品,零 GUI 依赖
- headlamp —— CNCF 官方替代品,永远 Apache 2.0
反向链接
- electron —— Electron — Chromium + Node.js 跨平台桌面应用框架
- helm —— Helm — Kubernetes 包管理器
- k9s —— k9s — 让 kubectl 长出眼睛和键盘的终端 UI
- kubernetes —— Kubernetes — 容器编排平台
- react —— React UI 组件库