K9s以时尚的方式管理您的Kubernetes集群

K9s - Kubernetes CLI,让你的集群管理更时尚!

K9s 提供了一个终端 UI,方便你与 Kubernetes 集群交互。
该项目旨在简化导航、观察和管理
你的应用程序的流程。K9s 会持续监控 Kubernetes 的变化,并提供后续命令来与你观察到的资源进行交互。


屏幕截图

  1. Pods
    K9s Pods

  2. 日志
    K9s日志

  3. Deployments
    K9s部署

文档

请参阅我们的 K9s 文档 网站,了解安装、使用、自定义和技巧。


Slack 频道

想与您的 K9s 用户同伴讨论 K9s 的功能,或者只是想表达您对这款工具的支持吗?


安装

K9s 可在 Linux、macOS 和 Windows 平台上使用。
Linux、Windows 和 Mac 的二进制文件以 tarball 格式在 发布页面 中提供。

shell 复制代码
brew install derailed/k9s/k9s
shell 复制代码
sudo port install k9s
  • 使用 snap(Linux)
shell 复制代码
snap install k9s --devmode
  • 在 Arch Linux 上
shell 复制代码
pacman -S k9s
  • 在 OpenSUSE Linux 发行版上
shell 复制代码
zypper install k9s
  • 在 FreeBSD 上
shell 复制代码
pkg install k9s
  • 在 Ubuntu 上
shell 复制代码
wget https://github.com/derailed/k9s/releases/latest/download/k9s_linux_amd64.deb && apt install ./k9s_linux_amd64.deb && rm k9s_linux_amd64.deb
shell 复制代码
winget install k9s
  • Windows 系统使用 Scoop
shell 复制代码
scoop install k9s
shell 复制代码
choco install k9s
  • 通过 GO 安装
shell 复制代码
# 注意:开发版本将生效!
go install github.com/derailed/k9s@latest
  • Linux 和 macOS 系统通过 Webi 安装
shell 复制代码
curl -sS https://webinstall.dev/k9s | bash
  • Linux 和 macOS 系统通过 pkgx 安装
shell 复制代码
pkgx k9s
  • Linux 和 macOS 系统通过 gah 安装
shell 复制代码
gah install k9s
  • Windows 系统通过 Webi 安装
shell 复制代码
curl.exe -A MS https://webinstall.dev/k9s | powershell
shell 复制代码
docker extension install spurin/k9s-dd-extension:latest

从源代码构建

K9s 目前使用 GO v1.23.X 或更高版本。
要从源代码构建 K9s,您必须:

  1. 克隆代码库
  2. 构建并运行可执行文件
shell 复制代码
make build && ./execs/k9s

使用 Docker 运行

运行官方 Docker 镜像

您可以通过挂载 KUBECONFIG 将 K9s 作为 Docker 容器运行:

shell 复制代码
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

默认路径为:

shell 复制代码
docker run --rm -it -v ~/.kube/config:/root/.kube/config quay.io/derailed/k9s

构建您自己的 Docker 镜像

您可以使用 Dockerfile 构建您自己的 K9s Docker 镜像以下命令:

shell 复制代码
docker build -t k9s-docker:v0.0.1 .

您可以获取最新的稳定版 kubectl 版本,并使用 --build-arg 选项将其传递给 docker build 命令。
您可以使用 --build-arg 选项传递任何有效的 kubectl 版本(例如 v1.18.0v1.19.1)。

shell 复制代码
KUBECTL_VERSION=$(make kubectl-stable-version 2>/dev/null)
docker build --build-arg KUBECTL_VERSION=${KUBECTL_VERSION} -t k9s-docker:0.1 .

运行你的容器:

shell 复制代码
docker run --rm -it -v ~/.kube/config:/root/.kube/config k9s-docker:0.1

预检

  • K9s 使用 256 色终端模式。在 `Nix 系统上,请确保 TERM 已正确设置。
shell 复制代码
export TERM=xterm-256color
  • 为了能够执行资源编辑命令,请确保已设置 EDITOR 和 KUBE_EDITOR 环境变量。
shell 复制代码
# Kubectl edit 命令将使用此环境变量。
export KUBE_EDITOR=my_fav_editor
  • K9s 推荐使用较新的 Kubernetes 版本,例如 1.28 及以上版本

K8S 兼容性

k9s k8s 客户端
>= v0.27.0 1.26.1
v0.26.7 - v0.26.6 1.25.3
v0.26.5 - v0.26.4 1.25.1
v0.26.3 - v0.26.1 1.24.3
v0.26.0 - v0.25.19 1.24.2
v0.25.18 - v0.25.3 1.22.3
v0.25.2 - v0.25.0 1.22.0
<= v0.24 1.21.3

命令行

shell 复制代码
# 列出当前版本
k9s 版本

# 获取有关 k9s 运行时的信息(日志、配置等)
k9s info

# 列出所有可用的 CLI 选项
k9s help

# 在给定命名空间中运行 k9s
k9s -n mycoolns

# 在现有的 KubeConfig 上下文中启动 k9s
k9s --context coolCtx

# 以只读模式启动 k9s - 禁用所有集群修改命令
k9s --readonly

日志和调试日志

鉴于 k9s 用户界面的特性,它会将日志生成到特定位置。
要查看日志并打开调试模式,请使用以下命令:

shell 复制代码
# 查找日志的存储位置
k9s info
text 复制代码
 ____  __.________
|    |/ _/   __   \______
|      < \____    /  ___/
|    |  \   /    /\___ \
|____|__ \ /____//____  >
        \/            \/

Version:           vX.Y.Z
Config:            /Users/fernand/.config/k9s/config.yaml
Logs:              /Users/fernand/.local/state/k9s/k9s.log
Dumps dir:         /Users/fernand/.local/state/k9s/screen-dumps
Benchmarks dir:    /Users/fernand/.local/state/k9s/benchmarks
Skins dir:         /Users/fernand/.local/share/k9s/skins
Contexts dir:      /Users/fernand/.local/share/k9s/clusters
Custom views file: /Users/fernand/.local/share/k9s/views.yaml
Plugins file:      /Users/fernand/.local/share/k9s/plugins.yaml
Hotkeys file:      /Users/fernand/.local/share/k9s/hotkeys.yaml
Alias file:        /Users/fernand/.local/share/k9s/aliases.yaml

查看 K9s 日志

shell 复制代码
tail -f /Users/fernand/.local/data/k9s/k9s.log

以调试模式启动 K9s

shell 复制代码
k9s -l debug

自定义日志目标

您可以使用 --logFile 参数覆盖默认日志文件目标:

shell 复制代码
k9s --logFile /tmp/k9s.log
less /tmp/k9s.log

或者通过 K9S_LOGS_DIR 环境变量:

shell 复制代码
K9S_LOGS_DIR=/var/log k9s
less /var/log/k9s.log

按键绑定

K9s 使用别名来导航大多数 K8s 资源。

操作 命令 注释
显示活动的键盘助记符和帮助 ?
显示所有可用的资源别名 ctrl-a
退出 K9 :quit:qctrl-c
上移/返回上一个视图 esc 如果有面包屑,这将转到上一个视图
使用单数/复数或简称查看 Kubernetes 资源 :pod⏎ 接受单数、复数、简称或别名,即 pod 或 pods
查看给定命名空间中的 Kubernetes 资源 :pod ns-x⏎
查看已过滤的 pod(新 v0.30.0!) :pod /fred⏎ 查看所有通过 fred 过滤的 pod
查看带标签的 pod(新 v0.30.0!) :pod app=fred,env=dev⏎ 查看所有标签与 app=fred 和 env=dev 匹配的 pod
查看给定上下文中的 pod(新 v0.30.0!) :pod @ctx1⏎ 查看上下文 ctx1 中的所有 pod。切换当前的 k9s 上下文!
通过给定过滤器过滤掉资源视图 /filter⏎ 支持 Regex2,例如 `fred
逆正则表达式过滤器 /!filter⏎ 保留所有不匹配的内容。
按标签过滤资源视图 /-l label-selector⏎
通过给定过滤器模糊查找资源 /-f filter⏎
退出视图/命令/过滤模式 <esc>
用于描述、查看、编辑、查看日志等的按键映射 d,v, e, l,...
查看并切换到另一个 Kubernetes 上下文(Pod 视图) :ctx⏎
查看并直接切换到另一个 Kubernetes 上下文(上次使用的视图) :ctx context-name⏎
查看并切换到另一个 Kubernetes 命名空间 :ns⏎
切换回上一个活动命令(类似于“cd -”的工作方式) - 在底部添加面包屑导航不是命令
在命令历史记录中前后移动 back: [, forward: ] 同上
查看所有已保存的资源 :screendump 或 sd⏎
删除资源(按 TAB 和 ENTER 确认) ctrl-d
终止资源(无确认对话框,相当于 kubectl delete --now) ctrl-k
启动脉冲视图 :pulses 或 pu⏎
启动 XRay 视图 :xray RESOURCE [NAMESPACE]⏎ RESOURCE 可以是 po、svc、dp、rs、sts、ds 之一,NAMESPACE 是可选的
启动 Popeye 视图 :popeye 或 pop⏎ 查看 popeye

K9s 配置

K9s 将其配置以 YAML 文件的形式保存在 k9s 目录中,具体位置取决于您的操作系统。K9s 利用 XDG 加载各种配置文件。有关您操作系统的默认位置信息,请参阅 此链接。如果您仍然感到困惑,快速的 k9s info 命令会显示 K9s 从哪里加载其配置。或者,您可以设置 K9S_CONFIG_DIR 来告诉 K9s 从哪个目录提取其配置。

Unix macOS Windows
~/.config/k9s ~/Library/Application Support/k9s %LOCALAPPDATA%\k9s

注意:此设置仍在不断变化中,在预发布阶段可能会有所变化!

现在,您可以通过设置一个环境变量来覆盖上下文 portForward 默认地址配置,该环境变量可以使用 K9S_DEFAULT_PF_ADDRESS=a.b.c.d 覆盖所有集群 portForward 本地地址。


yaml 复制代码
# $XDG_CONFIG_HOME/k9s/config.yaml
k9s:
  # 启用资源浏览器窗口的定期刷新。默认为 false
  liveViewAutoRefresh: false
  # !!New!! v0.50.8...
  # 扩展支持的 GPU 供应商列表。键是供应商名称,值必须与 k8s 资源驱动程序名称相对应。
  # 默认已知 GPU 供应商:
  # nvidia: nvidia.com/gpu
  # nvidia-shared: nvidia.com/gpu.shared
  # amd: amd.com/gpu
  # intel: gpu.intel.com/i915
  gpuVendors:
    bozo: bozo/gpu # 扩展 GPU 供应商并添加“bozo”
  # 屏幕转储的路径。默认值:'%temp_dir%/k9s-screens-%username%' (k9s 信息)
  screenDumpDir: /tmp/dumps
  # 表示 UI 轮询间隔(以秒为单位)。默认值为 2.0 秒。最小值为 2.0 - 以下值将以最小值为上限。
  refreshRate: 2
  # 覆盖默认的 k8s api 服务器请求超时时间。默认值为 120 秒。
  apiServerTimeout: 15 
  # 与 api 服务器连接断开后的重试次数。默认值为 15。
  maxConnRetry: 5
  # 指示是否禁用修改命令(例如 delete/kill/edit)。默认值为 false。
  readOnly: false
  # 此设置允许用户指定默认视图,但默认情况下未设置。
  defaultView: ""
  # 切换按下 CTRL-C 时是否退出 k9s。设置为 true 时,您需要通过 :quit 命令退出 K9s。默认值为 false。
  noExitOnCtrlC: false
  #UI 设置
  ui:
    # 启用鼠标支持。默认值为 false
    enableMouse: false
    # 设置为 true 以隐藏 K9s 标题。默认值为 false
    headless: false
    # 设置为 true 以隐藏 K9s 徽标。默认值为 false
    logoless: false
    # 设置为 true 以隐藏 K9s crumbs。默认值为 false
    crumbsless: false
    # 设置为 true 以在启动时隐藏 K9s 启动画面。默认值为 false。请注意,对于较大的集群或较高延迟的连接,在本地缓存完成填充之前,最初可能没有任何资源可见。
    splashless: false
    # 切换图标显示,因为并非所有终端都支持这些字符。默认值为 true
    noIcons: false
    # 切换响应式 UI。此选项提供监视磁盘工件更改并实时更新 UI 的功能。默认值为 false。
    reactive: false
    # 默认情况下,所有上下文都将使用 dracula 皮肤,除非在上下文配置文件中明确覆盖。
    skin: dracula # => 假设文件 skins/dracula.yaml 位于 $XDG_DATA_HOME/k9s/skins 目录中。可以使用 K9S_SKIN 覆盖。
    # 允许设置某些视图的默认全屏模式。(yaml、helm history、describe、value_extender、details、logs)默认为 false。
    defaultsToFullScreen: false
    # 显示完整的资源 GVR(组/版本/资源)而非仅显示 R。默认为 false。
    useFullGVRTitle: false
# 切换图标显示,因为并非所有终端都支持这些字符。
noIcons: false
# 切换 k9s 是否应从 GitHub 存储库版本中检查最新版本。默认为 false。
skipLatestRevCheck: false
# 修改 kubeconfig 或使用多个 kube 配置时,k9s 将清理不再使用的集群配置。将此标志设置为 true 将阻止 k9s 清理非活动集群配置。默认为 false。
keepMissingClusters: false
# 日志配置
logger:
  # 定义要返回的行数。默认为 100
  tail: 200
  # 定义视图中允许的日志总行数。默认为 1000
  buffer: 500
  # 表示日志时间线回溯的秒数。设置为 -1 将跟踪日志。默认为 -1。
  sinceSeconds: 300 # => 跟踪最后 5 分钟。
  # 切换日志换行。默认为 false
  textWrap: false
  # 禁用日志自动滚动。默认为 false。
  disableAutoscroll: false
  # 切换日志行时间戳信息。默认为 false
  showTime: false
# 启用 nodeShell 特性门控后,提供 shell pod 自定义功能!
shellPod:
  # 要使用的 shell pod 镜像。
  image: killerAdmin
  # shell pod 启动到的命名空间。
  namespace: default
  # shell pod 的资源限制。
  limits:
    cpu: 100m
    memory: 100Mi
  # 启用 TTY
  tty: true
  hostPathVolume:
    - name: docker-socket
    # 将 Docker 套接字挂载到 shell pod
    mountPath: /var/run/docker.sock
    # 主机上要挂载的路径
    hostPath: /var/run/docker.sock
    readOnly: true

Popeye 配置

K9s 已与 Popeye 集成,Popeye 是一款 Kubernetes 集群清理工具。Popeye 本身使用名为 spinach.yml 的配置,但与 K9s 集成时,集群特定的文件应命名为 $XDG_CONFIG_HOME/share/k9s/clusters/clusterX/contextY/spinach.yml。这样,您可以为每个集群使用不同的 spinach 配置。


Node Shell

通过在给定集群上启用 nodeShell 特性门控,K9s 允许您通过 shell 进入集群节点。启用后,在节点视图中,您将看到一个新的 s 表示 shell 菜单选项。K9s 将使用一个特殊的 k9s_shell pod 在选定节点上启动一个 pod。此外,您还可以使用预装了您喜欢的 shell 工具的自定义 Docker 镜像来优化您的 shell pod。默认情况下,k9s 使用 BusyBox 镜像,但您可以按如下方式配置它:

或者,您现在可以通过设置一个环境变量来覆盖上下文配置,该变量可以使用 K9S_FEATURE_GATE_NODE_SHELL=true|false 覆盖所有集群节点的 Shell 门控。

yaml 复制代码
# $XDG_CONFIG_HOME/k9s/config.yaml
k9s:
  # You can also further tune the shell pod specification
  shellPod:
    image: cool_kid_admin:42
    namespace: blee
    limits:
      cpu: 100m
      memory: 100Mi

然后在您的集群配置文件中...

yaml 复制代码
# $XDG_DATA_HOME/k9s/clusters/cluster-1/context-1
k9s:
  cluster: cluster-1
  readOnly: false
  namespace:
    active: default
    lockFavorites: false
    favorites:
    - kube-system
    - default
  view:
    active: po
  featureGates:
    nodeShell: true # => Enable this feature gate to make nodeShell available on this cluster
  portForwardAddress: localhost

自定义 Shell Pod

您还可以通过向 Shell Pod 添加 hostPathVolume 来自定义 Shell Pod。这允许您将本地目录或文件挂载到 Shell Pod 中。例如,如果您想将 Docker 套接字挂载到 Shell Pod,可以执行以下操作:

yaml 复制代码
k9s:
  shellPod:
    hostPathVolume:
    - name: docker-socket
      # Mount the Docker socket into the shell pod
      mountPath: /var/run/docker.sock
      # The path on the host to mount
      hostPath: /var/run/docker.sock
      readOnly: true

这会将 Docker 套接字挂载到位于 /var/run/docker.sock 的 shell pod 中,并使其变为只读状态。您也可以用类似的方式挂载任何其他目录或文件。

命令别名

在 K9s 中,您可以定义自己的命令别名(简称)来访问您的资源。在 $HOME/.config/k9s 中定义一个名为 aliases.yaml 的文件。
K9s 别名定义了 alias:gvr 的组合。gvr(组/版本/资源)代表完全限定的 Kubernetes 资源标识符。以下是别名文件的示例:

yaml 复制代码
#  $XDG_DATA_HOME/k9s/aliases.yaml
aliases:
  pp: v1/pods
  crb: rbac.authorization.k8s.io/v1/clusterrolebindings
  # As of v0.30.0 you can also refer to another command alias...
  fred: pod fred app=blee # => view pods in namespace fred with labels matching app=blee

使用此别名文件,您现在可以输入 :pp:crb:fred 来激活相应的命令。


热键支持

进入命令模式并输入资源名称或别名,对于浏览常用资源来说可能很麻烦。
我们引入了热键功能,允许用户定义自己的组合键来激活自己喜欢的资源视图。

此外,您还可以通过在 $XDG_DATA_HOME/k9s/clusters/clusterX/contextY/hotkeys.yaml 中添加上下文级别的配置文件来定义特定于上下文的热键。

为了全局显示热键,请按照以下步骤操作:

  1. 创建一个名为 $XDG_CONFIG_HOME/k9s/hotkeys.yaml 的文件

  2. 将以下内容添加到您的 hotkeys.yaml 文件中。您可以使用资源名称/简称来指定命令,即与在命令模式下键入命令相同。

    yaml 复制代码
    #  $XDG_CONFIG_HOME/k9s/hotkeys.yaml
    hotKeys:
      # Hitting Shift-0 navigates to your pod view
      shift-0:
        shortCut:    Shift-0
        description: Viewing pods
        command:     pods
      # Hitting Shift-1 navigates to your deployments
      shift-1:
        shortCut:    Shift-1
        description: View deployments
        command:     dp
      # Hitting Shift-2 navigates to your xray deployments
      shift-2:
        shortCut:    Shift-2
        description: Xray Deployments
        command:     xray deploy
      # Hitting Shift-S view the resources in the namespace of your current selection
      shift-s:
        shortCut:    Shift-S
        override:    true # => will override the default shortcut related action if set to true (default to false)
        description: Namespaced resources
        command:     "$RESOURCE_NAME $NAMESPACE"
        keepHistory: true # whether you can return to the previous view

通过 WebSocket 进行端口转发

K9s 遵循 kubectl 功能标志环境变量来启用/禁用通过 WebSocket 进行端口转发。(1.30 及以上版本默认启用)
要禁用 WebSocket 支持,请设置 KUBECTL_PORT_FORWARD_WEBSOCKETS=false


FastForwards

从 v0.25.0 开始,您可以利用 FastForwards 功能来告诉 K9s 如何默认进行端口转发。在处理多个容器或暴露多个端口的容器的情况下,从对话框中指定所需的端口转发可能会很麻烦,因为在大多数情况下,您已经知道所需的容器/端口元组。对于这些用例,您现在可以使用以下注解来注释清单:

@ k9scli.io/auto-port-forwards
直接激活一个或多个端口转发,完全绕过端口转发对话框。
@ k9scli.io/port-forwards
在启动端口转发对话框时预先选择一个或多个端口转发。

注解值的格式为 container-name::[local-port:]container-port

注意:对于上述任何一种情况,您都可以在注解中通过名称或编号指定容器端口!

Example

yaml 复制代码
# Pod fred
apiVersion: v1
kind: Pod
metadata:
  name: fred
  annotations:
    k9scli.io/auto-port-forwards: zorg::5556        # => will default to container zorg port 5556 and local port 5566. No port-forward dialog will be shown.
    # Or...
    k9scli.io/port-forwards: bozo::9090:p1          # => launches the port-forward dialog selecting default port-forward on container bozo port named p1(8081)
                                                    # mapping to local port 9090.
    ...
spec:
  containers:
  - name: zorg
    ports:
    - name: p1
      containerPort: 5556
    ...
  - name: bozo
    ports:
    - name: p1
      containerPort: 8081
    - name: p2
      containerPort: 5555
    ...

注释值必须指定要转发到的容器以及本地端口和容器端口。容器端口可以指定为端口号或端口名称。如果省略本地端口,则本地端口将默认为容器端口号。以下是一些示例:

  1. bozo::http - 在容器“bozo”上创建一个 pf,端口名为 http。如果 http 指定端口号 8080,则本地端口也将为 8080。
  2. bozo::9090:http - 在容器“bozo”上创建一个 pf,映射本地端口 9090->http(8080)
  3. bozo::9090:8080 - 在容器“bozo”上创建一个 pf,映射本地端口 9090->8080

已知问题

此工作仍在进行中!如果出现问题或需要某个功能,
请提交问题,如果愿意,请提交 PR!

如果出现以下情况,K9s 很可能会崩溃:

  1. 您运行的是旧版本的 Kubernetes。K9s 在更高版本的 Kubernetes 上运行效果最佳。
  2. 您没有足够的 RBAC 权限来管理您的集群。

关于项目

K9s 提供了一个终端 UI,用于与您的 Kubernetes 集群交互。该项目旨在让您更轻松地在实际环境中导航、观察和管理您的应用程序。K9s 会持续监视 Kubernetes 的变化,并提供后续命令来与您观察到的资源进行交互。
Apache-2.0
Golang
31,956
2014
152
2019-01-26
2025-11-25

增长趋势 - stars