K9s
K9s 是一个用于 Kubernetes 的终端用户界面 (TUI)。它比点击网页仪表盘更快,比原始 kubectl 更易发现。
使用时机
- 终端 Kubernetes 集群管理:快速、交互式的 curses UI,用于导航 Pod、服务和部署。
- 实时日志流式传输与资源监控:跟踪多个 Pod 的日志、按 CPU/内存排序以及端口转发。
- 自定义 K9s 插件与别名:通过自定义 Shell 命令(例如运行 stern、cert-manager 状态)扩展 CLI。
- 只读检查与故障排除:使用只读模式安全地调试生产集群。
快速开始
# 使用当前 kubeconfig 启动 k9s
k9s
# k9s 中的导航快捷键:
# :pods - 跨命名空间查看所有 Pod
# :deploy - 查看部署
# :svc - 查看服务
# /<term> - 在当前视图中过滤项目
# l - 流式传输所选 Pod 的日志
# s - 在所选容器中打开 Shell(exec)
核心概念
#自定义插件配置(plugins.yaml)
添加自定义键盘命令以加速调试:
# ~/.config/k9s/plugins.yaml
plugin:
# 在部署上按 'Shift-D' 查看详细发布历史
rollout-history:
shortCut: Shift-D
confirm: false
description: "发布历史"
scopes:
- deployments
command: kubectl
background: false
args:
- rollout
- history
- deployment/$NAME
- -n
- $NAMESPACE
# 在 Pod 上按 'Shift-F' 启动交互式调试容器
debug-pod:
shortCut: Shift-F
confirm: true
description: "调试 Pod"
scopes:
- pods
command: kubectl
background: false
args:
- debug
- -it
- $NAME
- --image=nicolaka/netshoot
- -n
- $NAMESPACE
#基本导航与键盘快捷键
加速集群管理:
:pod:跳转到跨命名空间的 Pod 视图。:svc、:deploy、:ing:跳转到服务、部署和 Ingress 视图。/:按名称或状态搜索和过滤资源。l:跟踪所选 Pod 或容器的日志。s:在所选容器内打开交互式 Shell(sh/bash)。Shift-F:将本地端口转发到所选 Pod 的服务端口。y:查看所选资源的完整 YAML 清单。
#使用自定义选项启动 K9s
以安全模式启动 K9s:
# 以只读模式启动,防止在生产环境中意外删除 Pod
k9s --readonly --namespace production
# 指定自定义上下文和刷新频率
k9s --context prod-eks-cluster --refresh 2
常见模式
#自定义 K9s 快捷键与插件
问题:频繁跨不同命名空间运行自定义 kubectl 命令。
解决方案:在 ~/.config/k9s/plugin.yaml 中定义自定义插件。
# ~/.config/k9s/plugin.yaml
plugin:
raw-logs:
shortCut: Shift-L
description: "不带截断的日志跟踪"
scopes:
- pods
command: kubectl
background: false
args:
- logs
- -f
- $NAME
- -n
- $NAMESPACE
- --context
- $CONTEXT
最佳实践(2026)
- 务必在连接生产环境时使用
k9s --readonly,以防止意外删除。 - 务必在
~/.config/k9s/plugins.yaml中为重复的kubectl命令配置自定义插件。 - 务必使用端口转发快捷键(
Shift-F),而不是输入冗长的kubectl port-forward命令。 - 务必使用
<all>命名空间或特定命名空间过滤视图,以减少 API 服务器的查询负载。 - 切勿保留大量打开的端口转发;在
:portforwards视图中管理并终止它们。 - 切勿在没有设置合适的
--refresh间隔的情况下,对大型企业集群运行 K9s。 - 切勿在未验证备份的情况下,通过 K9s 删除持久卷声明(PVC)。
故障排除
| 错误 | 原因 | 解决方案 |
|---|---|---|
Boom!! K9s cannot connect to cluster | 活动 kubeconfig 上下文无效或集群端点不可达。 | 验证连接:kubectl cluster-info 并使用 kubectl config use-context 切换上下文。 |
Pod logs failing to stream in k9s | Pod 容器崩溃或用户缺少 RBAC pods/log 权限。 | 检查容器状态并验证集群角色权限。 |
Terminal display corrupted / artifacts | 不兼容的终端 terminfo 或终端窗口太小。 | 运行 export TERM=xterm-256color 并最大化终端窗口。 |