K9s
K9s は、Kubernetes のためのターミナル UI(TUI)です。Web ダッシュボードをクリックするよりも高速で、生の kubectl よりも発見性に優れています。
使用するタイミング
- 端末ベースの Kubernetes クラスター管理: ポッド、サービス、デプロイメントをナビゲートするための高速でインタラクティブな curses UI。
- リアルタイムログストリーミングとリソース監視: マルチポッドログのテーリング、CPU/メモリによるソート、ポートフォワーディング。
- カスタム K9s プラグインとエイリアス: カスタムシェルコマンド(例:stern、cert-manager status の実行)で CLI を拡張。
- 読み取り専用の検査とトラブルシューティング: 読み取り専用モードで本番クラスターを安全にデバッグ。
クイックスタート
# アクティブな kubeconfig で k9s を起動
k9s
# k9s でのナビゲーションショートカット:
# :pods - 全ネームスペースのポッドを表示
# :deploy - デプロイメントを表示
# :svc - サービスを表示
# /<term> - アクティブビューのアイテムをフィルタリング
# l - 選択したポッドのログをストリーム
# s - 選択したコンテナ内でシェル(exec)を開く
コアコンセプト
#カスタムプラグイン設定(plugins.yaml)
迅速なデバッグのためのカスタムキーボードコマンドを追加:
# ~/.config/k9s/plugins.yaml
plugin:
# デプロイメントで 'Shift-D' を押して詳細なロールアウト履歴を表示
rollout-history:
shortCut: Shift-D
confirm: false
description: "ロールアウト履歴"
scopes:
- deployments
command: kubectl
background: false
args:
- rollout
- history
- deployment/$NAME
- -n
- $NAMESPACE
# ポッドで 'Shift-F' を押してインタラクティブデバッグコンテナを起動
debug-pod:
shortCut: Shift-F
confirm: true
description: "ポッドをデバッグ"
scopes:
- pods
command: kubectl
background: false
args:
- debug
- -it
- $NAME
- --image=nicolaka/netshoot
- -n
- $NAMESPACE
#必須ナビゲーションとキーボードショートカット
クラスター管理の高速化:
:pod: ネームスペースをまたいでポッドビューにジャンプ。:svc、:deploy、:ing: サービス、デプロイメント、イングレスにジャンプ。/: リソースを名前またはステータスで検索・フィルタリング。l: 選択したポッドまたはコンテナのログをテーリング。s: 選択したコンテナ内でインタラクティブシェル(sh/bash)を開く。Shift-F: ローカルポートを選択したポッドのサービスポートにポートフォワード。y: 選択したリソースの完全な YAML マニフェストを表示。
#カスタムオプションで K9s を起動
安全なモードで K9s を起動:
# 本番環境での誤ったポッド削除を防ぐために読み取り専用モードで起動
k9s --readonly --namespace production
# カスタムコンテキストとリフレッシュレートを指定
k9s --context prod-eks-cluster --refresh 2
共通パターン
#カスタム K9s ショートカットとプラグイン
問題: 異なるネームスペース間でカスタム kubectl コマンドを頻繁に実行する。
解決策: ~/.config/k9s/plugin.yaml でカスタムプラグインを定義する。
# ~/.config/k9s/plugin.yaml
plugin:
raw-logs:
shortCut: Shift-L
description: "切り詰めずにログをテーリング"
scopes:
- pods
command: kubectl
background: false
args:
- logs
- -f
- $NAME
- -n
- $NAMESPACE
- --context
- $CONTEXT
ベストプラクティス(2026)
- 推奨: 本番環境に接続する際は
k9s --readonlyを使用して誤った削除を防ぐ。 - 推奨: 繰り返し使用する
kubectlコマンドのために~/.config/k9s/plugins.yamlでカスタムプラグインを設定する。 - 推奨: 長い
kubectl port-forwardコマンドを入力する代わりに、ポートフォワードショートカット(Shift-F)を使用する。 - 推奨:
:<all>ネームスペースまたは特定のネームスペースを使用してビューをフィルタリングし、API サーバーのクエリ負荷を軽減する。 - 非推奨: 多数のアクティブなポートフォワードを開いたままにしない。
:portforwardsビューで管理・終了する。 - 非推奨: 適切な
--refresh間隔を設定せずに大規模なエンタープライズクラスターに対して K9s を実行しない。 - 非推奨: バックアップを確認せずに K9s 経由で永続ボリューム要求(PVC)を削除しない。
トラブルシューティング
| エラー | 原因 | 解決策 |
|---|---|---|
Boom!! K9s cannot connect to cluster | アクティブな kubeconfig コンテキストが無効、またはクラスターエンドポイントに到達不可。 | kubectl cluster-info で接続を確認し、kubectl config use-context でコンテキストを切り替える。 |
Pod logs failing to stream in k9s | ポッドコンテナがクラッシュしたか、ユーザーに RBAC pods/log 権限がない。 | コンテナのステータスを確認し、クラスターロールの権限を検証する。 |
Terminal display corrupted / artifacts | 互換性のないターミナル terminfo または小さなターミナルウィンドウ。 | export TERM=xterm-256color を実行し、ターミナルウィンドウを最大化する。 |