注意事项 佩雷夫 :原始材料的作者是Zalando的Henning Jacobs。 他创建了一个与Kubernetes一起使用的新Web界面,该界面被定位为“ Web的Kubectl”。 为什么会出现新的开源项目,以及现有解决方案不符合哪些标准,请阅读其文章。
在本出版物中,我研究了各种开源Kubernetes Web界面,提出了对通用UI的要求,并解释了为什么我开发了
Kubernetes Web View ,该界面旨在
简化一次支持多个集群并对其进行故障排除的接口。
用例
在Zalando,我们为大量Kubernetes(900+)和集群(100+)用户提供服务。 在几个典型的用例中,专用Web工具的帮助将非常有用:
- 与同事进行沟通以提供支持;
- 应对事件并调查原因。
技术支持
根据我的经验,在支持框架内的交流通常是这样的:
-帮助,我们的XYZ服务不可用!
-执行kubectl describe ingress ...
时,您看到什么?或类似CRD的内容:
-我的身份识别服务有问题...
kubectl describe platformcredentialsset ...
命令kubectl describe platformcredentialsset ...
吗?这种通信通常归结为引入
kubectl
各种变体以解决问题。 结果,对话双方被迫在终端和网络聊天之间不断切换,而且观察到了不同的情况。
因此,我希望Kubernetes Web前端允许以下操作:
- 用户可以交换链接并观察同一件事;
- 这将有助于避免人为的支持错误 :例如,在命令行上输入错误的集群,CLI命令中的错别字等。
- 将允许您生成自己的视图以发送给同事,即添加标签列,在一页上显示多种类型的资源;
- 理想情况下,此基于Web的工具应允许您将深层链接放置到YAML的特定部分 (例如,指向导致失败的无效参数)。
事件响应与分析
对基础设施中的事件做出响应需要对态势的了解,评估影响的能力以及寻找集群中的模式的能力。 一些现实生活中的例子:
- 关键生产服务有问题,您需要按名称在所有集群中找到所有Kubernetes资源以解决问题;
- 扩展时节点开始下降,您需要在所有群集中找到所有状态为“待处理”的Pod,以评估问题的严重性;
- 单个用户报告在所有集群中部署的DaemonSet都有问题,有必要找出问题是否完全 。
在这种情况下,我的标准解决方案类似于
for i in $clusters; do kubectl ...; done
for i in $clusters; do kubectl ...; done
for i in $clusters; do kubectl ...; done
。 显然,您可以开发一个提供类似功能的工具。
现有的Kubernetes Web界面
Kubernetes Web界面的开源世界不是太大*,所以我尝试使用
Twitter收集其他信息:
*我对Kubernetes的Web界面数量有限的解释:云服务和供应商Kubernetes通常提供自己的前端,因此“好的”免费Kubernetes UI的市场相对较小。我
发了关于
K8Dash ,
Kubernator和
Octant的推文 。 让我们看一下它们以及其他现有的开源解决方案,尝试了解它们是什么。
K8Dash
“ K8Dash是管理Kubernetes集群的最简单方法。”
K8Dash看起来不错并且感觉很快,但是对于上面列出的用
例 ,它有几个缺点:
- 它仅在一个群集的边界内工作。
- 可以进行排序和过滤,但没有固定链接。
- 不支持自定义资源定义(CRD)。
库伯纳特
“ Kubernator是Kubernetes的替代UI。 与高级Kubernetes仪表板不同,它提供了低级控制和对集群中所有对象的出色概述,并能够创建新对象,对其进行编辑并解决冲突。 作为一个完全客户端的应用程序(如kubectl),除了Kubernetes API服务器本身之外,它不需要任何后端,并且还考虑了访问集群的规则。”
这是
Kubernator的相当准确的描述。 las,他缺少一些功能:
- 仅服务一个群集。
- 没有列表视图模式(也就是说,您无法显示所有处于“待处理”状态的窗格)。
Kubernetes仪表板
“ Kubernetes仪表板是Kubernetes集群的通用Web界面。 它使用户可以管理集群中运行的应用程序并对其进行故障排除,以及管理集群本身。”
不幸的是,
Kubernetes Dashboard对我的事件支持和响应活动没有太大帮助,因为它:
- 例如,当我过滤资源或更改排序顺序时,没有永久链接。
- 没有简单的方法可以按状态进行过滤-例如,查看所有状态为“待处理”的广告连播;
- 仅支持一个集群;
- 不支持CRD(此功能正在开发中);
- 没有自定义列(例如
kubectl -L
)。
Kubernetes操作视图(kube-ops-view)
“ K8s集群空间观察器系统面板。”
Kubernetes Operational View具有完全不同的方法:该工具仅使用WebGL显示群集节点和Pod,而没有对象的任何文本详细信息。 在线查看群集状态(“吊舱跌落了吗?”)*非常有用,但不适用于上述支持和事件响应的情况。
* 注意 佩雷夫 :从这个意义上讲,您可能也对我们的grafana-statusmap插件感兴趣,我们将在本文中对其进行详细介绍 。Kubernetes资源报告(kube-resource-report)
“收集有关来自Pod和Kubernetes集群的资源请求的信息,将它们与资源消耗进行比较,并生成静态HTML。”
Kubernetes资源报告生成关于集群中团队/应用程序的资源使用和成本分配的静态HTML报告。 该报告对于支持和响应事件很有用,因为它使您可以快速找到在其中部署了应用程序的群集。
注意事项 佩雷夫 :在查看有关云提供商的资源分配及其成本的信息时,我们最近发布的Kubecost服务和工具也可能会有用。Octant
“一个可扩展的Web开发平台,旨在更好地了解Kubernetes集群的复杂性。”
在VMware中创建的
Octant是我最近才了解的新产品。 使用它,可以方便地在本地计算机上检查群集(甚至可以看到可视化的图像),但是,它仅在有限的程度上涉及支持和事件响应方面的问题。 八分圆的缺点:
- 没有集群搜索。
- 它仅适用于本地计算机(不适用于群集)。
- 无法排序/过滤对象(仅支持标签选择器)。
- 您不能指定自定义列。
- 您不能按名称空间列出对象。
我还遇到了Octant的Zalando群集的稳定性问题:它在某些CRD上崩溃了。
Kubernetes Web View简介
“用于网络的Kubectl。”
在分析了Kubernetes的可用接口选项之后,我决定创建一个新的接口:
Kubernetes Web View 。 实际上,实际上,我只需要
kubectl
在网络上的所有功能,即:
- 用户喜欢使用kubectl的所有(只读)操作的可访问性;
- 所有URL应该是永久性的,并以原始形式显示页面,以便同事可以共享它们并在其他工具中使用;
- 支持所有Kubernetes对象,这将解决任何类型的问题;
- 资源列表应该可以下载以进行进一步的工作(在电子表格,CLI工具(例如
grep
)中)和存储(例如,对于事后分析); - 支持通过标签选择资源(类似于
kubectl get .. -l
); - 创建各种类型资源的组合列表的能力(类似于
kubectl get all
),以在同事之间获得共同的运行状况(例如,在响应事件的过程中); - 能够向其他工具(例如仪表板,记录器,应用程序注册表等)添加可定制的“智能”深度链接。 促进故障排除/事件响应;
- 前端应尽可能简单(纯HTML),以避免出现意外问题,例如冻结的JavaScript;
- 支持多个集群,以促进远程咨询期间的交互(例如,仅记住一个URL);
- 如果可能的话,应该简化情况分析(例如,链接到所有群集/名称空间的下载资源的链接);
- 例如,创建灵活链接和突出显示文本信息的其他机会,以便同事可以指向资源描述中的特定部分(YAML中的行);
- 适应特定客户端需求的能力,例如,允许您为CRD,表格视图,更改CSS样式创建特殊的显示模板;
- 用于在命令行上进行进一步研究的工具(例如,显示成熟的
kubectl
命令已准备好进行复制);
在Kubernetes Web View解决的
非目标之外,还有:
Kubernetes Web View如何帮助支持和响应事件?
技术支持
- 所有链接都是永久的 ,这有助于与同事交换信息。
- 您可以创建自己的视图 ,例如,在两个特定群集中显示带有特定标签的所有Deployments和Pod(可以在链接中指定多个群集名称和资源类型,并用逗号分隔)。
- 您可以引用对象的YAML文件中的特定行,以指示对象规范中的潜在问题。
Kubernetes Web视图中的集群搜索事件响应
- 全局搜索使您可以搜索所有群集中的对象。
- 列表视图可以在所有群集中显示具有特定状态/列的所有对象(例如,我们需要找到所有具有“待处理”状态的窗格)。
- 可以以制表符分隔格式(TSV)格式下载对象列表,以供以后分析。
- 可定制的外部链接使您可以切换到相应的仪表板和其他工具。
Kubernetes Web View:所有集群中具有待处理状态的Pod列表如果要尝试使用Kubernetes Web View,建议您熟悉
文档或查看
实时演示版本 。
当然,界面可能会更好,但是就目前而言,Kubernetes Web View是面向“高级用户”的工具,他们无需避开必要时手动操作URL路径。 如果您有意见/补充/希望,请
通过Twitter与
我联系!
本文简要介绍了创建Kubernetes Web View的前提。 其他人将跟随!
( 注意翻译 :应该在作者的博客中找到 。)译者的PS
另请参阅我们的博客: