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

日志

Deployments

请参阅我们的 K9s 文档 网站,了解安装、使用、自定义和技巧。
想与您的 K9s 用户同伴讨论 K9s 的功能,或者只是想表达您对这款工具的支持吗?
K9s 可在 Linux、macOS 和 Windows 平台上使用。
Linux、Windows 和 Mac 的二进制文件以 tarball 格式在 发布页面 中提供。
brew install derailed/k9s/k9s
sudo port install k9s
snap install k9s --devmode
pacman -S k9s
zypper install k9s
pkg install k9s
wget https://github.com/derailed/k9s/releases/latest/download/k9s_linux_amd64.deb && apt install ./k9s_linux_amd64.deb && rm k9s_linux_amd64.deb
winget install k9s
scoop install k9s
choco install k9s
# 注意:开发版本将生效!
go install github.com/derailed/k9s@latest
curl -sS https://webinstall.dev/k9s | bash
pkgx k9s
gah install k9s
curl.exe -A MS https://webinstall.dev/k9s | powershell
docker extension install spurin/k9s-dd-extension:latest
K9s 目前使用 GO v1.23.X 或更高版本。
要从源代码构建 K9s,您必须:
make build && ./execs/k9s
您可以通过挂载 KUBECONFIG 将 K9s 作为 Docker 容器运行:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
默认路径为:
docker run --rm -it -v ~/.kube/config:/root/.kube/config quay.io/derailed/k9s
您可以使用 Dockerfile 构建您自己的 K9s Docker 镜像以下命令:
docker build -t k9s-docker:v0.0.1 .
您可以获取最新的稳定版 kubectl 版本,并使用 --build-arg 选项将其传递给 docker build 命令。
您可以使用 --build-arg 选项传递任何有效的 kubectl 版本(例如 v1.18.0 或 v1.19.1)。
KUBECTL_VERSION=$(make kubectl-stable-version 2>/dev/null)
docker build --build-arg KUBECTL_VERSION=${KUBECTL_VERSION} -t k9s-docker:0.1 .
运行你的容器:
docker run --rm -it -v ~/.kube/config:/root/.kube/config k9s-docker:0.1
export TERM=xterm-256color
# Kubectl edit 命令将使用此环境变量。
export KUBE_EDITOR=my_fav_editor
| 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 |
# 列出当前版本
k9s 版本
# 获取有关 k9s 运行时的信息(日志、配置等)
k9s info
# 列出所有可用的 CLI 选项
k9s help
# 在给定命名空间中运行 k9s
k9s -n mycoolns
# 在现有的 KubeConfig 上下文中启动 k9s
k9s --context coolCtx
# 以只读模式启动 k9s - 禁用所有集群修改命令
k9s --readonly
鉴于 k9s 用户界面的特性,它会将日志生成到特定位置。
要查看日志并打开调试模式,请使用以下命令:
# 查找日志的存储位置
k9s info
____ __.________
| |/ _/ __ \______
| < \____ / ___/
| | \ / /\___ \
|____|__ \ /____//____ >
\/ \/
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
tail -f /Users/fernand/.local/data/k9s/k9s.log
k9s -l debug
您可以使用 --logFile 参数覆盖默认日志文件目标:
k9s --logFile /tmp/k9s.log
less /tmp/k9s.log
或者通过 K9S_LOGS_DIR 环境变量:
K9S_LOGS_DIR=/var/log k9s
less /var/log/k9s.log
K9s 使用别名来导航大多数 K8s 资源。
| 操作 | 命令 | 注释 |
|---|---|---|
| 显示活动的键盘助记符和帮助 | ? |
|
| 显示所有可用的资源别名 | ctrl-a |
|
| 退出 K9 | :quit、:q、ctrl-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 将其配置以 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 本地地址。
# $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
K9s 已与 Popeye 集成,Popeye 是一款 Kubernetes 集群清理工具。Popeye 本身使用名为 spinach.yml 的配置,但与 K9s 集成时,集群特定的文件应命名为 $XDG_CONFIG_HOME/share/k9s/clusters/clusterX/contextY/spinach.yml。这样,您可以为每个集群使用不同的 spinach 配置。
通过在给定集群上启用 nodeShell 特性门控,K9s 允许您通过 shell 进入集群节点。启用后,在节点视图中,您将看到一个新的 s 表示 shell 菜单选项。K9s 将使用一个特殊的 k9s_shell pod 在选定节点上启动一个 pod。此外,您还可以使用预装了您喜欢的 shell 工具的自定义 Docker 镜像来优化您的 shell pod。默认情况下,k9s 使用 BusyBox 镜像,但您可以按如下方式配置它:
或者,您现在可以通过设置一个环境变量来覆盖上下文配置,该变量可以使用 K9S_FEATURE_GATE_NODE_SHELL=true|false 覆盖所有集群节点的 Shell 门控。
# $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
然后在您的集群配置文件中...
# $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 添加 hostPathVolume 来自定义 Shell Pod。这允许您将本地目录或文件挂载到 Shell Pod 中。例如,如果您想将 Docker 套接字挂载到 Shell Pod,可以执行以下操作:
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 资源标识符。以下是别名文件的示例:
# $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 中添加上下文级别的配置文件来定义特定于上下文的热键。
为了全局显示热键,请按照以下步骤操作:
创建一个名为 $XDG_CONFIG_HOME/k9s/hotkeys.yaml 的文件
将以下内容添加到您的 hotkeys.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
K9s 遵循 kubectl 功能标志环境变量来启用/禁用通过 WebSocket 进行端口转发。(1.30 及以上版本默认启用)
要禁用 WebSocket 支持,请设置 KUBECTL_PORT_FORWARD_WEBSOCKETS=false
从 v0.25.0 开始,您可以利用 FastForwards 功能来告诉 K9s 如何默认进行端口转发。在处理多个容器或暴露多个端口的容器的情况下,从对话框中指定所需的端口转发可能会很麻烦,因为在大多数情况下,您已经知道所需的容器/端口元组。对于这些用例,您现在可以使用以下注解来注释清单:
@ k9scli.io/auto-port-forwards
直接激活一个或多个端口转发,完全绕过端口转发对话框。
@ k9scli.io/port-forwards
在启动端口转发对话框时预先选择一个或多个端口转发。
注解值的格式为 container-name::[local-port:]container-port
注意:对于上述任何一种情况,您都可以在注解中通过名称或编号指定容器端口!
# 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
...
注释值必须指定要转发到的容器以及本地端口和容器端口。容器端口可以指定为端口号或端口名称。如果省略本地端口,则本地端口将默认为容器端口号。以下是一些示例:
此工作仍在进行中!如果出现问题或需要某个功能,
请提交问题,如果愿意,请提交 PR!
如果出现以下情况,K9s 很可能会崩溃: