K9sチュートリアル:ターミナルからKubernetesクラスタをプロのように管理・監視する

DevOps tutorial - IT technology blog
DevOps tutorial - IT technology blog

誰も語らないkubectlの問題点

Kubernetesクラスタに日々多くの時間を費やしているなら、この辛さはよく分かるはずです。Podが再起動し続ける原因を調べようとしてkubectl get pods -n stagingを実行し、問題のPodを特定したらkubectl describe pod my-app-7d9f8b-xkj2p -n stagingを実行し、さらにkubectl logs my-app-7d9f8b-xkj2p -n staging --previousを実行し、そしてコンテナの中に入って調査する——たった1つの問題を診断するのに4つのコマンドが必要で、しかも30文字近いPod名を毎回タイプしなければなりません。

私もプロダクションクラスタを使い始めた最初の数ヶ月でこの問題に直面しました。K9sがそれを解決してくれました。以来、毎日使い続けており、Kubernetesを触る新しいマシンに最初にインストールするツールになっています。

K9sとは何か

K9sはKubernetes向けのターミナルベースUIです。既存のkubeconfigの上に乗って、クラスタのリアルタイム・インタラクティブビューを提供します——Webブラウザ不要、追加バックエンド不要、管理すべきサーバー不要。kubectlにライブダッシュボードとキーボードショートカットを組み込んだものと考えてください。

GUIベースのダッシュボードとの主な違い:

  • 単一バイナリ——Helmチャート不要、デプロイ不要、データベース不要
  • 有効なkubeconfigがあればどこでも動作(ローカルクラスタ、EKS、GKE、AKS——すべて同じ操作感)
  • Kubernetes APIからリアルタイムで読み取るため、表示内容はすべてリアルタイム
  • RBAC対応——kubeconfigのユーザーがアクセスできるリソースのみ表示
  • 完全キーボード操作——ショートカットを覚えれば、どんなGUIよりも高速に操作できる

K9sはスクリプトやCI/CDパイプラインkubectlの代替となるものではありません。ターミナルでリアルタイムに問題を調査する際のインタラクティブなデバッグパートナーです。

インストール

K9sは単一バイナリとして提供され、主要なパッケージマネージャーから利用できます:

# macOS
brew install derailed/k9s/k9s

# Linux(最新リリースバイナリをダウンロード)
curl -Lo k9s.tar.gz https://github.com/derailed/k9s/releases/latest/download/k9s_Linux_amd64.tar.gz
tar -xzf k9s.tar.gz
sudo mv k9s /usr/local/bin/

# Windows(Chocolatey)
choco install k9s

# またはgo installでインストール
go install github.com/derailed/k9s@latest

動作確認:

k9s version

有効なkubeconfigがあれば、K9sの起動はこれだけです:

k9s

特定のコンテキストやNamespaceを指定して起動するには:

# 特定のkubeconfigコンテキストに接続
k9s --context production-cluster

# 特定のNamespaceで起動
k9s -n kube-system

基本概念:K9sインターフェースのナビゲーション

K9sのインターフェースには3つの主要エリアがあります:現在のクラスタとNamespaceを表示するヘッダー、中央のリソース一覧、そして下部に利用可能なキーを表示するヘルプバーです。

コマンドバー

:(コロン)を押してコマンドバーを開きます——これがリソースタイプを切り替える方法です。Kubernetesのリソース名を入力してEnterを押してください:

:pods          # すべてのPodを表示
:deployments   # Deploymentを表示
:services      # Serviceを表示
:nodes         # クラスタノードを表示
:namespaces    # Namespaceを切り替え
:configmaps    # ConfigMapを表示
:secrets       # Secretを表示(値はデフォルトでマスク)
:ingresses     # Ingressリソースを表示
:events        # クラスタイベント——デバッグに非常に役立つ

kubectlと同様に短縮エイリアスも使えます::po:deploy:svc:ns

重要なキーボードショートカット

これらがK9sを学ぶ価値のあるキーです。数時間使えば自然と身につきます:

  • / — 名前で現在のリソース一覧をフィルター(入力で検索、Escapeでクリア)
  • Enter — リソースをドリルダウン(Pod → コンテナ → ログ)
  • l — 選択したPodのログを表示
  • s — 選択したコンテナにシェル(exec)で入る
  • d — 選択したリソースの詳細を表示(kubectl describe相当)
  • e — リソースのYAMLをインラインで編集
  • ctrl+d — 選択したリソースを削除(確認プロンプトあり)
  • ctrl+k — リソースを強制削除
  • y — リソースの完全なYAMLを表示
  • nまたは09 — Namespaceを切り替え(0 = 全Namespace)
  • ? — ヘルプオーバーレイを表示
  • ctrl+cまたはq — 終了

Namespaceの切り替え

0を押すと全Namespaceのリソースを表示できます。または:namespacesを開いて目的のNamespaceに移動し、Enterを押して切り替えます。K9sはコンテキストごとに最後に使用したNamespaceを記憶しています。

実践:実際のデバッグワークフロー

CrashLoopBackOffの診断

最もよく遭遇するシナリオです。K9sを開いて:podsに移動し、/でアプリ名でフィルタリングします。STATUSにCrashLoopBackOffと表示され、RESTARTSのカウントが増え続けているのが分かります。そのPodを選択して:

  1. lを押して現在のログを即座に表示
  2. ログビューでpを押して前回のコンテナログに切り替え(クラッシュしたインスタンス)
  3. 必要に応じてwで長い行を折り返し表示
  4. fでログをリアルタイムにフォロー(tail)
  5. Escapeで戻り、dでPodの詳細を表示して下部のEventsを確認

この一連の調査はK9sなら約20秒で完了します。30文字近いPod名をコピーしながら5つのkubectlコマンドを実行するのと比べてみてください。

ノードのリソース使用量の監視

:nodesに切り替えると、CPU%とMEM%の列がカラーコードで表示されます——緑が正常、黄が警告、赤が危険。任意のノードを選択してEnterを押すと、そのノードで実行中のすべてのPodが表示されます。特定のマシンのリソース圧迫をトラブルシューティングする際に、ノイジーネイバーを発見するのに役立ちます。

kubectlを使わないポートフォワーディング

フォワードしたいPodまたはServiceを選択してshift+fを押します。K9sがローカルポートとリモートポートを設定するダイアログを開き、フォワードを開始します。アクティブなポートフォワードは:pfで確認できます。ネットワークルールを変更せずにラップトップから内部サービスにアクセスしたいときに便利です。

リアルタイムイベントの監視

:eventsビューはK9sの中で最も活用されていない画面の一つです。/でNamespaceまたはアプリ名でフィルタリングできます。Eventsは、Kubernetesがバックグラウンドで何をしているかを正確に示します——イメージのプルエラー、スケジューリングの決定、Readinessプローブの失敗など。新しいものをデプロイする際は、常に2番目のターミナルペインにこの画面を開いています。複数のkubectl describeコマンドで見つけるような問題を即座に検出できます。

Deploymentの管理

:deploymentsで任意のDeploymentを選択して:

  • sでスケール(K9sがレプリカ数を入力するプロンプトを表示)
  • rでDeploymentを再起動(ローリングリスタート)
  • eでDeploymentのYAMLを直接編集——イメージタグ、環境変数、リソース制限をその場で変更
  • Enterを押してReplicaSetにドリルダウンし、個々のPodへ移動

Pulsesビューの活用

:pulsesを入力すると、主要なリソースタイプのリソース数とステータスを示すクラスター全体の概要が表示されます。詳細を調べる前に、何か大きな問題が起きていないかを一画面で確認できます。

知っておくべきカスタマイズ

K9sの設定はLinux・Macでは~/.config/k9s/config.yaml、Windowsでは%APPDATA%\k9s\config.yamlに保存されます。デフォルトのNamespace、スキンテーマ、UIの動作はすべてここで設定できます。

カラーテーマの変更:

# 利用可能なスキンを一覧表示
ls ~/.config/k9s/skins/

# またはK9s GitHubリポジトリからコミュニティスキンをダウンロード
# config.yamlで設定する:
# ui:
#   skin: monokai

チームは~/.config/k9s/views.yamlを使ってリソースタイプごとにカスタムカラムビューを設定できます。標準のカラムに加えて、自分たちの環境で重要なフィールド——PodのQoSクラス、Priorityクラス、オンコールローテーションが実際に監視しているもの——をピン留めできます。

まとめ

K9sはあなたとクラスタの間にある摩擦を取り除きます。kubectlコマンドを記憶から構築したり、Pod名をコピーしたりする代わりに、視覚的にナビゲートできます——コンテキストは常に画面に表示され、キー一つでログやシェルにアクセスできます。

まずはkubectlでやっていることから始めましょう:Podのステータス確認、ログの読み取り、リソースの詳細表示。1週間でショートカットが体に馴染みます。1ヶ月後には、インタラクティブなデバッグにkubectlに戻るのは、タブ補完なしでディレクトリを移動するような感覚になります。

複数のクラスタを扱っていますか?K9sはkubectxと相性が抜群です。コンテキストを切り替えてK9sを再起動するだけで、すべてが新しいターゲットを即座に反映します。クラスタ側の設定は不要です。バイナリをPATHに置くだけで完了です。

Share: