使用k9s来加速Kubernetes集群的管理

试试这个很棒的终端UI来管理Kubernetes集群吧。

通常,如果我的文章是关于管理K8s的,那么一定会出现各种用于集群管理的kubectl命令。最近有人向我推荐了 k9s 这个项目,它可以用来快速查看和解决K8s的常见问题。这个工具帮助我优化了工作流程,下面我将向您展示如何使用它。

你可以再Mac,windows,linux上安装k9s,安装教程可以参考 这里

我将会使用Linux和Minikube,Minikube是用来在个人电脑上运行k8s的轻量级方案。

设置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的开发者注明这个文件的格式可能会更改,可以在 这里 查看最新的版本。

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后,会弹出k9s基于文本的用户界面(UI)。如果没有标记命名空间,它将显示默认命名空间中的Pod。

如果您在具有多个Pod的环境中运行,则默认视图可能会不堪重负。另外,我们可以专注于给定的命名空间。退出应用程序并运行k9s -n ,其中是已存在的命名空间。在下面的图片中,我运行了k9s -n minecraft,会显示出现问题的pod。

k9s运行起来后,你可以快速的处理很多事情。

通过快捷键浏览k9。我们始终可以使用箭头建和Enter键来选择列出的项目。还有一些其他的通用按键可以导航到不同的视图:

  • 0 – 显示所有命名空间中的所有Pod
  • d – 描述选定的pod
  • l — 显示所选pod的日志

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

快速查看不同的Kubernetes的资源

需要查看pod之外的东西?你可以使用一些快捷键,只需要键入冒号(“:”)。以下是一些快捷键的用法:

  • :svc—跳转到服务视图。
  • :deploy—跳转到部署视图。
  • :rb-跳至Rolebindings视图以进行基于角色的访问控制(RBAC)管理。
  • :namespace—跳回到命名空间视图。
  • :cj-跳转到cronjobs视图以查看集群中计划的作业。

示例:如何使用k9s对Kubernetes进行故障排查

我故意配置错误导致几个pod停止。下图中,您可以看到Hello部署崩溃了。选中它以后,按d运行describe命令以查看导致故障的原因。

查看事件并不能找到失败原因,接下来,按下esc键,并选中pod,输入来检查它的日志。

不幸的是,日志也没有提供任何帮助(可能是因为部署从未正确配置过),因此pod不会启动。

之后我退出,然后试着删除pod看是否能解决问题。为此,我选中pod并使用。k9s在删除之前会提示用户。

虽然我确实删除了Pod,但部署资源仍然存在,因此将重新备份新的Pod。无论出于何种原因(假设我们并不知道),它会继续重启并崩溃。

我将再次查看日志,描述资源,并使用 e 快捷方式甚至编辑正在运行的Pod来解决问题。在现在这种情况下,发生故障的容器是因为未被配置正确而无法运行。因此,让我们删除部署以停止这个崩溃-重启的循环。

我们可以通过输入:deploy并单击Enter来进入部署视图。进入视图之后,选中并按进行删除。

部署失败了!仅需敲击几下键即可清理此失败的部署。

k9s是可高度定制的

k9s有大量自定义选项,甚至还可以定制UI的配色方案。以下是您可能感兴趣的一些可配置选项:

  • 调整放置config.yml文件的位置(你可以将它存储在 版本控制 的仓库中)
  • 自定义别名 添加到 alias.yml 文件
  • hotkey.yml 文件中创建 自定义热键
  • 搜索可用的 插件 或编写自己的插件

整个应用程序都使用YAML文件进行配置的,因此任何Kubernetes管理员都能比较熟悉如何自定义这些配置。

k9s让你生活变得简单

曾经我倾向于以一种非常手动的方式来管理我团队的系统,主要是用于大脑训练。当我第一次听说k9s时,我以为“这只是懒惰的Kubernetes”,所以我没有采用,继续进行手动干预。后来,我在处理积压工作时开始每天都使用它,让我震惊的是它比单独使用kubectl快得多。现在我已经完全转变了。

了解你的工具并且知道如何通过原始的方式做事情,这很重要。同时也要记住,就管理而言,更聪明而不是更努力地工作也很重要。使用k9s是我实现这一目标的方式。我猜我们可以称之为懒惰的管理Kubernetes。

【原文链接】 Speed up administration of Kubernetes clusters with k9s

==============================================================================

译者介绍 Grace,程序员,研究生毕业于SUNY at Stony Brook,目前供职于Linktime Cloud Company,对大数据技术以及数据可视化技术感兴趣。