跳转到内容

Lens — Kubernetes 集群的桌面 IDE

是什么

Lens 是一个专门用来管 Kubernetes 集群的桌面应用。日常类比:像 VS Code,但打开的不是代码文件夹,而是一整个 K8s 集群——左侧树是命名空间和资源,右侧编辑面板是 YAML 和实时日志,下方 terminal 已经登好 kubectl

你常用的命令:

Terminal window
kubectl get pods -n production
kubectl logs -f my-app-7d8f9
kubectl exec -it my-app-7d8f9 -- sh
kubectl 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 把三件事捏成一个体验:

  1. 多集群聚合:你把多份 kubeconfig 文件同时挂进来——dev、stage、prod、海外、客户——左侧 catalog 一键切换。类比:浏览器的多账户切换,cookie 各自独立但 UI 共享。底层做法是每个集群起一个独立 kubectl proxy,UI 按当前选中的集群路由请求。

  2. kubectl 在你看不见的地方:Lens 内置了多版本 kubectl 二进制,发现你的集群是 v1.28 就用 v1.28 对应的 kubectl。terminal 标签打开就是 kubectl --kubeconfig=... --context=... 已经预设好的 shell。类比:像 nvm 自动给你切 Node 版本,你不用想。

  3. Helm + Prometheus 内嵌:Helm Chart 直接在 UI 里搜索、安装、升级;集群里如果有 Prometheus,Lens 自动检测并把 CPU/内存/网络画成图表叠到资源详情页。类比:把 helm install 和 Grafana 简化版捏到同一个窗口里,少开两个 tab。

实践案例

案例 1:挂 kubeconfig

Terminal window
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 后社区怎么应对

Terminal window
# OpenLens:去掉 Mirantis 统计的社区 fork
brew install --cask openlens
# Headlamp:CNCF 官方 Web/桌面双形态
brew install --cask headlamp
# k9s:终端 TUI,零 GUI 依赖
brew install k9s

三者各有取舍:OpenLens 跟 Lens 几乎一样但不再随原版升级;Headlamp 有 CNCF 背书更安全但功能不如 Lens 全;k9s 极轻量但要记快捷键。

踩过的坑

  1. Lens Desktop 现在要登录 Lens ID 才能用:Mirantis 在 Personal 版强制登录,引发”为啥本地工具要联网”的争议。隔离环境(金融、政府)直接不能装,只能换 OpenLens 或 Headlamp。

  2. BSL 不是 OSI 认证开源:Business Source License 在 4 年后才转 Apache 2.0,期间禁止”做成 SaaS 卖给别人”。企业法务要看清楚——内部使用没事,但拿去做托管服务卖钱不行。

  3. Electron 内存吃得猛:单实例 600MB+ 起步,挂 5 个集群轻松到 2-4 GB。内存紧张的开发机建议同时只挂当前要用的集群,或者换 k9s。

  4. EKS / GKE 的 exec credential plugin 要 PATH:kubeconfig 里写 aws eks get-token 这种 exec plugin,Lens 启动时的 PATH 不一定有 aws CLI。Mac 上要么从 terminal open -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”的替代。

学到什么

  1. 桌面 IDE 模式可以适配任何”远端复杂系统”:K8s 的 kubectl 体验差,Lens 用”挂载 + 树形 + 编辑面板”模式封装。同样思路可以套到数据库(DBeaver、TablePlus)、消息队列(Offset Explorer)等任何”有 endpoint + 多对象 + 操作命令”的系统。

  2. 协议变更会立刻被社区 fork:MIT → BSL 的代价是失去信任。OpenLens 当天就出现,说明开源生态的”叛逆能力”非常强——商业方真要转协议要算清楚是不是值得。

  3. CNCF 生态有 anti-fragile 机制:Lens 出问题,CNCF 立刻把 Headlamp 拉成官方替代。基金会的存在价值之一就是”单点故障的备胎”。

  4. 多 kubeconfig 合并KUBECONFIG=a:b:c 这个 trick 不光 Lens 用,所有 K8s GUI 都靠它,是日常运维必备的环境变量技巧。

延伸阅读

关联

  • 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 组件库