通常,我关于 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。

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

因此,一旦你启动并运行了 k9s,你就可以快速完成很多事情。
k9s 的导航通过快捷键进行。 我们总是可以使用箭头键和回车键来选择列出的项目。 有很多其他通用键击可以导航到不同的视图
- 0 — 显示所有命名空间中的所有 pod

- d — 描述选定的 pod

- l — 显示选定的 pod 的日志

你可能会注意到 k9s 设置为使用 Vim 命令键,包括使用 J 和 K 键上下移动。 emacs 用户祝你好运 :)
快速查看不同的 Kubernetes 资源
需要访问不是 pod 的东西? 是的,我也是。 当我们输入冒号 (":") 键时,可以使用许多快捷方式。 从那里,你可以使用以下命令来导航。
- :svc — 跳转到服务视图。

- :deploy — 跳转到部署视图。

- :rb — 跳转到 基于角色的访问控制 (RBAC) 管理的角色绑定视图。

- :namespace — 跳回到命名空间视图。

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

此应用程序最常用的工具将是键盘; 要在任何页面上向上或向下移动,请使用箭头键。 如果你需要退出,请记住使用 Vim 键绑定。 键入 :q 并按 Enter 键退出。
使用 k9s 对 Kubernetes 进行故障排除的示例
当出现问题时,k9s 如何提供帮助? 为了完成一个示例,我由于配置错误而让几个 pod 死亡。 在下面,你可以看到我崩溃的可怕的 hello 部署。 一旦我们突出显示它,我们按下 d 来运行 describe 命令以查看导致失败的原因。


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

不幸的是,日志也没有提供任何有用的信息(可能是因为从未正确配置部署),并且 pod 将不会启动。
然后我 esc 返回,我将看看删除 pod 是否会解决此问题。 为此,我突出显示 pod 并使用 <ctrl-d>。 值得庆幸的是,k9s 会在删除之前提示用户。

虽然我确实删除了 pod,但部署资源仍然存在,因此将启动一个新的 pod。 它也将继续重启并崩溃,原因不详(我们还不知道)。
这里我将重复查看日志、描述资源,并使用 e 快捷方式甚至编辑正在运行的 pod 来对行为进行故障排除。 在这种特殊情况下,未配置失败的 pod 在此环境中运行。 因此,让我们删除部署以停止我们正在进行的崩溃然后重新启动循环。
我们可以通过键入 :deploy 并单击 Enter 键来访问部署。 从那里,我们突出显示并按下 <ctrl-d> 进行删除。


砰的一声,部署消失了! 只需按几个键即可清理此失败的部署。
k9s 是非常可定制的
因此,此应用程序具有大量的自定义选项,一直到 UI 的配色方案。 以下是一些你可能感兴趣的可编辑选项
- 调整你放置 config.yml 文件的位置(因此你可以将其存储在版本控制中)
- 将自定义别名添加到 alias.yml 文件
- 在 hotkey.yml 文件中创建自定义热键
- 浏览可用的插件或编写你自己的插件
整个应用程序都在 YAML 文件中配置,因此任何 Kubernetes 管理员都会对自定义感到熟悉。
使用 k9s 简化你的生活
我倾向于以非常手动的方式管理我团队的系统,更多的是为了大脑训练。 当我第一次听说 k9s 时,我想,“这只是懒惰的 Kubernetes”,所以我驳回了它,然后回去在任何地方进行手动干预。 在处理我的积压工作时,我实际上每天都开始使用它,并且我对它比单独使用 kubectl 快得多感到震惊。 现在我皈依了。
重要的是了解你的工具并掌握做某事的“困难方法”。 同样重要的是要记住,就管理而言,重要的是更智能地工作,而不是更努力地工作。 使用 k9s 是我实现该目标的方式。 我想我们可以称之为懒惰的 Kubernetes 管理,这没关系。
1 条评论