K9s について
K9s は Kubernetes クラスタを観察・管理するためのインタラクティブなコマンドラインインターフェースを提供します。直感的なビューで Pod、ノード、サービスなどのリソースの状態を素早く確認できます。ターミナルからスケーリング、削除、ログ閲覧などの一般的な操作を実行できます。
主な機能
- 01Pod、ノード、サービス、デプロイメントなど Kubernetes リソースを閲覧
- 02リアルタイムでリソースのステータス、ログ、イベントを表示
- 03ターミナルからスケーリング、削除、再起動などを実行
- 04複数のクラスタコンテキスト間をシームレスに切り替え
活用シーン
- 01クラスタ内の故障アプリケーションやサービスをデバッグ
- 02本番環境のリソース使用状況と健全性を監視
- 03Kubernetes デプロイメントを効率的に管理・保守
インストール
OS またはパッケージマネージャーを選び、コマンドをターミナルで実行します。
インストール後にk9s --versionを実行して確認します。
コマンド例
よく使うコマンドを使う順に並べています。
詳細
K9s - クラスターをスタイリッシュに管理する Kubernetes CLI!
K9s は、Kubernetes クラスターを操作するためのターミナル UI を提供します。 このプロジェクトの目的は、実環境でアプリケーションを簡単に移動、監視、管理できるようにすることです。K9s は Kubernetes の変更を継続的に監視し、監視対象のリソースを操作するためのコマンドを提供します。
注意事項...
K9s は、資金力のある大企業が手がけているわけではありません。 これは、メンテナンスとサポートに多くの時間を必要とする複雑な OSS プロジェクトです。 K9s はこれからも OSS であり続け、無料で提供されます!とはいえ、k9s によって日々の Kubernetes での作業が少し快適になり、時間を節約して生産性が向上したと感じたら、ぜひスポンサーになってください! 皆さまからの寄付は、サーバーの稼働と冷蔵庫のビールを維持するために大いに役立ちます!
ありがとうございます!
スクリーンショット
- Pod

- ログ

- デプロイメント

デモ動画/録画
- K9s v0.40.0 -Column Blow- 先行公開
- K9s v0.31.0 Configs+先行公開
- K9s v0.30.0 先行公開
- 脆弱性スキャン
- K9s v0.29.0
- K9s v0.21.3
- K9s v0.19.X
- K9s v0.18.0
- K9s v0.17.0
- K9s パルス
- K9s v0.15.1
- K9s v0.13.0
- K9s v0.9.0
- K9s v0.7.0 の機能
- K9s v0 デモ
ドキュメント
インストール、使い方、カスタマイズ、ヒントについては、K9s ドキュメントサイトをご覧ください。
Slack チャンネル
仲間のK9sersと K9s の機能について話し合ったり、このツールへの応援を示したりしませんか?
- チャンネル:K9sersSlack
- 招待:K9slackers Invite
インストール
K9s は Linux、macOS、Windows の各プラットフォームで利用できます。 Linux、Windows、Mac 用のバイナリは、リリースページから tarball として入手できます。
-
macOS または Linux では、Homebrew 経由
brew install derailed/k9s/k9s -
MacPorts 経由
sudo port install k9s -
Linux では、snap 経由
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 -
Windows では、Winget 経由
winget install k9s -
Windows では、Scoop 経由
scoop install k9s -
Windows では、Chocolatey 経由
choco install k9s -
GO のインストール経由
# NOTE: The dev version will be in effect! go install github.com/derailed/k9s@latest -
Linux および macOS では、Webi 経由
curl -sS https://webinstall.dev/k9s | bash -
Linux および macOS では、pkgx 経由
pkgx k9s -
Linux および macOS では、gah 経由
gah install k9s -
Windows では、Webi 経由
curl.exe -A MS https://webinstall.dev/k9s | powershell -
Docker Desktop Extension として(Docker Desktop に組み込まれた Kubernetes Server 用)
docker extension install spurin/k9s-dd-extension:latest
ソースからのビルド
K9s は現在 GO v1.23.X 以降を使用しています。 ソースから K9s をビルドするには、次の手順が必要です。
-
リポジトリをクローンします
-
実行ファイルをビルドして実行します
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 は、1.28 以降などの新しい kubernetes バージョンを推奨します。
K8S 互換性マトリックス
| k9s | k8s client |
|---|---|
| >= 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 |
コマンドライン
# 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⏎ | 正規表現も使用できます。例:`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 | |
| YAML を表示する | y | |
| ログを表示する | l | リソースによって異なります |
| 前のログを表示する | p | リソースによって異なります |
| コンテナにシェル接続する | s | Pod のみ |
| コンテナにアタッチする | a | Pod のみ |
| リソースの詳細を表示する | d | |
| リソースを編集する | e | 読み取り専用モードでは使用できません |
| ポートフォワードを表示する | f | Pod/Service/Container |
| ポートフォワードを開始する | shift-f | Pod/Service/Container |
| 名前空間に移動する | w | 名前空間列が利用可能な場合 |
| オーナーに移動する | shift-j | リソースにオーナーがいる場合 |
| 名前空間を使用/切り替える | u | 名前空間ビュー |
| UsedBy(このリソースを使用しているリソースを表示) | u | ServiceAccount/PVC/Secret/ConfigMap |
| ベンチマークを実行/停止する | b | Service/ポートフォワード |
| テキストの折り返しを切り替える | w | ログビュー |
| タイムスタンプを切り替える | t | ログビュー |
| 全画面表示を切り替える | f | ログ/YAML/詳細ビュー |
| ビューを更新/再読み込みする | ctrl-r | |
| CronJob をトリガーする | t | CronJob ビュー |
| ノードを Cordon/Uncordon する | u | ノードビュー |
| ノードをドレインする | r | ノードビュー |
| リソースを再起動する | r | Deployment/DaemonSet/StatefulSet |
| リソースをロールバックする | ctrl-l | ReplicaSet |
| ReplicaSet を表示する | z | Deployment ビュー |
K9s の設定
K9s は設定を k9s ディレクトリ内の YAML ファイルとして保持し、その場所はオペレーティングシステムによって異なります。K9s は各種設定ファイルの読み込みに XDG を利用します。お使いの OS におけるデフォルトの保存場所については、こちらのリンクを参照してください。まだわからない場合は、k9s info を実行すると、K9s が設定ファイルを読み込んでいる場所が表示されます。または、K9S_CONFIG_DIR を設定して、K9s が設定ファイルを読み込むディレクトリを指定できます。
| Unix | macOS | Windows |
|---|---|---|
~/.config/k9s | ~/Library/Application Support/k9s | %LOCALAPPDATA%\k9s |
注:これはまだ変更される可能性があり、プレリリース段階で変更される予定です!
環境変数を設定すると、コンテキストのポートフォワードのデフォルトアドレス設定を上書きし、すべてのクラスターのポートフォワードのローカルアドレスを変更できます。K9S_DEFAULT_PF_ADDRESS=a.b.c.d
クリップボードの動作は環境変数でも制御できます。
-
K9S_CLIPBOARD=auto|native|osc52(デフォルトはauto)auto:まずネイティブのクリップボードユーティリティを試し、利用可能な場合は OSC52 にフォールバックします。native:ネイティブのクリップボードユーティリティ(xclip/xsel/wl-clipboard など)のみを使用します。osc52:OSC52 によるクリップボードへの書き込みを強制します。
-
K9S_OSC52_MAX=<encoded-bytes>は、コピー操作を k9s が拒否するまでに許可される OSC52 ペイロードの最大サイズを設定します。デフォルトは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 は、Kubernetes クラスターのサニタイザーである Popeye と連携します。Popeye 自体は spinach.yml という設定ファイルを使用しますが、K9s と連携する場合は、クラスター固有のファイルを $XDG_CONFIG_HOME/share/k9s/clusters/clusterX/contextY/spinach.yml という名前で配置する必要があります。これにより、クラスターごとに異なる spinach 設定を使用できます。
ノードシェル
特定のクラスターで nodeShell 機能ゲートを有効にすると、K9s からクラスターのノードにシェルで接続できます。有効にすると、ノードビューに shell メニューオプションとして新しい s が表示されます。K9s は、専用の k9s_shell ポッドを使用して、選択したノード上にポッドを起動します。さらに、好みのシェルツールをあらかじめインストールしたカスタム Docker イメージを使って、シェルポッドをカスタマイズできます。デフォルトでは K9s は BusyBox イメージを使用しますが、次のように設定できます。
また、環境変数を設定すると、コンテキストの設定を上書きし、すべてのクラスターのノードシェル機能ゲートを変更できます。K9S_FEATURE_GATE_NODE_SHELL=true|false
# $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
シェルポッドのカスタマイズ
hostPathVolume をシェルポッドに追加して、シェルポッドをカスタマイズすることもできます。これにより、ローカルのディレクトリやファイルをシェルポッドにマウントできます。たとえば、Docker ソケットをシェルポッドにマウントする場合は、次のようにします。
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 に読み取り専用でシェルポッドへマウントされます。同じ方法で、ほかのディレクトリやファイルもマウントできます。
コマンドエイリアス
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 にコンテキストレベルの設定ファイルを追加することで、コンテキスト固有のホットキーを定義できます。
ホットキーを全体に適用するには、次の手順に従ってください。
-
$XDG_CONFIG_HOME/k9s/hotkeys.yamlという名前のファイルを作成します -
hotkeys.yamlに以下を追加します。リソース名/短縮名を指定してコマンドを設定できます。これは、コマンドモードで入力する場合と同じです。# $XDG_CONFIG_HOME/k9s/hotkeys.yaml hotKeys: # Shift-0を押すとポッドビューに移動します shift-0: shortCut: Shift-0 description: ポッドを表示 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 の標準ショートカット一覧に含まれていなければ、使いやすい任意のキーボードショートカットを選択できます。
同様に、ホットキーで環境変数を参照することもできます。利用可能な環境変数については、プラグインのセクションを参照してください。
NOTE: この機能/設定は、今後のリリースで変更される可能性があります!
WebSocket 経由のポートフォワーディング
K9s は、WebSocket 経由のポートフォワーディングを有効/無効にするために、kubectl の機能フラグ環境変数に従います(>1.30ではデフォルトで有効)。
WebSocket のサポートを無効にするには、KUBECTL_PORT_FORWARD_WEBSOCKETS=false を設定します。
FastForwards
v0.25.0以降、FastForwards 機能を利用して、ポートフォワーディングのデフォルトを K9s に指定できます。複数のコンテナを扱う場合や、コンテナが複数のポートを公開している場合、ポートフォワーディングのダイアログから目的のポートフォワーディングを指定するのは煩雑なことがあります。多くの場合、必要なコンテナとポートの組み合わせはすでに分かっているからです。こうした用途向けに、以下のアノテーションをマニフェストに付与できるようになりました。
@ k9scli.io/auto-port-forwards
ポートフォワーディングのダイアログを完全に回避し、1つ以上のポートフォワーディングを直接有効にします。
@ k9scli.io/port-forwards
ポートフォワーディングのダイアログを開いた際に、1つ以上のポートフォワーディングをあらかじめ選択します。
アノテーションの値は container-name::[local-port:]container-port の形式です。
NOTE: 上記のどちらの場合も、アノテーションではコンテナのポートを名前または番号で指定できます!
例
# 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
...
アノテーション値では、転送先のコンテナに加えて、ローカルポートとコンテナポートを指定する必要があります。コンテナポートは、ポート番号またはポート名で指定できます。ローカルポートを省略した場合、ローカルポートはコンテナポート番号と同じになります。例をいくつか示します。
- bozo::http - ポート名
httpを使用して、コンテナbozoに pf を作成します。http がポート番号 8080 を指定している場合、ローカルポートも 8080 になります。 - bozo::9090:http - コンテナ
bozoに pf を作成し、ローカルポート 9090 を http(8080) にマッピングします。 - 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 を使用します。たとえば、
pods には v1/pods を、mutating webhook configurations には
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 のログを確認してください。
さらに、列の表示方法を細かく調整するために、列属性を指定できます。
これを使うには、| の後に表示設定を追加します。
以下の属性を 1 つ以上指定できます。
T-> 時刻列を示しますN-> 数値列を示しますW-> ワイド列を有効にします。ワイドモードのときだけ表示されます。標準リソース定義がある場合は、その設定がデフォルトになります。S-> 列を表示し、ワイド列にしないようにします。標準リソース定義にwideの設定がある場合は、それを上書きします。H-> 列を非表示にしますL-> 左揃え(デフォルト)R-> 右揃え
pods と services のビューをカスタマイズするビュー設定の例を示します。
# $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 → Pods、Node → Pods)へのジャンプを組み込みで提供します。カスタムジャンプを使えば、k9s のソースコードを変更せずに、独自の CRD にもこの機能を拡張できます。
この機能を使うには、$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}}"
設定フィールド
- Source 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 は対象リソースに対してセレクターをローカル(クライアント側)のフィルターとして適用するため、キーには API で選択可能なフィールドだけでなく、対象オブジェクトに存在する任意のフィールドパス(例:
metadata.name、spec.volumeName)を指定できます。つまり、フィールドがサーバー側で選択できないリソースでも、フィールドセレクターによるジャンプが機能します。フィールド値は文字列として比較され、パスは対象オブジェクトのマニフェストと照合されます。API サーバー自体が選択可能なフィールドとして扱うものについては、Kubernetes ドキュメントのCRD の選択可能なフィールドを参照してください。
例
カスタムオペレーターのリソース間を移動する
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
動作の仕組み
-
カスタムジャンプルールが定義されたリソースを表示します。
-
選択した項目で
Enterを押すと、次の処理が行われます。- 選択したリソースのデータを使ってテンプレート式を適用します。
- フィルターが適用された状態で、対象リソースのビューにジャンプします。
- ラベルセレクター/フィールドセレクターを自動的に適用し、関連するリソースだけを表示します。
- 設定に従って名前空間のコンテキストを調整します。
-
カスタムジャンプが定義されていない場合は、デフォルトの動作(詳細ビューまたは組み込みのジャンプ)が適用されます。
プラグイン
K9s では、独自のクラスターコマンドをプラグインとして定義することで、コマンドラインやツールを拡張できます。
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 ブールオプションを使用すると、プラグイン開発者はプラグインの標準出力にカスタムメッセージを設定できます。#2644 の例を参照してください。
- Dangerous ブールオプションを使用すると、読み取り専用モードが設定されているときにプラグインを無効にできます。#2604 を参照してください。
- Inputs は、プラグインの実行前にユーザーに入力を求めるフィールドのリストを定義します(以下を参照)。
プラグイン入力
プラグインでは、実行前にユーザーに値の入力を求める入力フィールドを定義できます。レプリカ数、環境変数、プロファイルの選択など、動的な値が必要な場合に便利です。プラグインごとに最大 5 個の入力を定義できます。
各入力には、次のプロパティがあります。
name(必須)— 引数内で値を$INPUT_<NAME>(大文字)として参照するための入力識別子label— 入力ダイアログに表示されるラベルtype(必須)— 入力タイプ:string、number、bool、またはdropdownrequired— true の場合、プラグインを実行する前にユーザーが値を入力する必要がありますdefault— 入力フィールドにあらかじめ入力されるデフォルト値(dropdownの場合は有効な選択肢、boolの場合は"true"/"false"、numberの場合は有効な数値である必要があります)options—dropdownタイプの場合のみ、選択可能な項目の一覧を定義します
入力値は、$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})。
プラグインの例
複数のプラグインを定義し、1 つのファイルにまとめて保存できます。このファイルを 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
同様に、上記のプラグインは、プラグインごとに 1 つのファイルを使う方法、または次のように複数のプラグインを 1 つのファイルにまとめる方法で、ディレクトリ内に定義できます。
次の例では、fred と zorg という 2 つのプラグインを定義しています。
# 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
注:これは実験的な機能です。この機能が成熟するにつれて、今後の K9s リリースでオプションやレイアウトが変更される可能性があります。
アプリケーションのベンチマーク
K9s は、優れた才能を持つ Jaana Dogan による Hey を統合しています。Hey は、AB bench と同様に HTTP エンドポイントのベンチマークを行う CLI ツールです。この暫定機能では、現在ポートフォワードとサービスのベンチマークに対応しています(この機能はまだ非常に新しいことにご留意ください!)。
ポートフォワードを設定するには、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 は縮退したクラスターや名前空間でも実行を継続できることを想定しています。そうならない場合は、Issue を報告してください!
クラスター 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 スキン ;)
独自の好みやスタイルに合わせて K9s をカスタマイズできます。スキンは、K9s の表示レイヤーを変更できる YAML ファイルです。例については、このリポジトリの skins ディレクトリをご覧ください。
UI.skin 属性を指定すると、K9s のデフォルトのスキンを設定できます。また、接続先のコンテキストに応じて K9s のスキンを変更することもできます。
その場合は、クラスター設定にスキンフィールド(skin: dracula。拡張子を除いたスキンファイル名のみ)を指定し、このリポジトリの
skins/dracula.yaml を $XDG_CONFIG_HOME/k9s/skins/ ディレクトリにコピーします。環境変数 K9S_SKIN を設定してスキンを変更することもできます。例:export K9S_SKIN="dracula"。
クラスターが複数のコンテキストにまたがる場合は、コンテキスト設定にスキンのコンテキスト設定を追加できます。 これは {context_name, skin} のタプルの一覧です(以下の例をご覧ください!)。
色は名前または 16 進数表記で定義できます。最近、必要に応じてターミナルの背景色設定を維持できるよう、透明な背景色を示す default という色を追加しました。
NOTE: 現時点ではまだ実験的な機能です。この機能が定着すれば、さらに追加・変更される予定ですので、その点を踏まえてご利用ください! NOTE: 使用可能な色の一覧については、K9s Skinsをご覧ください。
カスタムヘッダーロゴには、ターミナルの 26 列分の固定領域と 6 行分のアート領域が使用され、その下にステータス行が表示されます。余分な列や行は右端と下端で切り捨てられます。タブは 4 つのスペースに展開され、角括弧で囲まれたテキストはそのまま表示されます。
コンテキストロゴは k9s.ui.logo より優先されます。空または空白のみのコンテキストロゴはグローバルロゴにフォールバックし、空のグローバルロゴの場合は標準の K9s アートが使用されます。
標準ロゴとカスタムロゴは同じレイアウトを使用します。ロゴ設定によってリソースビュー、プロンプト、フッターのサイズが変わることはありません。
特定のコンテキストにスキンを適用するには、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
コントリビューター
この素晴らしい方々の貢献がなければ、このプロジェクトはまったく価値のないものになっていたでしょう!
既知の問題
このプロジェクトはまだ開発中です!何かが壊れていたり、必要な機能があったりする場合は、イシューを作成してください。よろしければ PR もお送りください!
次のような場合、K9s はおそらく問題を起こします...
- 古いバージョンの Kubernetes を実行している場合。K9s は新しいバージョンの Kubernetes で最もよく動作します。
- クラスターを管理するための RBAC の知識が十分でない場合。
感謝します!
K9s は多くのオープンソースプロジェクトやライブラリを基盤としています。このプロジェクトを実現するために、夜間や週末も作業してくださっているすべての OSS コントリビューターに、心から感謝します!
コアチームの紹介!
GO と K8s の経験があり、このプロジェクトの保守や拡張に時間を割いてくださる方は、ぜひご連絡ください。
私たちの活動から恩恵を受けている皆さんからのお便りを、いつでもお待ちしています!
貢献ガイドライン
- PR を送信する前に、まずイシューを作成してください!
- エクスポートされるすべての項目に適切なコメントが付いていることを確認してください
- 該当する場合は、PR にテストスイートを含めてください
© 2026 Imhotep Software LLC. すべての資料はApache v2.0の下でライセンスされています