- A+
通常情况下,我写的关于 Kubernetes 管理的文章中用的都是做集群管理的 kubectl 命令。然而最近,有人给我介绍了 k9s 项目,可以让我快速查看并解决 Kubernetes 中的日常问题。这极大地改善了我的工作流程,我会在这篇教程中告诉你如何上手它。
它可以安装在 Mac、Windows 和 Linux 中,每种操作系统的说明可以在这里找到。请先完成安装,以便能够跟上本教程。
我会使用 Linux 和 Minikube,这是一种在个人电脑上运行 Kubernetes 的轻量级方式。按照此教程或使用该文档来安装它
设置 k9s 配置文件
安装好 k9s 应用后,从帮助命令开始总是很好的起点。
$ 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 ____ __.________ | |/ _/ __ \______ | < \____ / ___/ | | \ / /\___ \ |____|__ \ /____//____ > \/ \/ 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: 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
$ minikube status host: Running kubelet: Running apiserver: Running kubeconfig: Configured
运行 k9s 来探索一个 Kubernetes 集群
有了配置文件,并指向我们的本地集群,我们现在可以运行 k9s 命令了。
$ k9s
启动后,会弹出 k9s 的基于文本的用户界面。在没有指定命名空间标志的情况下,它会向你显示默认命名空间中的 Pod。
K9s screenshot
如果你运行在一个有很多 Pod 的环境中,默认视图可能会让人不知所措。或者,我们可以将注意力集中在给定的命名空间上。退出该应用程序,运行 k9s -n <namespace>,其中 <namespace> 是已存在的命名空间。在下图中,我运行了 k9s -n minecraft,它显示了我损坏的 Pod:
K9s screenshot
所以,一旦你有了 k9s 后,有很多事情你可以更快地完成。
通过快捷键来导航 k9s,我们可以随时使用方向键和回车键来选择列出的项目。还有不少其他的通用快捷键可以导航到不同的视图。
0:显示在所有命名空间中的所有 Pod
d:描述所选的 Pod
l:显示所选的 Pod 的日志
你可能会注意到 k9s 设置为使用 Vim 命令键,包括使用 J 和 K 键上下移动等。Emacs 用户们,败退吧
快速查看不同的 Kubernetes 资源
需要去找一个不在 Pod 里的东西吗?是的,我也需要。当我们输入冒号(:)键时,可以使用很多快捷方式。从那里,你可以使用下面的命令来导航。
:svc:跳转到服务视图
:deploy:跳转到部署视图
:rb:跳转到角色绑定视图,用于 基于角色的访问控制(RBAC)管理
:namespace:跳转到命名空间视图
:cj:跳转到 cronjob 视图,查看集群中计划了哪些作业。
这个应用最常用的工具是键盘;要在任何页面往上或下翻页,请使用方向键。如果你需要退出,记得使用 Vim 绑定键,键入 :q,然后按回车键离开。
用 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 并点击回车进入部署。从那里我们高亮显示并按 ctrl-d 来删除。
K9s screenshot
K9s screenshot
这个有问题的部署被干掉了! 只用了几个按键就把这个失败的部署给清理掉了。
k9s 是极其可定制的
这个应用有很多自定义选项、乃至于 UI 的配色方案。这里有几个可编辑的选项,你可能会感兴趣。
- 调整你放置 config.yml 文件的位置(这样你就可以把它存储在版本控制中)。
- 在 alias.yml 文件中添加自定义别名。
- 在 hotkey.yml 文件中创建自定义热键。
- 探索现有的插件或编写自己的插件。
整个应用是在 YAML 文件中配置的,所以定制化对于任何 Kubernetes 管理员来说都会觉得很熟悉。
用 k9s 简化你的生活
我倾向于以一种非常手动的方式来管理我团队的系统,更多的是为了锻炼脑力,而不是别的。当我第一次听说 k9s 的时候,我想,“这只是懒惰的 Kubernetes 而已。”于是我否定了它,然后回到了到处进行人工干预的状态。实际上,当我在处理积压工作时就开始每天使用它,而让我震惊的是它比单独使用 kubectl 快得多。现在,我已经皈依了。
了解你的工具并掌握做事情的“硬道理”很重要。还有一点很重要的是要记住,就管理而言,重要的是要更聪明地工作,而不是更努力。使用 k9s,就是我践行这个目标的方法。我想,我们可以把它叫做懒惰的 Kubernetes 管理,也没关系。
- 安卓客户端下载
- 微信扫一扫
- 微信公众号
- 微信公众号扫一扫