笔记。 翻译。:原始材料的作者是来自 Zalando 的 Henning Jacobs。 他创建了一个用于与 Kubernetes 合作的新 Web 界面,该界面被定位为“kubectl for the web”。 为什么出现一个新的开源项目以及现有解决方案不满足哪些标准 - 阅读他的文章。
在这篇文章中,我回顾了各种开源 Kubernetes Web 界面,列出了我对通用 UI 的要求,并解释了我开发的原因
用例
在 Zalando,我们为大量 Kubernetes 用户 (900+) 和集群 (100+) 提供服务。 有一些常见的用例可以从专用的 Web 工具中受益:
- 与同事沟通以获得支持;
- 响应事件并调查其原因。
Поддержка
根据我的经验,支持沟通通常如下所示:
— 救命,我们的服务 XYZ 不可用!
— 表演时你会看到什么 kubectl describe ingress ...
?
或者 CRD 类似的东西:
— 我的身份识别服务有一些问题...
— 该命令会产生什么? kubectl describe platformcredentialsset ...
?
这种通信通常归结为输入命令的各种变体 kubectl
以便找出问题所在。 结果,对话双方被迫不断地在终端和网络聊天之间切换,而且他们观察到的情况也不同。
因此,我希望 Kubernetes Web 前端允许以下操作:
- 用户可以 交换链接 并观察同样的事情;
- 有助于 避免人为错误 支持:例如,在命令行上登录到错误的集群、CLI 命令中的拼写错误等;
- 会允许 产生你自己的观点 发送给同事,即添加栏目标签,一页显示多种类型的资源;
- 理想情况下,这个网络工具应该允许您设置 指向 YAML 特定部分的“深层”链接 (例如,指出导致失败的错误参数)。
事件响应和分析
响应基础设施事件需要态势感知、评估影响以及寻找集群模式的能力。 一些现实生活中的例子:
- 关键生产服务出现问题,您需要 按名称查找所有集群中的所有 Kubernetes 资源排除故障;
- 缩放时节点开始下降,您需要 查找所有集群中状态为“Pending”的所有 Pod评估问题的范围;
- 个别用户报告了跨所有集群部署的 DaemonSet 的问题,需要找出解决办法 问题是彻底的吗?.
在这种情况下我的标准解决方案是这样的 for i in $clusters; do kubectl ...; done
。 显然,开发一种提供类似功能的工具是可能的。
现有的 Kubernetes Web 界面
Kubernetes Web 接口的开源世界并不是很大*,因此我尝试使用以下方式收集更多信息
*我对 Kubernetes 的 Web 界面数量有限的解释:云服务和 Kubernetes 供应商通常提供自己的前端,因此“好的”免费 Kubernetes UI 的市场相对较小。
通过一条推文我了解到
K8Dash
“K8Dash 是管理 Kubernetes 集群的最简单方法。”
- 仅在一个集群的边界内工作。
- 可以进行排序和过滤,但没有永久链接。
- 不支持自定义资源定义 (CRD)。
库伯纳特
“Kubernator 是 Kubernetes 的替代 UI。 与高级 Kubernetes 仪表板不同,它提供对集群中所有对象的低级控制和出色的可见性,并能够创建新对象、编辑它们并解决冲突。 作为一个完全客户端应用程序(如 kubectl),除了 Kubernetes API 服务器本身之外,它不需要任何后端,并且还尊重集群访问规则。”
这是一个相当准确的描述
- 仅服务于一个集群。
- 没有列表视图模式(即,您无法显示所有处于“待处理”状态的 Pod)。
Kubernetes 仪表板
“Kubernetes Dashboard 是 Kubernetes 集群的通用 Web 界面。 它允许用户管理集群中运行的应用程序并对其进行故障排除,以及管理集群本身。”
不幸的是,
- 没有永久链接,例如当我过滤资源或更改排序顺序时;
- 没有简单的方法可以按状态进行过滤 - 例如,查看状态为“待处理”的所有 Pod;
- 仅支持一个集群;
- 不支持 CRD(该功能正在开发中);
- 没有自定义列(例如按类型标记的列
kubectl -L
).
Kubernetes 操作视图 (kube-ops-view)
“K8s 集群空间的系统仪表板观察器。”
У
* 笔记。 翻译。:从这个意义上说,您可能也对我们的插件感兴趣
Kubernetes 资源报告 (kube-resource-report)
“收集 pod 和 Kubernetes 集群资源请求,将其与资源消耗进行比较,并生成静态 HTML。”
笔记。 翻译。:服务和工具还可用于查看有关云提供商之间的资源分配及其成本的信息
八进位
“为开发人员提供的可扩展 Web 平台,旨在更好地了解 Kubernetes 集群的复杂性。”
- 没有聚类搜索。
- 仅适用于本地计算机(不部署到集群)。
- 无法对对象进行排序/过滤(仅支持标签选择器)。
- 您无法指定自定义列。
- 您不能按名称空间列出对象。
我还遇到了 Octant 与 Zalando 集群的稳定性问题:在某些 CRD 上
Kubernetes Web 视图简介
“网络版 kubectl”。
在分析了 Kubernetes 的可用接口选项后,我决定创建一个新的接口选项: kubectl
在网络上,即:
- 用户喜欢使用 kubectl 的所有(只读)操作的可用性;
- 所有 URL 必须是永久性的,并以其原始形式代表页面,以便同事可以共享它们并在其他工具中使用它们;
- 支持所有 Kubernetes 对象,这将允许您解决任何类型的问题;
- 资源列表应该可以下载以供进一步工作(在电子表格、CLI 工具中,例如
grep
)和存储(例如,用于事后分析); - 支持按标签选择资源(类似于
kubectl get .. -l
); - 创建各种类型资源的组合列表的能力(类似于
kubectl get all
) 获得同事之间的共同操作情况(例如,在事件响应期间); - 能够将自定义智能深层链接添加到其他工具,例如仪表板、记录器、应用程序注册表等。 促进故障排除/解决错误并响应事件;
- 前端应尽可能简单(纯 HTML),以避免随机问题,例如 JavaScript 冻结;
- 支持多个集群,以简化远程咨询期间的交互(例如,只记住一个 URL);
- 如果可能,应简化情况分析(例如,提供所有集群/命名空间的下载资源的链接);
- 例如,创建灵活链接和突出显示文本信息的其他机会,以便您可以将同事指向资源描述中的特定部分(YAML 中的一行);
- 能够根据特定客户的要求进行定制,例如,允许您为 CRD 创建特殊的显示模板、您自己的表格视图以及更改 CSS 样式;
- 用于在命令行上进一步探索的工具(例如,显示完整命令
kubectl
,准备复制);
超越 Kubernetes Web View 解决的任务 (非目标) 剩下:
- Kubernetes 对象的抽象;
- 应用程序管理(例如,部署管理、Helm 图表等);
- 写入操作(必须通过安全的 CI/CD 和/或 GitOps 工具完成);
- 漂亮的界面(JavaScript、主题等);
- 可视化(参见
kube-ops-视图 ); - 成本分析(参见
kube 资源报告 ).
Kubernetes Web View 如何帮助提供支持和事件响应?
Поддержка
- 所有链接都是永久的,这使得与同事交换信息变得更加容易。
- 您可以创建 你的想法例如,显示两个特定集群中所有具有特定标签的Deployment和Pod(链接中可以指定多个集群名称和资源类型,以逗号分隔)。
- 您可以参考 YAML 文件中的特定行 对象,表明对象规范中的潜在问题。
在 Kubernetes Web 视图中按集群搜索
事件响应
- 全球搜索 (全局搜索) 允许您搜索所有集群中的对象。
- 列表视图 可以显示所有集群中某个状态/列的所有对象(例如,我们需要找到所有状态为“Pending”的 Pod)。
- 可以下载对象列表 采用制表符分隔值 (TSV) 格式以供以后分析。
-
可定制的外部链接 允许您切换到相关仪表板和其他工具。
Kubernetes Web 视图:所有集群中状态为“Pending”的 Pod 列表
如果您想尝试 Kubernetes Web View,我建议您查看
当然,界面还可以更好,但目前 Kubernetes Web View 是一个面向“高级用户”的工具,他们在必要时不会回避手动操作 URL 路径。 如果您有任何意见/补充/建议,请联系
本文简要介绍了 Kubernetes Web View 创建的背景。 更多将会随之而来! (笔记。 翻译。: 他们应该预计在
PS来自译者
另请阅读我们的博客:
- «
kubebox 和 Kubernetes 的其他 shell “; - «
为 Kubernetes 上运行的应用程序开发人员提供的工具 “; - «
kubelive 控制台实用程序已出现,可与 Kubernetes 进行交互工作 “; - «
使用 Kubernetes 时有用的实用程序 “。
来源: habr.com