10

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

 4 years ago
source link: http://dockone.io/article/10410
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

试试这个很棒的终端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。

NvEzIjV.png!web

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

AbIbUvY.png!web

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

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

  • 0 - 显示所有命名空间中的所有Pod
    ya2EZr6.png!web
  • d - 描述选定的pod
    Uv2MJ37.png!web
  • l — 显示所选pod的日志
    qiiqYfZ.png!web

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

快速查看不同的Kubernetes的资源

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

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

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

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

raiQbyy.png!webBNvuiae.png!web

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

bQRFnmA.png!web

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

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

Rfueia6.png!web

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

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

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

auay63j.png!webqmMFVnm.png!web

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

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,对大数据技术以及数据可视化技术感兴趣。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK