通常,我关于 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 条评论