使用 k9s 加速 Kubernetes 集群的管理

了解一下这个用于 Kubernetes 管理的超酷终端 UI。
100 位读者喜欢这篇文章。
Top Linux Games of 2016

NASA on the Commons 和 Internet Archive Book Images。由 Opensource.com 修改。CC BY-SA 4.0

通常,我关于 Kubernetes 管理的文章都充满了用于管理集群的 kubectl 命令。 然而,最近有人向我推荐了 k9s 项目,它提供了一种快速审查和解决 Kubernetes 中日常问题的方法。 这极大地改进了我的工作流程,我将在此教程中向您展示如何开始使用它。

可以在 Mac、Windows 和 Linux 上进行安装。 每种操作系统的说明都可以在这里找到。 请务必完成安装以便能够继续学习。

我将使用 Linux 和 Minikube,这是一种在个人计算机上运行 Kubernetes 的轻量级方式。 按照此教程或使用文档进行安装。

设置 k9s 配置文件

安装 k9s 应用程序后,最好从 help 命令开始。

$ k9s help
K9s is a CLI to view and manage your Kubernetes clusters.

Usage:
  k9s [flags]
  k9s [command]

Available Commands:
  help        Help about any command
  info        Print configuration info
  version     Print version/build info

Flags:
  -A, --all-namespaces                 Launch K9s in all namespaces
      --as string                      Username to impersonate for the operation
      --as-group stringArray           Group to impersonate for the operation
      --certificate-authority string   Path to a cert file for the certificate authority
      --client-certificate string      Path to a client certificate file for TLS
      --client-key string              Path to a client key file for TLS
      --cluster string                 The name of the kubeconfig cluster to use
  -c, --command string                 Specify the default command to view when the application launches
      --context string                 The name of the kubeconfig context to use
      --demo                           Enable demo mode to show keyboard commands
      --headless                       Turn K9s header off
  -h, --help                           help for k9s
      --insecure-skip-tls-verify       If true, the server's caCertFile will not be checked for validity
      --kubeconfig string              Path to the kubeconfig file to use for CLI requests
  -l, --logLevel string                Specify a log level (info, warn, debug, error, fatal, panic, trace) (default "info")
  -n, --namespace string               If present, the namespace scope for this CLI request
      --readonly                       Disable all commands that modify the cluster
  -r, --refresh int                    Specify the default refresh rate as an integer (sec) (default 2)
      --request-timeout string         The length of time to wait before giving up on a single server request
      --token string                   Bearer token for authentication to the API server
      --user string                    The name of the kubeconfig user to use

Use "k9s [command] --help" for more information about a command.

正如你所看到的,我们可以使用 k9s 配置很多功能。 我们要做的唯一一步就是编写一个配置文件。 info 命令会将我们指向应用程序正在查找它的位置。

$ k9s info
 ____  __.________
|    |/ _/   __   \______
|      < \____    /  ___/
|    |  \   /    /\___ \
|____|__ \ /____//____  >
        \/            \/

Configuration:   /Users/jess/.k9s/config.yml
Logs:            /var/folders/5l/c1y1gcw97szdywgf9rk1100m0000gn/T/k9s-jess.log
Screen Dumps:    /var/folders/5l/c1y1gcw97szdywgf9rk1100m0000gn/T/k9s-screens-jess

要添加文件,如果目录尚不存在,则创建该目录,然后添加一个文件。

$ mkdir -p ~/.k9s/
$ touch ~/.k9s/config.yml

对于本介绍,我们将使用 k9s 存储库中的默认 config.yml 建议。 维护者指出此格式可能会更改,因此我们可以在此处查看最新版本。

k9s:
  refreshRate: 2
  headless: false
  readOnly: false
  noIcons: false
  logger:
    tail: 200
    buffer: 500
    sinceSeconds: 300
    fullScreenLogs: false
    textWrap: false
    showTime: false
  currentContext: minikube
  currentCluster: minikube
  clusters:
    minikube:
      namespace:
        active: ""
        favorites:
        - all
        - kube-system
        - default
      view:
        active: dp
  thresholds:
    cpu:
      critical: 90
      warn: 70
    memory:
      critical: 90
      warn: 70

我们将 k9s 设置为查找本地 minikube 配置,因此我将确认 minikube 处于联机状态并已准备就绪。

$ minikube status
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

运行 k9s 以探索 Kubernetes 集群

设置好配置文件并指向我们的本地集群后,我们现在可以运行 k9s 命令。

$ k9s

启动后,将弹出基于 k9s 文本的用户界面 (UI)。 如果没有命名空间的标志,它将显示默认命名空间中的 pod。

K9s screenshot

如果在有很多 pod 的环境中运行,则默认视图可能会让人不知所措。 或者,我们可以专注于给定的命名空间。 退出应用程序并运行 k9s -n <namespace>,其中 <namespace> 是一个现有命名空间。 在下面的图片中,我运行了 k9s -n minecraft,它显示了我损坏的 pod

K9s screenshot

因此,一旦你启动并运行了 k9s,你就可以快速完成很多事情。

k9s 的导航通过快捷键进行。 我们总是可以使用箭头键和回车键来选择列出的项目。 有很多其他通用键击可以导航到不同的视图

  • 0 — 显示所有命名空间中的所有 pod

K9s screenshot
  • d — 描述选定的 pod

K9s screenshot
  • l — 显示选定的 pod 的日志

Using k9s to show Kubernetes pod logs

你可能会注意到 k9s 设置为使用 Vim 命令键,包括使用 JK 键上下移动。 emacs 用户祝你好运 :)

快速查看不同的 Kubernetes 资源

需要访问不是 pod 的东西? 是的,我也是。 当我们输入冒号 (":") 键时,可以使用许多快捷方式。 从那里,你可以使用以下命令来导航。

  • :svc — 跳转到服务视图。

K9s screenshot
  • :deploy — 跳转到部署视图。

K9s screenshot

K9s screenshot
  • :namespace — 跳回到命名空间视图。

K9s screenshot
  • :cj — 跳转到 cronjob 视图以查看集群中调度的作业。

K9s screenshot

此应用程序最常用的工具将是键盘; 要在任何页面上向上或向下移动,请使用箭头键。 如果你需要退出,请记住使用 Vim 键绑定。 键入 :q 并按 Enter 键退出。

使用 k9s 对 Kubernetes 进行故障排除的示例

当出现问题时,k9s 如何提供帮助? 为了完成一个示例,我由于配置错误而让几个 pod 死亡。 在下面,你可以看到我崩溃的可怕的 hello 部署。 一旦我们突出显示它,我们按下 d 来运行 describe 命令以查看导致失败的原因。

K9s screenshot

K9s screenshot

浏览事件并不能告诉我们失败的原因。 接下来,我点击 esc 键,然后通过突出显示 pod 并输入 <shift-l> 来检查日志。

K9s screenshot

不幸的是,日志也没有提供任何有用的信息(可能是因为从未正确配置部署),并且 pod 将不会启动。

然后我 esc 返回,我将看看删除 pod 是否会解决此问题。 为此,我突出显示 pod 并使用 <ctrl-d>。 值得庆幸的是,k9s 会在删除之前提示用户。

K9s screenshot

虽然我确实删除了 pod,但部署资源仍然存在,因此将启动一个新的 pod。 它也将继续重启并崩溃,原因不详(我们还不知道)。

这里我将重复查看日志、描述资源,并使用 e 快捷方式甚至编辑正在运行的 pod 来对行为进行故障排除。 在这种特殊情况下,未配置失败的 pod 在此环境中运行。 因此,让我们删除部署以停止我们正在进行的崩溃然后重新启动循环。

我们可以通过键入 :deploy 并单击 Enter 键来访问部署。 从那里,我们突出显示并按下 <ctrl-d> 进行删除。

K9s screenshot

K9s screenshot

砰的一声,部署消失了! 只需按几个键即可清理此失败的部署。

k9s 是非常可定制的

因此,此应用程序具有大量的自定义选项,一直到 UI 的配色方案。 以下是一些你可能感兴趣的可编辑选项

整个应用程序都在 YAML 文件中配置,因此任何 Kubernetes 管理员都会对自定义感到熟悉。

使用 k9s 简化你的生活

我倾向于以非常手动的方式管理我团队的系统,更多的是为了大脑训练。 当我第一次听说 k9s 时,我想,“这只是懒惰的 Kubernetes”,所以我驳回了它,然后回去在任何地方进行手动干预。 在处理我的积压工作时,我实际上每天都开始使用它,并且我对它比单独使用 kubectl 快得多感到震惊。 现在我皈依了。

重要的是了解你的工具并掌握做某事的“困难方法”。 同样重要的是要记住,就管理而言,重要的是更智能地工作,而不是更努力地工作。 使用 k9s 是我实现该目标的方式。 我想我们可以称之为懒惰的 Kubernetes 管理,这没关系。

接下来要阅读的内容
标签
User profile image.
技术游牧者,从事我能找到的任何事情。 IT 领域筒仓预防的倡导者,与所有团队共享信息的重要性。 相信教育所有人并开源开发。 喜欢所有科技产品。 全部关于 K8s、混沌以及我能找到的任何新的和闪亮的东西! Mastodon ID

1 条评论

谢谢你! 这是一个很棒的工具。 我上周开始使用它,它已经改善了我的工作流程。

Creative Commons License本作品已根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.