Kui: 一个用于 Kubernetes 的“混合”CLI/GUI 应用程序

众所周知,当涉及到管理服务器或 Kubernetes 集群之类的事情时,我们大多数人更喜欢使用我们心爱的终端而不是 GUI 工具。对于许多人来说,这就像驾驶一辆带有手动变速箱的汽车:简单、舒适、灵活且更可预测。Kui 是一个混合界面工具,旨在增强经典的终端体验。

该程序被作者称为“带有 GUI 扭曲的 CLI”,作为用于管理 Kubernetes 集群的 GUI 增强型 CLI 界面进行销售。该项目进展相当迅速,尽管开发仅由一个人(Nick Mitchell)执行。目前,它在 GitHub 上有超过 2,100 颗星。Kui 存储库最近已从 IBM 存储库迁移到 K8s 社区的 kubernetes-sigs 全局存储库(所谓的特殊兴趣小组,SIG)。

安装和浏览界面

Kui 是一个跨平台应用程序,其版本可用于 macOS、Linux 和 Windows。您也可以从源代码构建它。它在引擎盖下有 Electron 框架,并作为单个预构建的二进制文件发布。阅读此处以了解有关安装 Kui 的更多信息。

乍一看,Kui 和大多数终端一样。有一个选项可以在顶部的选项卡之间切换,还有一个按钮可以将当前选项卡拆分为垂直和水平子窗口。右下角有一个下拉菜单,用于选择感觉和外观主题、帮助按钮和通知区域。

Kui 界面的特别之处在于,每个输入的命令都不是典型的终端行,而是一个带有用于输入命令的字段的面板

当您将鼠标悬停在面板上时,会出现一个菜单,允许您复制命令、它产生的结果或指向它的链接(我们将在后面讨论该功能)。

Kui 可以在终端中处理不同的文件格式。例如,图像可以在默认查看器中打开。您还可以使用内置编辑器打开和编辑文本文件。此编辑器提供了操作文本文件所需的最小功能集。例如,有行编号,您只需单击所需的文本块即可定位光标。在右上角,有一组典型的按钮,用于保存更改、取消上次操作和清除文档内容。

该选项卡可以拆分为垂直和水平子窗口(取决于子窗口的数量)。但是,默认情况下,您无法更改子窗口的大小和布局。它们的大小与主窗口的大小成比例地变化。每个子窗口的右上角都有用于反转背景、清除内容和关闭子窗口的按钮。

htop、cd、ls 命令, 打开包含图片的目录, 使用选项卡

Kui 和 Kubernetes

现在让我们谈谈在 Kubernetes 中使用这个“终端”。Kui 既可以作为独立应用程序运行,也可以作为插件运行(例如,通过在终端中键入)。对 Kubernetes 集群的访问是使用该文件组织的。此外,上下文切换在应用程序本身中可用。kubectl kuikubectl kui get namespacekubeconfig

我们需要一个 K8s 集群来熟悉 Kui。为此,我将使用 minikube 和通过 Helm 图表部署的 WordPress 应用程序。您还可以同时将多个 Kubernetes 集群连接到 Kui。在这种情况下,底部菜单允许您在它们之间切换。当前目录和 Kubernetes 上下文显示在窗口的左下角(您可以轻松地在命名空间之间切换)。

使用 Kubernetes 时,KUI 最显着的特性是应用程序将关键的 Kubernetes 资源显示为表和选项卡。例如,您可以使用命令列出特定集群中的命名空间(也可以使用较短的别名),然后通过 GUI 使用集群资源。每个命名空间旁边都有一个彩色方块,用于显示其状态:如果删除命名空间,其方块的颜色将从绿色变为蓝色。kubectl get namespacesk

Kui 和命名空间

Kui 接口基于向下钻取方法;也就是说,它从全局视图开始,然后将焦点缩小到逐渐变小的元素:

  • 选择目标命名空间(例如,)后,在同一窗口中会自动打开一个选项卡。此选项卡有一个包含命令的面板。wp-kuikubectl get namespace wp-kui -o yaml
  • 此面板下方有一个带有选项卡的菜单:
    • 摘要 — 命名空间的名称、状态和运行时间;
    • Resources — 主要的命名空间资源:Pod、Service、Deployment、ReplicaSet、StatefulSet,以及它们的数量。这与你得到的输出基本相同kubectl -n namespace get all;
    • 注释(并非在所有名称中);
    • 标签;
    • 上次应用(此选项卡在系统命名空间中不存在);
    • YAML — 命名空间的清单。可以编辑此清单。

“资源”选项卡

YAML 选项卡

使用选项卡和处理其内容的一般过程大致如下:


类似的向下钻取方法也适用于其他 Kubernetes 实体。例如,您可以转到 Resources 选项卡并选择感兴趣的资源(例如,Pod)。在这种情况下,带有该命令的面板将显示在子窗口中,以及该命名空间中的一组 Pod。该菜单以文本和图形形式包含 Pod 名称及其状态(由不同颜色的方块组成的网格,后跟 Pod 状态)。kubectl get pod -n namespace

Pod 状态的图形表示可以方便地以紧凑的方式显示有关具有大量 Pod 或资源的命名空间的统计信息。例如,你可以很容易地看到一个 Pod 的状态为 。如果你点击它:CrashLoopBackOff

  • 将出现一个包含该命令的面板以及一个菜单窗口,其中包括以下选项卡:kubectl get pod nameOfPod -o yaml -n namespace
    • 摘要 — 关键参数,例如状态、副本中正在运行的 Pod/Pod 数量、状态、重启、年龄、IP、节点等;
    • 标签;
    • 日志 ― Pod 主容器的日志(诊断问题最有用的信息);
    • 终端 — 执行到容器 CLI 的选项;
    • 带有清单的 YAML 选项卡;
  • 此外,底部菜单上还有按钮:
    • 显示事件 ― 显示与资源相关的事件;
    • Show Owner Reference — 对于 Pod,这是它拥有的 ReplicaSet;对于 ReplicaSet,这是一个 Deployment 实体;
    • Show Node — 有关当前运行 Pod 的主机的信息。

该界面的设计使有关 K8s 实体的信息显示在新的菜单子窗口(在上一个窗口下方)中。您可以使用命令面板的弹出子菜单关闭不再需要的窗口/面板。

在 Kui 中管理 Pod(文本和图形显示)

笔记本

另一个很酷的 Kui 功能是将您的所有操作保存在笔记本中。打开这样的笔记本将打开一个选项卡,其中包含您在保存之前执行的所有命令面板。这些命令的输出菜单窗口可以最大化。同时,Kui 不会跟踪命令输出窗口中的选项卡。

例如,可以使用笔记本创建教程。Kui 发行版在安装后会立即提供其中的几个 Kubernetes 教程。例如,Kui 帮助以笔记本格式显示。

此类指南是交互式的,因为您可以直接从笔记本运行命令。此外,您可以将窗口拆分为具有自定义背景颜色的多个水平和垂直子窗口。请注意,Kui 将命令面板中以 # 开头的行视为注释。您还可以插入使用命令输入面板左侧的链接按钮复制的 kui-link 链接。Kui 支持使用命令从 Markdown 文件加载注释,以便更轻松地编写文本注释。commentary -f /path/to/file

此外,Kui 笔记本还可用于创建用于监视或管理群集的仪表板。Kui 发行版中包含一个示例仪表板。您可以将其用作创建针对您的集群量身定制的自定义仪表板的基础:

Kui 仪表板示例

定制 Kui

默认情况下,Kui 支持更改主题和调整字体大小。幸运的是,您可以创建自定义 Kui 版本。在其中,您可以自定义视觉(字体大小、图标、主题)和功能元素(使用插件)。GitHub 上有一个 wiki 涵盖了 Kui 自定义。

虽然 Kui 正在积极向 Kubernetes 集成发展,但这并不是该工具的唯一用例。它在引擎盖下有一个成熟的基于 CLI 的平台。执行某些命令可能会导致图形输出。例如,该命令将命名空间显示为带有多色方块的图形表,其中每种颜色表示特定状态。kubectl get ns

本文仅讨论默认安装的插件。但是,Kui 还有其他几个现成的插件:、 和 。kubectls3iter8git

最终印象

在撰写本文的过程中,我在具有多个环境和资源的生产集群上测试了 Kui。在具有 ~80 个命名空间的集群中,该命令的运行速度比其终端命令稍慢,但在舒适的限制范围内。主要缺点是默认设置数量有限。kubectl get ns

在我看来,Kui 是第一次深入了解 Kubernetes 世界的好地方。结构良好的界面和逻辑排列的菜单选项卡使人们易于理解群集资源层次结构。复制控制台命令的 UI 操作可加速 Kubernetes 命令语法的学习。一些有用的附加功能也值得一提,例如将资源的状态显示为彩色方块(其中方块颜色取决于具体状态)。这种方法可以更轻松地评估群集的状态,并加快故障排除诊断速度。

创建笔记本和仪表板的能力看起来特别吸引人:将它们用于不同目的具有明显的巨大潜力。

Kui 当然不是第一个使 Kubernetes 更易于使用的 CLI 工具(例如,我想到了 k9s)。然而,Kui 与其他类似工具的不同之处在于它不仅限于经典的终端功能。该工具在控制台界面中填充了有用的图形元素,增强了典型的终端体验。同时,它坚持其控制台根源,而不会变成像 Lens 这样的 GUI 应用程序。这是好的一面还是坏的一面,由你来决定。

结论

Kui 通过 GUI 功能丰富了良好的旧终端体验,让您从不同的角度了解它。

在我写这篇文章的时候,我收到了几次可用更新的通知。该项目的积极发展增加了人们的信念,即它的弱点将被消除,而混合界面背后的概念将继续得到改进。