k9s 概述——Kubernetes 的高级终端界面

k9s 概述——Kubernetes 的高级终端界面

K9s 提供与 Kubernetes 集群交互的终端用户界面。 这个开源项目的目标是使在 K8s 中导航、监控和管理应用程序变得容易。 K9s 持续监控 Kubernetes 中的变化,并提供快速命令来处理受监控的资源。

该项目是用 Go 编写的,已经存在了一年半多:第一次提交是在 1 年 2019 月 9000 日进行的。 在撰写本文时,有 XNUMX 多颗星星 GitHub上 和大约 80 名贡献者。 看看k9s能做什么?

安装和启动

这是最容易作为 Docker 镜像运行的客户端(相对于 Kubernetes 集群)应用程序:

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

对于某些 Linux 发行版和其他操作系统,也有即装即用的 . 一般来说,对于Linux系统,可以安装一个二进制文件:

sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf -  -C /tmp/
sudo mv /tmp/k9s /usr/local/bin

K8s 集群本身没有具体要求。 从评论来看,该应用程序还适用于旧版本的 Kubernetes,例如 1.12。

该应用程序使用标准配置启动 .kube/config - 类似于它是如何做的 kubectl.

导航

默认情况下,将打开一个窗口,其中包含为上下文指定的默认命名空间。 也就是说,如果你写 kubectl config set-context --current --namespace=test,然后命名空间将打开 test. (有关更改上下文/名称空间的信息,请参见下文。)

k9s 概述——Kubernetes 的高级终端界面

命令模式 通过按“:”完成。 之后就可以通过命令控制k9s的运行——比如查看StatefulSets列表(在当前命名空间下),可以输入 :sts.

k9s 概述——Kubernetes 的高级终端界面

对于其他一些 Kubernetes 资源:

  • :ns ——命名空间;
  • :deploy ——部署;
  • :ing — 入口;
  • :svc - 服务。

要显示可供查看的资源类型的完整列表,有一个命令 :aliases.

在当前窗口中通过热键组合查看可用命令列表也很方便:为此,只需单击“?”。

k9s 概述——Kubernetes 的高级终端界面

在k9s中也有 搜索模式, 去那里输入“/”就足够了。 使用它,对当前“窗口”的内容进行搜索。 假设您之前输入过 :ns,您打开了一个命名空间列表。 如果它们太多,那么为了不向下滚动很长时间,在带有名称空间的窗口中输入就足够了 /mynamespace.

要按标签搜索,您可以选择所需命名空间中的所有 pod,然后输入,例如, / -l app=whoami. 我们将获得带有此标签的 pod 列表:

k9s 概述——Kubernetes 的高级终端界面

搜索适用于各种窗口,包括日志、查看 YAML 清单和 describe 有关资源 - 有关这些功能的更多详细信息,请参见下文。

整体导航流程是什么样的?

使用命令 :ctx 你可以选择一个上下文:

k9s 概述——Kubernetes 的高级终端界面

要选择命名空间,有已经提到的命令 :ns, 然后您可以使用搜索来搜索所需的空间: /test.

如果我们现在选择我们感兴趣的资源(例如,同一个 StatefulSet),则会为其显示相应的信息:有多少个 Pod 正在运行以及有关它们的简要信息。

k9s 概述——Kubernetes 的高级终端界面

可能只对 pod 感兴趣 - 然后输入就足够了 :pod. 对于 ConfigMaps (:cm - 对于这些资源的列表),你可以选择感兴趣的对象并点击“u”,之后K9s会告诉你具体是谁使用它(这个CM)。

查看资源的另一个方便的功能是他们的 “x-ray”(X 射线视图). 该模式由命令调用 :xray RESOURCE 并且......展示它是如何工作的比解释更容易。 这是 StatefulSets 的示例:

k9s 概述——Kubernetes 的高级终端界面
(这些资源中的每一个都可以编辑、更改、制作 describe.)

这是使用 Ingress 的部署:

k9s 概述——Kubernetes 的高级终端界面

使用资源

您可以获取有关 YAML 或其中每个资源的信息 describe 通过按相应的键盘快捷键(分别为“y”和“d”)。 当然,还有更多基本操作:由于界面中方便的“标题”(按 Ctrl + e 隐藏),它们的列表和键盘快捷键始终可见。

k9s 概述——Kubernetes 的高级终端界面

编辑任何资源(选择后为“e”)时,将打开环境变量中定义的文本编辑器(export EDITOR=vim).

这是资源的详细描述(describe):

k9s 概述——Kubernetes 的高级终端界面

可以使用熟悉的 Ctrl + s 键盘快捷键保存此输出(或查看 YAML 资源清单的输出)。 从K9s消息中可以知道它会被保存在哪里:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

在删除系统标签和注释后,您还可以从创建的备份文件中恢复资源。 为此,您需要与他们一起进入目录(:dir /tmp), 然后选择所需的文件并应用 apply.

顺便说一句,如果当前 ReplicaSet 出现问题,您可以随时回滚到之前的 ReplicaSet。 为此,选择所需的 RS (:rs 他们的名单):

k9s 概述——Kubernetes 的高级终端界面

... 并使用 Ctrl + l 回滚。 我们应该得到一个一切顺利的通知:

k9s/whoami-5cfbdbb469 successfully rolled back

要缩放副本,只需单击“s”(缩放)并选择所需的实例数:

k9s 概述——Kubernetes 的高级终端界面

您可以使用 shell 输入任何容器:为此,转到所需的 pod,单击“s”(shell)并选择容器。

其他功能

当然,也支持查看日志(“l”代表选择的资源)。 并且为了查看新日志,无需不断按 Enter:标记(“m”)就足够了,然后只跟踪新消息。

k9s 概述——Kubernetes 的高级终端界面

同样在同一窗口中,您可以选择日志输出的时间范围:

  • 键“1” - 1分钟;
  • “2”——5分钟;
  • “3”——15分钟;
  • “4”——30分钟;
  • “5”——1 小时;
  • “0”——在 pod 的整个生命周期内。

特殊操作模式脉冲(命令 :pulse) 显示有关 Kubernetes 集群的一般信息:

k9s 概述——Kubernetes 的高级终端界面

在其中您可以看到资源的数量及其状态(绿色显示那些具有状态 Running).

K9s 的另一个很酷的特性叫做 大力水手. 它会根据某些正确性标准检查所有资源,并显示带有解释的结果“评级”。 例如,您可以看到没有足够的试用或限制,并且某些容器可以以 root 身份运行...

k9s 概述——Kubernetes 的高级终端界面

有基本的 Helm 支持。 例如,您可以通过以下方式查看集群中部署的版本:

:helm all # все
:helm $namespace # в конкретном пространстве имен

基准

甚至内置于 K9s 中 是一个简单的 HTTP 服务器负载生成器,是众所周知的 ab (ApacheBench) 的替代品。

要启用它,您需要在 pod 中启用端口转发。 为此,请选择 pod 并按 Shift + f,使用“pf”别名转到端口转发子菜单。

k9s 概述——Kubernetes 的高级终端界面

选择端口并按 Ctrl + b 后,基准测试本身将开始。 他的工作结果存储在 /tmp 并可供以后在 K9s 中查看。

k9s 概述——Kubernetes 的高级终端界面
k9s 概述——Kubernetes 的高级终端界面

要更改基准测试的配置,您需要创建一个文件 $HOME/.k9s/bench-<my_context>.yml (为每个集群确定)。

注意:目录中所有 YAML 文件的扩展名很重要 .k9s 正是 .yml (.yaml 无法正常工作)。

配置示例:

benchmarks:
  defaults:
    # Количество потоков
    concurrency: 2
    # Количество запросов
    requests: 1000
  containers:
    # Настройки для контейнера с бенчмарком
    # Контейнер определяется как namespace/pod-name:container-name
    default/nginx:nginx:
      concurrency: 2
      requests: 10000
      http:
        path: /
        method: POST
        body:
          {"foo":"bar"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
 services:
    # Можно проводить бенчмарк на сервисах типа NodePort и LoadBalancer
    # Синтаксис: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

接口

通过创建文件修改资源列表列的外观 $HOME/.k9s/views.yml. 其内容示例:

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

是的,没有足够的标签列,有 项目中的问题.

按列排序是通过键盘快捷键进行的:

  • Shift + n - 按名称;
  • Shift + o - 按节点;
  • Shift + i - 按IP;
  • Shift + a - 按容器的生命周期;
  • Shift + t - 按重启次数;
  • Shift + r - 按准备状态;
  • Shift + c - 按 CPU 消耗;
  • Shift + m - 按内存消耗。

如果有人不喜欢默认的配色方案,K9s 甚至支持 . 提供现成的示例(7 个) 这里. 这是其中一种皮肤的示例 (在海军):

k9s 概述——Kubernetes 的高级终端界面

插件

最后,该 外挂程式 允许您扩展 K9s 的功能。 我自己在我的工作中只使用了其中一个 - kubectl get all -n $namespace.

看起来像这样。 创建一个文件 $HOME/.k9s/plugin.yml 内容如下:

plugin:
 get-all:
   shortCut: g    
   confirm: false    
   description: get all
   scopes:
   - all
   command: sh
   background: false
   args:
   - -c
   - "kubectl -n $NAMESPACE get all -o wide | less"

现在您可以转到命名空间并按“g”以执行相应的命令:

k9s 概述——Kubernetes 的高级终端界面

例如,在插件中有与 kubectl-jq 的集成和用于查看日志的实用程序 凛凛.

结论

就我的口味而言,事实证明 K9s 使用起来非常方便:你可以很快习惯于在不使用它的情况下寻找你需要的一切。 kubectl. 我对日志的视图及其保存、资源的快速编辑、总体工作速度*感到满意,事实证明大力水手模式很有用。 特别值得一提的是创建插件和修改应用程序以满足您的需求的能力。

* 虽然,日志量很大,我也注意到K9s运行缓慢。 在这种情况下,该实用程序会“吃掉”Intel Xeon E2xx 的 312 个内核,甚至可能会死机。

目前缺少什么? 无需转到目录即可快速回滚到以前的版本(我们不是在谈论 RS)。 此外,恢复仅发生在 资源:如果删除注释或标签,则必须删除并恢复整个资源(这是您需要转到目录的地方)。 另一件小事 - 此类保存的“备份”没有足够的日期。

PS

另请阅读我们的博客:

来源: habr.com

添加评论