mcpField
K
K9s

K9s

公式おすすめ
github.comクラウド・DevOps34.9kk9s1 日前に更新
リポジトリ公式サイト

K9s について

K9s は Kubernetes クラスタを観察・管理するためのインタラクティブなコマンドラインインターフェースを提供します。直感的なビューで Pod、ノード、サービスなどのリソースの状態を素早く確認できます。ターミナルからスケーリング、削除、ログ閲覧などの一般的な操作を実行できます。

主な機能

  1. 01Pod、ノード、サービス、デプロイメントなど Kubernetes リソースを閲覧
  2. 02リアルタイムでリソースのステータス、ログ、イベントを表示
  3. 03ターミナルからスケーリング、削除、再起動などを実行
  4. 04複数のクラスタコンテキスト間をシームレスに切り替え

活用シーン

  1. 01クラスタ内の故障アプリケーションやサービスをデバッグ
  2. 02本番環境のリソース使用状況と健全性を監視
  3. 03Kubernetes デプロイメントを効率的に管理・保守

インストール

OS またはパッケージマネージャーを選び、コマンドをターミナルで実行します。

$
brew install derailed/k9s/k9s

インストール後にk9s --versionを実行して確認します。

コマンド例

よく使うコマンドを使う順に並べています。

01
k9s
02
k9s --context production

詳細

k9s

K9s - クラスターをスタイリッシュに管理する Kubernetes CLI!

K9s は、Kubernetes クラスターを操作するためのターミナル UI を提供します。 このプロジェクトの目的は、実環境でアプリケーションを簡単に移動、監視、管理できるようにすることです。K9s は Kubernetes の変更を継続的に監視し、監視対象のリソースを操作するためのコマンドを提供します。


注意事項...

K9s は、資金力のある大企業が手がけているわけではありません。 これは、メンテナンスとサポートに多くの時間を必要とする複雑な OSS プロジェクトです。 K9s はこれからも OSS であり続け、無料で提供されます!とはいえ、k9s によって日々の Kubernetes での作業が少し快適になり、時間を節約して生産性が向上したと感じたら、ぜひスポンサーになってください! 皆さまからの寄付は、サーバーの稼働と冷蔵庫のビールを維持するために大いに役立ちます!

ありがとうございます!


Go Report Card golangci badge Docker Pulls release License Releases


スクリーンショット

  1. Pod README の画像
  2. ログ README の画像
  3. デプロイメント README の画像

デモ動画/録画


ドキュメント

インストール、使い方、カスタマイズ、ヒントについては、K9s ドキュメントサイトをご覧ください。


Slack チャンネル

仲間のK9sersと K9s の機能について話し合ったり、このツールへの応援を示したりしませんか?


インストール

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 をビルドするには、次の手順が必要です。

  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 は、1.28 以降などの新しい kubernetes バージョンを推奨します。


K8S 互換性マトリックス

k9sk8s client
>= 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⏎正規表現も使用できます。例:`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リソースによって異なります
コンテナにシェル接続するsPod のみ
コンテナにアタッチするaPod のみ
リソースの詳細を表示する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 ビュー
ノードを Cordon/Uncordon するuノードビュー
ノードをドレインするrノードビュー
リソースを再起動するrDeployment/DaemonSet/StatefulSet
リソースをロールバックするctrl-lReplicaSet
ReplicaSet を表示するzDeployment ビュー

K9s の設定

K9s は設定を k9s ディレクトリ内の YAML ファイルとして保持し、その場所はオペレーティングシステムによって異なります。K9s は各種設定ファイルの読み込みに XDG を利用します。お使いの OS におけるデフォルトの保存場所については、こちらのリンクを参照してください。まだわからない場合は、k9s info を実行すると、K9s が設定ファイルを読み込んでいる場所が表示されます。または、K9S_CONFIG_DIR を設定して、K9s が設定ファイルを読み込むディレクトリを指定できます。

UnixmacOSWindows
~/.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 にコンテキストレベルの設定ファイルを追加することで、コンテキスト固有のホットキーを定義できます。

ホットキーを全体に適用するには、次の手順に従ってください。

  1. $XDG_CONFIG_HOME/k9s/hotkeys.yaml という名前のファイルを作成します

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

アノテーション値では、転送先のコンテナに加えて、ローカルポートとコンテナポートを指定する必要があります。コンテナポートは、ポート番号またはポート名で指定できます。ローカルポートを省略した場合、ローカルポートはコンテナポート番号と同じになります。例をいくつか示します。

  1. bozo::http - ポート名 http を使用して、コンテナ bozo に pf を作成します。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 を使用します。たとえば、 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
動作の仕組み
  1. カスタムジャンプルールが定義されたリソースを表示します。

  2. 選択した項目で Enter を押すと、次の処理が行われます。

    • 選択したリソースのデータを使ってテンプレート式を適用します。
    • フィルターが適用された状態で、対象リソースのビューにジャンプします。
    • ラベルセレクター/フィールドセレクターを自動的に適用し、関連するリソースだけを表示します。
    • 設定に従って名前空間のコンテキストを調整します。
  3. カスタムジャンプが定義されていない場合は、デフォルトの動作(詳細ビューまたは組み込みのジャンプ)が適用されます。


プラグイン

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、または dropdown
  • required — 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 スキン ;)

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

コントリビューター

この素晴らしい方々の貢献がなければ、このプロジェクトはまったく価値のないものになっていたでしょう!

README の画像

既知の問題

このプロジェクトはまだ開発中です!何かが壊れていたり、必要な機能があったりする場合は、イシューを作成してください。よろしければ PR もお送りください!

次のような場合、K9s はおそらく問題を起こします...

  1. 古いバージョンの Kubernetes を実行している場合。K9s は新しいバージョンの Kubernetes で最もよく動作します。
  2. クラスターを管理するための RBAC の知識が十分でない場合。

感謝します!

K9s は多くのオープンソースプロジェクトやライブラリを基盤としています。このプロジェクトを実現するために、夜間や週末も作業してくださっているすべての OSS コントリビューターに、心から感謝します!


コアチームの紹介!

GO と K8s の経験があり、このプロジェクトの保守や拡張に時間を割いてくださる方は、ぜひご連絡ください。

私たちの活動から恩恵を受けている皆さんからのお便りを、いつでもお待ちしています!

貢献ガイドライン

  • PR を送信する前に、まずイシューを作成してください!
  • エクスポートされるすべての項目に適切なコメントが付いていることを確認してください
  • 該当する場合は、PR にテストスイートを含めてください

Imhotep  © 2026 Imhotep Software LLC. すべての資料はApache v2.0の下でライセンスされています

コメント