mcpField
K
K9s

K9s

官方精选
github.com云与 DevOps34.9kk9s1 天前更新
代码仓库访问官网

关于 K9s

K9s 提供交互式命令行界面来导航和观察 Kubernetes 集群。通过直观的视图快速检查 Pod、节点、服务和其他资源的状态。支持在集群中执行常见操作,如扩展、删除和查看日志。

主要功能

  1. 01浏览 Pod、节点、服务、部署等 Kubernetes 资源
  2. 02实时查看资源状态、日志和事件
  3. 03直接从终端执行扩展、删除、重启等操作
  4. 04支持多个集群上下文之间的切换

适用场景

  1. 01调试集群中出现故障的应用和服务
  2. 02监控生产环境中的资源使用情况
  3. 03快速管理和维护 Kubernetes 部署

安装

选择你的系统或包管理器,复制命令到终端运行。

$
brew install derailed/k9s/k9s

安装完成后运行k9s --version确认安装成功。

命令示例

常用命令按使用顺序排列。

01
k9s
02
k9s --context production

详细介绍

k9s

K9s - 以酷炫方式管理集群的 Kubernetes 命令行工具!

K9s 提供终端 UI,用于与 Kubernetes 集群交互。 本项目旨在让你更轻松地浏览、观察和管理 实际运行环境中的应用。K9s 会持续监视 Kubernetes 的变化,并提供后续命令来与你观察到的资源交互。


说明……

K9s 并非由财大气粗的大公司打造。 这是一个复杂的开源软件项目,维护和支持它需要我投入大量时间。 K9s 将始终保持开源,因此免费!话虽如此,如果你觉得 k9s 让日常的 Kubernetes 使用体验更好一些,为你节省了时间并提高了效率,请考虑赞助我们! 你的捐赠将大有助益,让我们的服务器持续运行,也让冰箱里一直有啤酒!

谢谢!


Go Report Card golangci badge Docker Pulls release License Releases


截图

  1. Pods README 配图
  2. 日志 README 配图
  3. 部署 README 配图

演示视频/录屏


文档

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


Slack 频道

想和其他 K9sers 讨论 K9s 的功能,或只是表达对这款工具的支持吗?


安装

K9s 可用于 Linux、macOS 和 Windows 平台。 Linux、Windows 和 Mac 的二进制文件可在发布页面以 tarball 的形式获取。

  • 通过 Homebrew 安装,适用于 macOS 或 Linux

    brew install derailed/k9s/k9s
    
  • 通过 MacPorts 安装

    sudo port install k9s
    
  • 通过 snap 安装,适用于 Linux

    snap install k9s --devmode
    
  • 在 Arch Linux 上安装

    pacman -S k9s
    
  • 在 OpenSUSE Linux 发行版上安装

    zypper install k9s
    
  • 在 FreeBSD 上安装

    pkg install k9s
    
  • 在 Ubuntu 上安装

    wget https://github.com/derailed/k9s/releases/latest/download/k9s_linux_amd64.deb && sudo apt install ./k9s_linux_amd64.deb && rm k9s_linux_amd64.deb
    
  • 在 Fedora(42+)上安装

    dnf install k9s
    
  • 通过 Winget 安装,适用于 Windows

    winget install k9s
    
  • 通过 Scoop 安装,适用于 Windows

    scoop install k9s
    
  • 通过 Chocolatey 安装,适用于 Windows

    choco install k9s
    
  • 通过 GO 安装

    # NOTE: The dev version will be in effect!
    go install github.com/derailed/k9s@latest
    
  • 通过 Webi 安装,适用于 Linux 和 macOS

    curl -sS https://webinstall.dev/k9s | bash
    
  • 通过 pkgx 安装,适用于 Linux 和 macOS

    pkgx k9s
    
  • 通过 gah 安装,适用于 Linux 和 macOS

    gah install k9s
    
  • 通过 Webi 安装,适用于 Windows

    curl.exe -A MS https://webinstall.dev/k9s | powershell
    
  • 作为 Docker Desktop 扩展(用于 Docker Desktop 内置的 Kubernetes 服务端)

    docker extension install spurin/k9s-dd-extension:latest
    

从源代码构建

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

  1. 克隆仓库

  2. 构建并运行可执行文件

    make build && ./execs/k9s
    

使用 Docker 运行

运行官方 Docker 镜像

通过挂载 KUBECONFIG,即可将 k9s 作为 Docker 容器运行:

docker run --rm -it -v $KUBECONFIG:/root/.kube/config derailed/k9s

默认路径为:

docker run --rm -it -v ~/.kube/config:/root/.kube/config derailed/k9s
构建自己的 Docker 镜像

可以使用以下命令,通过 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
构建多平台镜像

make imgx 目标通过 Docker buildx 为 linux/amd64 和 linux/arm64 构建镜像:

make imgx

跨架构构建依赖 QEMU 仿真。Docker Desktop 已内置此功能。在普通的 Docker Engine 安装中,请参阅 buildx 多平台文档 以启用仿真。

使用 BUILD_PLATFORMS、IMG_NAME 和 VERSION 覆盖默认值:

make imgx BUILD_PLATFORMS=linux/amd64,linux/arm64 IMG_NAME=your-org/k9s VERSION=v0.0.1

预检

  • K9s 使用 256 色终端模式。在 `Nix 系统上,请确保 TERM 设置正确。

    export TERM=xterm-256color
    
  • 若要执行资源编辑命令,请确保已设置 EDITOR 和 KUBE_EDITOR 环境变量。

    # Kubectl edit 命令将使用此环境变量。
    export KUBE_EDITOR=my_fav_editor
    
  • K9s 优先支持较新的 Kubernetes 版本,即 1.28+


K8S 兼容性矩阵

k9sk8s 客户端
>= v0.27.01.26.1
v0.26.7 - v0.26.61.25.3
v0.26.5 - v0.26.41.25.1
v0.26.3 - v0.26.11.24.3
v0.26.0 - v0.25.191.24.2
v0.25.18 - v0.25.31.22.3
v0.25.2 - v0.25.01.22.0
<= v0.241.21.3

命令行

# List current version
k9s version

# To get info about K9s runtime (logs, configs, etc..)
k9s info

# List all available CLI options
k9s help

# To run K9s in a given namespace
k9s -n mycoolns

# Start K9s in an existing KubeConfig context
k9s --context coolCtx

# Start K9s in readonly mode - with all cluster modification commands disabled
k9s --readonly

日志和调试日志

由于 UI 的特性,k9s 会将日志写入特定位置。 要查看日志并启用调试模式,请使用以下命令:

# Find out where the logs are stored
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
查看 K9s 日志
tail -f /Users/fernand/.local/data/k9s/k9s.log
以调试模式启动 K9s
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
退出 K9s: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>
查看并切换到其他 Kubernetes 上下文(Pod 视图):ctx⏎
查看并直接切换到其他 Kubernetes 上下文(上次使用的视图):ctx context-name⏎
查看并切换到其他 Kubernetes 命名空间:ns⏎
切换回上一个活动命令(类似于 cd - 的作用)-在底部添加路径导航的操作不是命令
在命令历史记录中前进或后退后退:[,前进:]同上
查看所有已保存的资源:screendump or sd⏎
删除资源(按 TAB 和 ENTER 确认)ctrl-d
强制删除资源(不显示确认对话框,相当于 kubectl delete --now)ctrl-k
打开脉冲视图:pulses or pu⏎
打开 XRay 视图:xray RESOURCE [NAMESPACE]⏎RESOURCE 可以是 po、svc、dp、rs、sts、ds 之一,NAMESPACE 为可选项
打开 Popeye 视图:popeye or pop⏎参见 popeye
标记资源space
标记一组连续的资源ctrl-space
清除所有标记ctrl-\
将资源保存到文件ctrl-s
切换故障/错误显示ctrl-z
切换宽列ctrl-w
切换标题显示ctrl-e
切换路径导航ctrl-g
将选定列向左移动shift-left arrow
将选定列向右移动shift-right arrow
按选定列排序shift-o
按名称排序shift-n
按创建时间排序shift-a
按命名空间排序shift-p仅在查看所有命名空间时可用
按状态排序shift-s
复制资源名称c
复制命名空间n
查看 YAMLy
查看日志l具体取决于资源类型
查看之前的日志p具体取决于资源类型
进入容器 Shells仅适用于 Pod
附加到容器a仅适用于 Pod
描述资源d
编辑资源e只读模式下不可用
显示端口转发fPod/Service/Container
端口转发shift-fPod/Service/Container
跳转到命名空间w命名空间列可用时
跳转到所有者shift-j资源有所有者时
使用/切换命名空间u命名空间视图
UsedBy(显示使用此资源的资源)uServiceAccount/PVC/Secret/ConfigMap
基准测试(运行/停止)bService/端口转发
切换文本换行w日志视图
切换时间戳t日志视图
切换全屏f日志/YAML/详情视图
刷新/重新加载视图ctrl-r
触发(CronJob)tCronJob 视图
封锁/解除封锁节点u节点视图
排空节点r节点视图
重启资源rDeployment/DaemonSet/StatefulSet
回滚资源ctrl-lReplicaSet
查看 ReplicaSetzDeployment 视图

K9s 配置

K9s 将配置保存为 k9s 目录中的 YAML 文件,目录位置取决于你的操作系统。K9s 使用 XDG 加载各种配置文件。有关操作系统默认目录位置的信息,请参阅此链接。如果仍有疑问,运行 k9s info 即可查看 k9s 从哪里加载配置。或者,你可以设置 K9S_CONFIG_DIR,指定 K9s 加载配置的目录。

UnixmacOSWindows
~/.config/k9s~/Library/Application Support/k9s%LOCALAPPDATA%\k9s

注意:此功能仍在调整中,预发布阶段可能会发生变化!

现在,你可以通过设置环境变量 K9S_DEFAULT_PF_ADDRESS=a.b.c.d,覆盖 context 的默认端口转发地址配置,并为所有集群设置端口转发的本地地址。

也可以通过环境变量控制剪贴板行为:

  • K9S_CLIPBOARD=auto|native|osc52(默认值为 auto)

    • auto:优先尝试原生剪贴板工具;如果不可用,再回退到 OSC52。
    • native:仅使用原生剪贴板工具(xclip/xsel/wl-clipboard 等)。
    • osc52:强制使用 OSC52 写入剪贴板。
  • K9S_OSC52_MAX=<encoded-bytes> 设置 OSC52 负载大小上限;超过上限时,k9s 会拒绝复制操作。默认值为 74994。

    # $XDG_CONFIG_HOME/k9s/config.yaml
    k9s:
      # Enable periodic refresh of resource browser windows. Default false
      liveViewAutoRefresh: false
      # !!New!! v0.50.8...
      # Extends the list of supported GPU vendors. The key is the vendor name, the value must correspond to k8s resource driver designation.
      # Default known GPU vendors:
      # nvidia: nvidia.com/gpu
        # nvidia-shared: nvidia.com/gpu.shared
        # amd: amd.com/gpu
        # intel: gpu.intel.com/i915
      gpuVendors:
        bozo: bozo/gpu  # extends the gpu vendor and add "bozo"
      # The path to screen dump. Default: '%temp_dir%/k9s-screens-%username%' (k9s info)
      screenDumpDir: /tmp/dumps
      # Represents ui poll intervals in seconds. Default 2.0 secs. Minimum value is 2.0 - values below will be capped to the minimum.
      refreshRate: 2
      # Overrides the default k8s api server requests timeout. Defaults 120s
      apiServerTimeout: 15s
      # Number of retries once the connection to the api-server is lost. Default 15.
      maxConnRetry: 5
      # Indicates whether modification commands like delete/kill/edit are disabled. Default is false
      readOnly: false
      # This setting allows users to specify the default view, but it is not set by default.
      defaultView: ""
      # Toggles whether k9s should exit when CTRL-C is pressed. When set to true, you will need to exit k9s via the :quit command. Default is false.
      noExitOnCtrlC: false
      #UI settings
      ui:
        # Enable mouse support. Default false
        enableMouse: false
        # Set to true to hide K9s header. Default false
        headless: false
        # Set to true to hide the K9S logo Default false
        logoless: false
        # Set to true to hide K9s crumbs. Default false
        crumbsless: false
        # Set to true to suppress the K9s splash screen on start. Default false. Note that for larger clusters or higher latency connections, there may be no resources visible initially until local caches have finished populating.
        splashless: false
        # Toggles icons display as not all terminal support these chars. Default: true
        noIcons: false
        # Toggles reactive UI. This option provide for watching on disk artifacts changes and update the UI live Defaults to false.
        reactive: false
        # By default all contexts will use the dracula skin unless explicitly overridden in the context config file.
        skin: dracula # => assumes the file skins/dracula.yaml is present in the  $XDG_DATA_HOME/k9s/skins directory. Can be overridden with K9S_SKIN.
        # Replaces the K9s header logo with custom ascii art. Can be overridden per context.
        logo: |
          MY
          K9S
        # Convert dark skins to light, or vice versa, preserving hue. Default: false
        invert: false
        # Allows to set certain views default fullscreen mode. (yaml, helm history, describe, value_extender, details, logs) Default false
        defaultsToFullScreen: false
        # Show full resource GVR (Group/Version/Resource) vs just R. Default: false.
        useFullGVRTitle: false
      # Toggles icons display as not all terminal support these chars.
      noIcons: false
      # Toggles whether k9s should check for the latest revision from the GitHub repository releases. Default is false.
      skipLatestRevCheck: false
      # Logs configuration
      logger:
        # Defines the number of lines to return. Default 100
        tail: 200
        # Defines the total number of log lines to allow in the view. Default 1000
        buffer: 500
        # Represents how far to go back in the log timeline in seconds. Setting to -1 will tail logs. Default is -1.
        sinceSeconds: 300 # => tail the last 5 mins.
        # Toggles log line wrap. Default false
        textWrap: false
        # Autoscroll in logs will be disabled. Default is false.
        disableAutoscroll: false
        # Enable column locking when autoscroll is enabled. Default is false.
        columnLock: false
        # Toggles log line timestamp info. Default false
        showTime: false
        # Sets the internal log channel buffer size. Increase when log lines are dropped under high throughput. Default 50
        logBufferSize: 100
      # Provide shell pod customization when nodeShell feature gate is enabled!
      shellPod:
        # The shell pod image to use.
        image: killerAdmin
        # The namespace to launch to shell pod into.
        namespace: default
        # The resource limit to set on the shell pod.
        limits:
          cpu: 100m
          memory: 100Mi
        # Enable TTY
        tty: true
        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
    

Popeye 配置

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


节点 Shell

在指定集群上启用 nodeShell 功能门后,K9s 就可以让你进入集群节点的 shell。启用后,在节点视图中会新增一个 s(shell)菜单选项。K9s 会使用专用的 k9s_shell Pod,在选定节点上启动 Pod。此外,你还可以使用预装了常用 Shell 工具的自定义 Docker 镜像,进一步配置 Shell Pod。K9s 默认使用 BusyBox 镜像,但你可以按如下方式进行配置:

或者,你也可以设置环境变量 K9S_FEATURE_GATE_NODE_SHELL=true|false,覆盖 context 配置,并为所有集群启用或禁用节点 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
自定义 Shell Pod

你还可以在 Shell Pod 中添加 hostPathVolume 来进行自定义。这样可以将本地目录或文件挂载到 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 套接字挂载到 Shell Pod 的 /var/run/docker.sock,并将其设为只读。你也可以用类似方式挂载其他目录或文件。


命令别名

在 K9s 中,你可以定义自己的命令别名(简称),以访问资源。在 $HOME/.config/k9s 中创建一个名为 aliases.yaml 的文件。 K9s 别名定义 alias:gvr 键值对。gvr(Group/Version/Resource)表示完全限定的 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 中添加上下文级配置文件,从而定义特定上下文的快捷键。

如需全局启用快捷键,请按以下步骤操作:

  1. 创建文件 $XDG_CONFIG_HOME/k9s/hotkeys.yaml

  2. 在 hotkeys.yaml 中添加以下内容。你可以使用资源名称或简称来指定命令,即与在命令模式下输入的内容相同。

    #  $XDG_CONFIG_HOME/k9s/hotkeys.yaml
    hotKeys:
      # 按 Shift-0 可切换到 Pod 视图
      shift-0:
        shortCut:    Shift-0
        description: 查看 Pod
        command:     pods
      # 按 Shift-1 可切换到部署视图
      shift-1:
        shortCut:    Shift-1
        description: 查看部署
        command:     dp
      # 按 Shift-2 可切换到 Xray 部署视图
      shift-2:
        shortCut:    Shift-2
        description: Xray 部署
        command:     xray deploy
      # 按 Shift-S 可查看当前所选内容所在命名空间中的资源
      shift-s:
        shortCut:    Shift-S
        override:    true # => 设为 true 时将覆盖相关默认快捷键操作(默认为 false)
        description: 命名空间资源
        command:     "$RESOURCE_NAME $NAMESPACE"
        keepHistory: true # 是否可以返回上一个视图
    

觉得不太顺手?你自定义的快捷键会列在帮助视图 ? 中。 此外,快捷键文件会自动重新加载,因此你可以在定义快捷键后立即使用。

你可以选择任何适合自己的键盘快捷键,但不能与 K9s 标准快捷键列表中的快捷键冲突。

快捷键也支持引用环境变量。可用环境变量请参阅 插件 部分的说明。

注意:此功能/配置在未来版本中可能会发生变化!


通过 WebSocket 进行端口转发

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
    ...

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

  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

自定义视图

SneakCast v0.17.0 on The Beach! - Yup! sound is sucking but what a setting!

你可以通过自定义视图更改特定资源显示哪些列。要启用此功能,需要创建一个新的配置文件,即 $XDG_CONFIG_HOME/k9s/views.yaml。该文件使用 GVR(Group/Version/Resource)配置关联的表格视图列。如果找不到视图对应的 GVR,则会使用默认渲染方式(即当前的方式)。启用宽视图后,自定义列之后还会添加该资源的所有其他可用列。此外,你可以编辑视图配置文件,实时调整资源视图!

对于核心 API 组中的资源,请使用 version/resource;对于命名 API 组中的资源,请使用 group/version/resource。例如,Pod 使用 v1/pods,而变更 Webhook 配置使用 admissionregistration.k8s.io/v1/mutatingwebhookconfigurations。

📢 🎉 从 release v0.40.0 开始,你可以指定 JSON 解析表达式,进一步自定义资源的渲染方式。

新的列语法如下:

COLUMN_NAME<:json_parse_expression><|column_attributes>

其中,:json_parse_expression 表示从资源清单中提取特定片段的表达式。 这与 kubectl -o custom-columns 命令类似。此表达式为可选项。

IMPORTANT! 列必须是有效的 YAML 字符串。因此,如果列定义中包含非字母字符, 必须使用单引号或双引号,或者用 \ 转义。

NOTE! 请务必查看 k9s 日志,因为自定义视图规范中的任何问题都只会显示在日志中。

此外,你可以指定列属性,进一步调整列的渲染方式。 要使用此功能,需要添加一个 | 指示符,后面跟上渲染选项。 你可以使用以下一个或多个属性:

  • T -> 时间列指示符
  • N -> 数字列指示符
  • W -> 启用宽列,即仅在宽视图模式下显示。如果存在标准资源定义,则默认使用该定义。
  • S -> 确保列可见且不是宽列。如果存在标准资源定义中的 wide 设置,则覆盖该设置。
  • H -> 隐藏列
  • L -> 左对齐(默认)
  • R -> 右对齐

以下是一个自定义视图配置示例,用于自定义 Pod 和服务视图。

# $XDG_CONFIG_HOME/k9s/views.yaml
views:
  v1/pods:
    columns:
      - AGE
      - NAMESPACE|WR                                     # => 🌚 Specifies the NAMESPACE column to be right aligned and only visible while in wide mode
      - ZORG:.metadata.labels.fred\.io\.kubernetes\.blee # => 🌚 extract fred.io.kubernetes.blee label into it's own column
      - BLEE:.metadata.annotations.blee|R                # => 🌚 extract annotation blee into it's own column and right align it
      - NAME
      - IP
      - NODE
      - STATUS
      - READY
      - MEM/RL|S                                         # => 🌚 Overrides std resource default wide attribute via `S` for `Show`
      - '%MEM/R|'                                        # => NOTE! column names with non alpha names need to be quoted as columns must be strings!

  v1/pods@fred:                                          # => 🌚 New v0.40.6! Customize columns for a given resource and namespace!
    columns:
      - AGE
      - NAME|WR

  v1/pods@kube*:                                         # => 🌚 New v0.40.6! You can also specify a namespace using a regular expression.
    columns:
      - NAME
      - AGE
      - LABELS

  cool-kid:                                              # => 🌚 New v0.40.8! You can also reference a specific alias and display a custom view for it
    columns:
      - AGE
      - NAMESPACE|WR

  v1/services:
    columns:
      - AGE
      - NAMESPACE
      - NAME
      - TYPE
      - CLUSTER-IP

  admissionregistration.k8s.io/v1/mutatingwebhookconfigurations:
    columns:
      - NAME
      - WEBHOOKS|N
      - AGE
      - POLICY:.webhooks[*].failurePolicy
      - TIMEOUT:.webhooks[*].timeoutSeconds|N

🩻 NOTE: 这是一个实验性功能,在我们完善它的过程中很可能会发生变化!


资源跳转

K9s 允许你为自定义资源定义(CRD)及其相关资源定义自定义跳转快捷方式。此功能可让你快速从一个 CRD 跳转到其依赖或关联的资源,类似于内置的“跳转到所有者”行为。

默认情况下,K9s 为标准 Kubernetes 资源提供内置跳转(例如,Deployment → Pod,Node → Pod)。通过自定义跳转,你可以将此行为扩展到自己的 CRD,而无需修改 k9s 源代码。

要使用此功能,请在 $XDG_CONFIG_HOME/k9s/jumps.yaml 创建配置文件。

配置格式
# $XDG_CONFIG_HOME/k9s/jumps.yaml
jumps:
  # Define jump from source GVR to target GVR
  "myoperator.io/v1/patchplans":
    targetGVR: "myoperator.io/v1/patchjobs"
    fieldSelector: "spec.patchPlanRef={{.metadata.name}}"
配置字段
  • 源 GVR(映射键):源 CRD 的 Group/Version/Resource,格式为 group/version/resource;对于核心资源,格式为 version/resource
  • targetGVR:要跳转到的目标资源
  • labelSelector(可选):用于筛选目标资源的 Kubernetes 标签选择器。支持 Go 模板语法
  • fieldSelector(可选):用于筛选目标资源的 Kubernetes 字段选择器。支持 Go 模板语法
  • targetNamespace(可选):控制命名空间行为:
    • 为空(默认):使用源资源的命名空间(如果源资源是集群范围资源,则使用集群范围)
    • all:查看所有命名空间中的资源
    • <namespace-name>:跳转到指定命名空间
    • {{.spec.field}}:使用模板表达式从源资源中提取命名空间
模板语法

labelSelector 和 fieldSelector 都支持 Go 模板语法,可动态引用所选(源)资源中的字段。源对象的任何字段都可用于选择器的值一侧:

  • {{.metadata.name}} - 资源名称
  • {{.metadata.namespace}} - 资源命名空间
  • {{.metadata.labels.key}} - 特定标签值
  • {{.spec.fieldName}} - 源资源 spec 中的任意字段
  • {{.status.field}} - 源资源 status 中的任意字段

注意: 上述模板仅控制选择器的值(右侧,即根据源资源计算得出的值)。对于标签选择器,键可以是任意标签,并在服务端进行匹配。对于字段选择器,k9s 会将选择器作为目标资源上的本地(客户端)筛选条件应用,因此键可以是目标对象中存在的任意字段路径(例如 metadata.name、spec.volumeName),而不只是 API 可选择的字段。这意味着即使资源的字段无法在服务端进行选择,字段选择器跳转仍然有效。字段值会作为字符串进行比较,路径则会与目标对象的清单匹配。有关 API 服务器本身将哪些字段视为可选择字段的背景信息,请参阅 Kubernetes 文档中的 CRD 可选择字段。

示例
在自定义 Operator 资源之间跳转
jumps:
  "myoperator.io/v1/patchplans":
    targetGVR: "myoperator.io/v1/patchjobs"
    fieldSelector: "spec.patchPlanRef={{.metadata.name}}"
从 ArgoCD Application 跳转到 Deployments
jumps:
  "argoproj.io/v1alpha1/applications":
    targetGVR: "apps/v1/deployments"
    labelSelector: "app.kubernetes.io/instance={{.metadata.name}}"
从 Karpenter NodePool 跳转到 Nodes
jumps:
  "karpenter.sh/v1/nodepools":
    targetGVR: "v1/nodes"
    labelSelector: "karpenter.sh/nodepool={{.metadata.name}}"
    targetNamespace: "all"  # Nodes are cluster-scoped
工作原理
  1. 查看定义了自定义跳转规则的资源时

  2. 在选中项上按 Enter 将会:

    • 使用所选资源的数据应用模板表达式
    • 跳转到应用了筛选条件的目标资源视图
    • 自动应用标签/字段选择器,仅显示相关资源
    • 根据配置调整命名空间上下文
  3. 如果未定义自定义跳转,则应用默认行为(描述视图或内置跳转)


插件

K9s 允许你通过定义自己的集群命令来扩展命令行和工具。我们至少会检查 $XDG_CONFIG_HOME/k9s/plugins.yaml,以查找所有可用插件。 此外,K9s 还会扫描以下目录,以查找其他插件:

  • $XDG_CONFIG_HOME/k9s/plugins
  • $XDG_DATA_HOME/k9s/plugins
  • $XDG_DATA_DIRS/k9s/plugins

插件文件的内容可以是单个插件片段、多个片段的集合,也可以是完整的插件定义(参见下方示例……)。

插件定义如下:

  • Shortcut 选项表示用户用于激活插件的按键组合。有效值为 [a-z]、Shift-[A-Z]、Ctrl-[A-Z]。
  • Override 选项用于让插件覆盖与快捷键关联的默认操作
  • Confirm 选项(启用时)会显示即将执行的命令,并允许你确认或阻止执行
  • Description 会显示在 k9s 菜单中快捷键旁边
  • Scopes 定义与插件关联视图的资源名称/简称集合。你可以指定 all,让此快捷键适用于所有视图。
  • Command 表示插件激活时运行的临时命令
  • Background 指定命令是否在后台运行
  • Args 指定要应用于上述命令的各种参数
  • OverwriteOutput 布尔选项允许插件开发者自定义插件执行时的 stdout 消息。参见 #2644 中的示例
  • Dangerous 布尔选项用于在启用只读模式时禁用插件。参见 #2604
  • Inputs 定义一个输入字段列表,供插件执行前提示用户填写(见下文)
插件输入项

插件可以定义输入字段,在执行前提示用户输入值。当你需要副本数量、环境变量或配置文件选择等动态值时,这一功能很有用。每个插件最多允许定义 5 个输入项。

每个输入项具有以下属性:

  • name(必填)——用于在 args 中通过 $INPUT_<NAME>(大写)引用该值的输入标识符
  • label ——输入对话框中显示给用户的标签
  • type(必填)——输入类型:string、number、bool 或 dropdown
  • required ——为 true 时,用户必须提供值才能执行插件
  • default ——输入字段中预填的默认值(对于 dropdown,必须是有效选项;对于 bool,必须是 "true" 或 "false";对于 number,必须是有效数字)
  • options ——仅适用于 dropdown 类型,用于定义可选项列表

输入值可在插件 args 中通过 $INPUT_<NAME> 格式使用,其中 <NAME> 是输入名称的大写形式。

输入类型:

类型说明UI 元素
string自由文本输入文本字段
number数字输入(整数和浮点数)带数字验证的文本字段
bool布尔切换复选框
dropdown从预定义选项中选择下拉菜单

示例:

plugins:
  demo-inputs:
    shortCut: Ctrl-Y
    description: Demo all input types
    scopes:
      - po
    command: bash
    background: false
    args:
      - -c
      - >-
        echo "=== Plugin input demo ===" &&
        echo "" &&
        echo "Pod: $NAME" &&
        echo "Namespace: $NAMESPACE" &&
        echo "Context: $CONTEXT" &&
        echo "" &&
        echo "=== Your inputs ===" &&
        if [ -n "$INPUT_MESSAGE" ]; then echo "Message: $INPUT_MESSAGE (set)"; else echo "Message: (not set)"; fi &&
        if [ -n "$INPUT_COUNT" ]; then echo "Count: $INPUT_COUNT (set)"; else echo "Count: (not set)"; fi &&
        if [ -n "$INPUT_ENABLED" ]; then echo "Enabled: $INPUT_ENABLED (set)"; else echo "Enabled: (not set)"; fi &&
        if [ -n "$INPUT_ENVIRONMENT" ]; then echo "Environment: $INPUT_ENVIRONMENT (set)"; else echo "Environment: (not set)"; fi &&
        echo "" &&
        read -p "Press Enter to return to k9s..."
    inputs:
      - name: message
        label: Enter a message
        type: string
        required: true
        default: hello world
      - name: count
        label: Enter a number
        type: number
        required: true
        default: 3
      - name: enabled
        label: Enable feature
        type: bool
        required: false
        default: true
      - name: environment
        label: Select environment
        type: dropdown
        required: true
        default: staging
        options:
          - development
          - staging
          - production

如需了解插件输入项的实际示例,请参阅 pvc-resize.yaml。该插件会在调整大小前提示用户输入新的 PVC 大小。

K9s 还提供其他环境变量,可用于自定义插件参数。目前可用的环境变量如下:

  • $RESOURCE_GROUP ——选定的资源组
  • $RESOURCE_VERSION ——选定资源的 api 版本
  • $RESOURCE_NAME ——选定的资源名称
  • $NAMESPACE ——选定资源的命名空间
  • $NAME ——选定的资源名称
  • $CONTAINER ——当前容器(如适用)
  • $FILTER ——当前筛选条件(如有)
  • $KUBECONFIG ——KubeConfig 文件位置。
  • $CLUSTER 当前集群名称
  • $CONTEXT 当前上下文名称
  • $USER 当前用户
  • $GROUPS 当前用户组
  • $POD 在容器视图中时
  • $COL-<RESOURCE_COLUMN_NAME> 使用所查看资源的指定列名。必须以 COL- 为前缀!

可以使用花括号将环境变量嵌入另一个字符串中,也可用于列名包含特殊字符的情况。(例如 ${NAME}-example 或 ${COL-%CPU/L})

插件示例

定义多个插件,并将它们放在同一个文件中。这样可以将文件放在 K9s 根配置目录中,以便在任何集群上使用。此外,也可以通过添加 clusterA/contextB/plugins.yaml 文件,为所选集群定义特定于集群/上下文的插件。

以下示例定义了一个插件,用于查看选定 Pod 的日志,并使用 ctrl-l 作为快捷键。

# Define several plugins in a single file in the K9s root configuration
# $XDG_DATA_HOME/k9s/plugins.yaml
plugins:
  # Defines a plugin to provide a `ctrl-l` shortcut to tail the logs while in pod view.
  fred:
    shortCut: Ctrl-L
    override: false
    overwriteOutput: false
    confirm: false
    dangerous: false
    description: Pod logs
    scopes:
    - pods
    command: kubectl
    background: false
    args:
    - logs
    - -f
    - $NAME
    - -n
    - $NAMESPACE
    - --context
    - $CONTEXT

同样,也可以在目录中定义上述插件,既可以每个插件使用一个文件,也可以在每个文件中定义多个插件,如下所示……

以下示例定义了两个插件,分别名为 fred 和 zorg。

# Multiple plugins in a single file...
# Note: as of v0.40.9 you can have ad-hoc plugin dirs
# Loads plugins fred and zorg
# $XDG_DATA_HOME/k9s/plugins/misc-plugins/blee.yaml
fred:
  shortCut: Shift-B
  description: Bozo
  scopes:
  - deploy
  command: bozo

zorg:
  shortCut: Shift-Z
  description: Pod logs
  scopes:
  - svc
  command: zorg

最后,也可以在单独的文件中定义插件片段。片段将以文件名命名。本例中,我们使用插件片段定义一个 bozo 插件。

# $XDG_DATA_HOME/k9s/plugins/schtuff/bozo.yaml
shortCut: Shift-B
description: Bozo
scopes:
- deploy
command: bozo

NOTE:这是一项实验性功能!随着此功能逐步完善,选项和布局可能会在未来的 K9s 版本中发生变化。


对应用进行基准测试

K9s 集成了 Hey,该工具由才华横溢的 Jaana Dogan 开发。Hey 是一款命令行工具,可对 HTTP 端点进行基准测试,类似于 AB bench。这项初步功能目前支持对端口转发和服务进行基准测试(请注意,这项功能还很新!)。

要设置端口转发,请前往 PodView,选择一个 Pod 和一个暴露指定端口的容器。按 SHIFT-F 会弹出一个对话框,让你指定要转发到的本地端口。确认后,即可前往 PortForward 视图(别名为 pf),查看当前活动的端口转发。选择一个端口转发并按 CTRL-B,即可对该 HTTP 端点运行基准测试。若要查看基准测试运行结果,请前往 Benchmarks 视图(别名为 be)。现在,你可以选择一项基准测试并按 <ENTER> 查看运行统计详情。注意:端口转发仅在 K9s 会话期间有效,退出时会终止。

最初,基准测试将使用以下默认值:

  • 并发级别:1
  • 请求数量:200
  • HTTP 方法:GET
  • 路径:/

PortForward 视图由一个新的 K9s 配置文件提供支持,即 $XDG_DATA_HOME/k9s/clusters/clusterX/contextY/benchmarks.yaml。你连接的每个集群都有自己的基准测试配置文件,其中包含该集群的 K8s 上下文名称。对此文件所做的更改应会自动更新 PortForward 视图,以指示基准测试的运行方式。

基准测试结果报告存储在 $XDG_STATE_HOME/k9s/clusters/clusterX/contextY

以下是一个 benchmarks.yaml 配置示例。请注意,此文件很可能会在后续版本中发生变化!

# This file resides in  $XDG_DATA_HOME/k9s/clusters/clusterX/contextY/benchmarks.yaml
benchmarks:
  # Indicates the default concurrency and number of requests setting if a container or service rule does not match.
  defaults:
    # One concurrent connection
    concurrency: 1
    # Number of requests that will be sent to an endpoint
    requests: 500
  containers:
    # Containers section allows you to configure your http container's endpoints and benchmarking settings.
    # NOTE: the container ID syntax uses namespace/pod-name:container-name
    default/nginx:nginx:
      # Benchmark a container named nginx using POST HTTP verb using http://localhost:port/bozo URL and headers.
      concurrency: 1
      requests: 10000
      http:
        path: /bozo
        method: POST
        body:
          {"fred":"blee"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
  services:
    # Similarly you can Benchmark an HTTP service exposed either via NodePort, LoadBalancer types.
    # Service ID is ns/svc-name
    default/nginx:
      # Set the concurrency level
      concurrency: 5
      # Number of requests to be sent
      requests: 500
      http:
        method: GET
        # This setting will depend on whether service is NodePort or LoadBalancer. NodePort may require vendor port tunneling setting.
        # Set this to a node if NodePort or LB if applicable. IP or dns name.
        host: A.B.C.D
        path: /bumblebeetuna
      auth:
        user: jean-baptiste-emmanuel
        password: Zorg!

K9s RBAC 技巧

在启用了 RBAC 的集群上,你需要为用户或组授予相应权限,才能使用 K9s 探索其 Kubernetes 集群。K9s 至少需要在集群和命名空间级别具有读取权限,才能显示资源和指标。

以下规则仅供参考。你需要根据环境策略进行定制。如果需要编辑或删除资源,还需要额外的权限。

注意!随着 K9s 的发展,集群和命名空间的访问方式可能会发生变化。 注意!我们希望 K9s 即使在资源匮乏的集群或命名空间中也能持续运行。如果实际情况并非如此,请提交问题!

集群 RBAC 范围
---
# K9s Reader ClusterRole
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: k9s
rules:
  # Grants RO access to cluster resources node and namespace
  - apiGroups: [""]
    resources: ["nodes", "namespaces"]
    verbs: ["get", "list", "watch"]
  # Grants RO access to RBAC resources
  - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["clusterroles", "roles", "clusterrolebindings", "rolebindings"]
    verbs: ["get", "list", "watch"]
  # Grants RO access to CRD resources
  - apiGroups: ["apiextensions.k8s.io"]
    resources: ["customresourcedefinitions"]
    verbs: ["get", "list", "watch"]
  # Grants RO access to metric server (if present)
  - apiGroups: ["metrics.k8s.io"]
    resources: ["nodes", "pods"]
    verbs: ["get", "list", "watch"]

---
# Sample K9s user ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: k9s
subjects:
  - kind: User
    name: fernand
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: k9s
  apiGroup: rbac.authorization.k8s.io
命名空间 RBAC 范围

如果你的用户仅限访问特定命名空间,K9s 需要以下角色才能读取命名空间级资源。

---
# K9s Reader Role (default namespace)
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: k9s
  namespace: default
rules:
  # Grants RO access to most namespaced resources
  - apiGroups: ["", "apps", "autoscaling", "batch", "extensions"]
    resources: ["*"]
    verbs: ["get", "list", "watch"]
  # Grants RO access to metric server
  - apiGroups: ["metrics.k8s.io"]
    resources: ["pods", "nodes"]
    verbs:
      - get
      - list
      - watch

---
# Sample K9s user RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: k9s
  namespace: default
subjects:
  - kind: User
    name: fernand
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: k9s
  apiGroup: rbac.authorization.k8s.io

皮肤

示例:Dracula 皮肤 ;)

Dracula 皮肤

你可以根据自己的审美和风格自定义 K9s 的样式。皮肤是 YAML 文件,可供用户更改 K9s 的呈现层。示例请参阅此仓库的 skins 目录。 你可以通过指定 UI.skin 属性为 k9s 设置默认皮肤。也可以根据所连接的上下文更改 K9s 皮肤。 此时,你可以在集群配置中指定一个 skin 字段,也就是 skin: dracula(只需填写皮肤文件名,不带扩展名!),然后将此仓库中的 skins/dracula.yaml 复制到 $XDG_CONFIG_HOME/k9s/skins/ 目录。你也可以通过在环境中设置 K9S_SKIN 来更改皮肤,例如:export K9S_SKIN="dracula"。

如果集群跨越多个上下文,你可以在上下文配置中添加皮肤上下文配置。 这是由 {context_name, skin} 元组组成的集合(请参阅下方示例!)

颜色可以按名称定义,也可以使用十六进制表示法。最近,我们新增了名为 default 的颜色,用于表示透明背景色;如有需要,这样可以保留终端的背景色设置。

注意:目前这仍是一项实验性功能;如果这项功能发展顺利,我们会添加或修改更多内容,请谨慎使用! 注意:可用颜色列表请参阅 K9s 皮肤。

自定义标题徽标占用固定区域:26 个终端列和 6 行图案,下方另有一行状态栏。超出的列和行会从右侧和底部裁切;制表符会展开为 4 个空格,方括号中的文本会按原样显示。 上下文徽标会覆盖 k9s.ui.logo;上下文徽标为空或仅含空白字符时,会回退到全局徽标;全局徽标为空时,则使用 K9s 的默认图案。 默认徽标和自定义徽标使用相同布局;徽标配置不会调整资源视图、提示词或页脚的大小。

要为特定上下文设置皮肤,请确保你的 skins 目录中存在 in-the-navy.yaml 文件。

#  $XDG_DATA_HOME/k9s/clusters/clusterX/contextY/config.yaml
k9s:
  cluster: clusterX
  skin: in-the-navy
  logo: |
    PROD
    CLUSTER
  readOnly: false
  namespace:
    active: default
    lockFavorites: false
    favorites:
    - kube-system
    - default
  view:
    active: po
  featureGates:
    nodeShell: false

你也可以在根目录的 k9s 配置文件中为所有上下文指定默认皮肤,如下所示:

#  $XDG_CONFIG_HOME/k9s/config.yaml
k9s:
  liveViewAutoRefresh: false
  screenDumpDir: /tmp/dumps
  refreshRate: 2
  maxConnRetry: 5
  readOnly: false
  noExitOnCtrlC: false
  ui:
    enableMouse: false
    headless: false
    logoless: false
    crumbsless: false
    splashless: false
    noIcons: false
    invert: false
    # Toggles reactive UI. This option provide for watching on disk artifacts changes and update the UI live  Defaults to false.
    reactive: false
    # By default all contexts will use the dracula skin unless explicitly overridden in the context config file.
    skin: dracula # => assumes the file skins/dracula.yaml is present in the  $XDG_DATA_HOME/k9s/skins directory
    # Replaces the K9s header logo with custom ascii art. Can be overridden per context.
    logo: |
      MY
      K9S
    defaultsToFullScreen: false
  skipLatestRevCheck: false
  disablePodCounting: false
  shellPod:
    image: busybox
    namespace: default
    limits:
      cpu: 100m
      memory: 100Mi
  imageScans:
    enable: false
    exclusions:
      namespaces: []
      labels: {}
  logger:
    tail: 100
    buffer: 5000
    sinceSeconds: -1
    textWrap: false
    disableAutoscroll: false
    columnLock: false
    showTime: false
    logBufferSize: 50
  thresholds:
    cpu:
      critical: 90
      warn: 70
    memory:
      critical: 90
      warn: 70
# $XDG_DATA_HOME/k9s/skins/in-the-navy.yaml
# Skin InTheNavy!
k9s:
  # General K9s styles
  body:
    fgColor: dodgerblue
    bgColor: '#ffffff'
    logoColor: '#0000ff'
  # ClusterInfoView styles.
  info:
    fgColor: lightskyblue
    sectionColor: steelblue
  # Help panel styles
  help:
    fgColor: white
    bgColor: black
    keyColor: cyan
    numKeyColor: blue
    sectionColor: gray
  frame:
    # Borders styles.
    border:
      fgColor: dodgerblue
      focusColor: aliceblue
    # MenuView attributes and styles.
    menu:
      fgColor: darkblue
      # Style of menu text. Supported options are "dim" (default), "normal", and "bold"
      fgStyle: dim
      keyColor: cornflowerblue
      # Used for favorite namespaces
      numKeyColor: cadetblue
    # CrumbView attributes for history navigation.
    crumbs:
      fgColor: white
      bgColor: steelblue
      activeColor: skyblue
    # Resource status and update styles
    status:
      newColor: '#00ff00'
      modifyColor: powderblue
      addColor: lightskyblue
      errorColor: indianred
      highlightcolor: royalblue
      killColor: slategray
      completedColor: gray
    # Border title styles.
    title:
      fgColor: aqua
      bgColor: white
      highlightColor: skyblue
      counterColor: slateblue
      filterColor: slategray
  views:
    # TableView attributes.
    table:
      fgColor: blue
      bgColor: darkblue
      cursorColor: aqua
      # Header row styles.
      header:
        fgColor: white
        bgColor: darkblue
        sorterColor: orange
        selectedSortColumnColor: lightskyblue
    # YAML info styles.
    yaml:
      keyColor: steelblue
      colonColor: blue
      valueColor: royalblue
    # Logs styles.
    logs:
      fgColor: lightskyblue
      bgColor: black
      indicator:
        fgColor: dodgerblue
        bgColor: black
        toggleOnColor: limegreen
        toggleOffColor: gray

贡献者

没有这些优秀人士的贡献,这个项目就会一事无成!

README 配图

已知问题

项目仍在开发中!如果遇到问题,或者有想要的功能,请提交 issue;如果愿意,也欢迎提交 PR!

以下情况很可能会导致 K9s 崩溃……

  1. 你运行的是较旧版本的 Kubernetes。K9s 在较新的 Kubernetes 版本上运行效果最佳。
  2. 你的 RBAC 权限不足,无法管理集群。

致谢!

K9s 基于许多开源项目和库构建。我们由衷感谢所有 OSS 贡献者,他们夜以继日地工作,让这个项目成为现实!


核心团队成员!

如果你熟悉 GO 和 K8s,愿意抽出时间帮助维护和改进这个项目,请与我联系。

我们一直乐于听取从我们的工作中受益的朋友们的反馈!

贡献指南

  • 提交 PR 前请先创建 issue!
  • 确保所有导出项都附有适当注释
  • 如适用,请为你的 PR 提交一套测试

Imhotep  © 2026 Imhotep Software LLC。所有材料均基于 Apache v2.0 许可

评论

支持 Markdown