爆速Kubernetes操作!ターミナルUIツールK9sを使いこなそう

爆速Kubernetes操作!ターミナルUIツールK9sを使いこなそう – 詳細解説

はじめに:Kubernetes操作の現場とK9sの登場

コンテナオーケストレーションのデファクトスタンダードとなったKubernetesは、現代のクラウドネイティブ開発において不可欠な技術です。アプリケーションのデプロイ、スケーリング、管理を強力にサポートしますが、その操作は決して簡単ではありません。クラスターの状態確認、Podのログ追跡、サービスの露出、コンテナ内部へのシェルアクセスなど、日常的な操作はすべて kubectl コマンドラインツールを通じて行われます。

kubectl は非常に強力で柔軟なツールですが、多くのコマンド、オプション、リソースタイプを覚える必要があります。また、特定のPodの状態を継続的に監視したり、関連する複数のリソース(Deployment, ReplicaSet, Pod, Service, Ingressなど)を横断的に確認したりする作業は、複数の kubectl コマンドを駆使したり、watch コマンドと組み合わせたりする必要があり、煩雑になりがちです。特に、多数のPodが起動している大規模な環境や、複数のマイクロサービスで構成されるアプリケーションを扱う場合、コマンドラインだけでの操作は生産性の低下やオペレーションミスの原因となり得ます。

このような課題を解決するために登場したのが、ターミナル上で動作するKubernetes UIツール、K9sです。K9sは、クラスター内のリソースを視覚的に、かつインタラクティブに表示し、キーボードショートカットだけで様々な操作を素早く実行できるように設計されています。これにより、kubectl コマンドをいちいち入力する手間を省き、Kubernetesクラスターの操作を劇的に効率化することができます。まるでゲームをプレイするような感覚で、複雑なKubernetesリソース間を自在に行き来し、必要な情報に瞬時にアクセスできるようになります。

この記事では、K9sの基本的な使い方から、高度な機能、カスタマイズ方法まで、詳細に解説します。約5000語のボリュームで、K9sを完全に使いこなすための知識を網羅することを目指します。Kubernetes操作をもっと速く、もっと簡単にしたいと考えているすべての方にとって、この記事がK9s活用の強力な一助となることを願っています。

K9sとは?なぜK9sを使うべきなのか?

K9sの基本的な説明

K9sは、オープンソースのターミナルUIツールであり、Kubernetesクラスター内のリソースを管理および操作するために設計されています。Go言語で開発されており、クロスプラットフォームで動作します。TUI (Terminal User Interface) を採用しているため、GUIアプリケーションのようなリッチな表現力はありませんが、SSH接続したリモートサーバー上でも快適に動作し、リソース消費も少ないという利点があります。

K9sは、kubectl が持つ多くの機能を、直感的でナビゲーションしやすいインターフェースを通じて提供します。Pod、Deployment、Service、Namespaceといった主要なリソースはもちろん、ConfigMap、Secret、PersistentVolume、StorageClass、さらにはCustom Resource Definition (CRD) まで、様々なKubernetesリソースを表示・操作できます。

なぜK9sを使うのか?(K9sのメリット)

K9sを使う最大の理由は、その圧倒的な操作の迅速化視覚的な理解の促進にあります。

  1. 操作の迅速化:

    • キーボードショートカット主体:ほとんどの操作はキーボードショートカットで行えます。リソースの選択、詳細表示、ログ表示、シェルの起動などが数キー操作で完了します。
    • コマンド入力不要:kubectl get pods, kubectl describe service <service-name>, kubectl logs <pod-name>, kubectl exec -it <pod-name> -- bash といったコマンドを毎回打つ必要がありません。
    • コンテキスト/ネームスペースの素早い切り替え:複数のクラスターやネームスペースを頻繁に切り替える必要がある場合に、非常に便利です。
    • フィルタリングと検索:大量のリソースの中から目的のものを素早く見つけることができます。
  2. 視覚的な理解の促進:

    • リソースのリスト表示:現在のネームスペースにあるリソースが一覧で表示され、ステータスや基本的な情報が一目でわかります。
    • 関連リソースへのナビゲーション:特定のDeploymentからそのReplicaSet、さらにPodへと、関連するリソース間を簡単に辿っていくことができます。これは、アプリケーションの構成を理解したり、問題発生時に原因を特定したりする上で非常に役立ちます。
    • リソースのステータス表示:Podの状態(Running, Pending, CrashLoopBackOffなど)が色分けされて表示されるため、異常が発生しているPodをすぐに見つけられます。
    • メトリクスの統合表示:PodやNodeのリソース使用率(CPU, Memory)を一覧画面や詳細画面で確認できます。
  3. その他のメリット:

    • 学習コストの低減:kubectl の膨大なコマンドオプションを全て覚える必要はありません。主要なリソースの名前と基本的なキー操作さえ覚えれば、すぐに使い始められます。
    • 多機能性:ログ追跡、ポートフォワーディング、リソースの再起動、イベント表示など、運用・開発に必要な機能が豊富に組み込まれています。
    • カスタマイズ性:キーバインディング、エイリアス、プラグインなどを自由に設定でき、自分の作業スタイルに合わせて最適化できます。
    • リソース消費が少ない:TUIベースのため、GUIツールに比べて軽量に動作します。

K9sはどんな人におすすめ?

  • Kubernetesを日常的に操作する開発者や運用エンジニア: クラスターの状態確認、ログ調査、デバッグ作業を効率化したい方。
  • Kubernetes学習者: クラスターの構成やリソース間の関連性を視覚的に理解したい方。kubectl コマンドの実行結果と合わせてUIで確認することで、理解が深まります。
  • コマンドライン操作が得意な方: ターミナルベースのツールに抵抗がなく、キーボード操作で作業を完結させたい方。
  • 複数のKubernetesクラスターやネームスペースを管理する方: 切り替えの手間を劇的に減らせます。

K9sのインストール

K9sのインストールは非常に簡単です。主要なOSに対応しており、それぞれのOSのパッケージマネージャーや公式リリースから入手できます。

macOS

Homebrewを使うのが最も簡単です。

bash
brew install k9s

Linux

Linuxディストリビューションによっていくつかの方法があります。

Homebrew (Linux版):
macOSと同様にHomebrew for Linuxを使用できます。

bash
brew install k9s

パッケージマネージャー (Snapcraft):
Snapcraftが利用可能な環境であれば、snapコマンドでインストールできます。

bash
snap install k9s

または
bash
sudo snap install k9s --classic # 必要であれば --classic オプション

バイナリのダウンロード:
GitHubのK9sリリースぺージ (https://github.com/derailed/k9s/releases) から、お使いの環境(アーキテクチャ)に合ったバイナリをダウンロードし、$PATH が通っているディレクトリに配置します。

“`bash

例: 最新版のLinux AMD64バイナリをダウンロードし、/usr/local/binに配置

バージョン番号は最新のものに置き換えてください

VERSION=”v0.32.4″ # 例
ARCH=”linux_amd64″
wget https://github.com/derailed/k9s/releases/download/${VERSION}/k9s_${ARCH}.tar.gz
tar -xzf k9s_${ARCH}.tar.gz
sudo mv k9s /usr/local/bin/
rm k9s_${ARCH}.tar.gz # 不要になったアーカイブを削除
“`

Windows

Chocolatey:
Chocolateyパッケージマネージャーがインストールされていれば、以下のコマンドでインストールできます。

powershell
choco install k9s

Scoop:
Scoopパッケージマネージャーも利用できます。

powershell
scoop install k9s

バイナリのダウンロード:
GitHubのリリースぺージから、Windows向けのZipファイルをダウンロードし、展開して得られる k9s.exe$PATH が通っているディレクトリに配置します。

その他

Dockerイメージも提供されていますが、通常はローカル環境にインストールして利用します。

インストールが完了したら、ターミナルを開いて k9s version コマンドを実行し、バージョン情報が表示されるか確認してください。

bash
k9s version

K9sの基本操作

インストールが完了したら、早速K9sを起動してみましょう。

起動と終了

ターミナルで以下のコマンドを実行するだけです。

bash
k9s

K9sは、デフォルトで現在のKubernetesコンテキストと、.kube/config ファイルに設定されているデフォルトネームスペースを使用します。

終了するには、Ctrl + C キーを押すか、q キーを押します。

画面構成の理解

K9sを起動すると、ターミナル画面がK9sのUIに切り替わります。画面は主に以下の3つのセクションで構成されています。

  1. ヘッダー: 画面上部に表示され、現在のKubernetesコンテキスト、アクティブなネームスペース、表示しているリソースタイプ、K9sのバージョン情報などが表示されます。
  2. コンテンツエリア: 画面の中央大部分を占め、選択したリソースタイプのリストが表示されます。各行が1つのリソース(例: 1つのPod)を表し、列にはリソースの様々な情報(名前、ステータス、年齢など)が表示されます。
  3. フッター / コマンドライン: 画面下部に表示されます。
    • 通常時は、現在利用可能な主要なショートカットキーが表示されます(これはコンテキストによって変化します)。
    • コマンド入力モード( : キーで入る)では、ここにコマンドやエイリアスを入力します。
    • フィルタリングモード( / キーで入る)では、ここに検索キーワードを入力します。

主要なリソースの表示

K9s起動直後は、通常、デフォルトネームスペースのPod一覧が表示されます。他のリソースを表示するには、コマンドラインモードでリソースタイプの短縮名または複数形を入力して Enter を押します。

コマンドラインモードに入るには : キーを押します。
例えば、Deployment一覧を表示するには:
1. : キーを押す。
2. フッターに : が表示されるので、deployments と入力する。(deploydp といったエイリアスも利用可能)
3. Enter キーを押す。

よく使うリソースタイプの短縮名とエイリアス:
* Pod: pods, po
* Deployment: deployments, deploy, dp
* Service: services, svc
* Ingress: ingresses, ing
* ReplicaSet: replicasets, rs
* StatefulSet: statefulsets, sts
* DaemonSet: daemonsets, ds
* ConfigMap: configmaps, cm
* Secret: secrets
* Namespace: namespaces, ns
* Node: nodes, no
* PersistentVolumeClaim: pvcs
* PersistentVolume: pvs
* StorageClass: sc
* Custom Resource Definition: crds (CRD自体を表示), またはCRDのkind名(例: istio がインストールされていれば gateways など)

基本的なナビゲーション

コンテンツエリアでリソースリストが表示されているとき、以下のキーを使ってナビゲーションできます。

  • 上下矢印キー (, ): リソースリスト内の行を上下に移動します。
  • 左右矢印キー (, ): 現在のビューに関連する別のビューに移動します。例えば、Podリストから左キーでDeploymentリストに戻ったり、右キーで関連するイベントリストを表示したりできます。
  • PageUp / PageDown キー: リストを1ページ分上下にスクロールします。
  • Home / End キー: リストの先頭/末尾に移動します。
  • Ctrl + B / Ctrl + F: ページング(PageUp / PageDown と同じ)

検索 / フィルタリング

大量のリソースの中から特定の条件に合うものを探すには、フィルタリング機能が便利です。

  • / キー: フィルタリングモードに入ります。フッターに / が表示されます。
  • キーワードを入力すると、入力した文字列を含む名前のリソースがリアルタイムでフィルタリングされます。
  • 複数のキーワードでAND検索を行うには、スペースで区切ります(例: my-app running で「my-app」を含み、かつ「running」を含む名前のリソースを検索)。
  • ラベルによるフィルタリングも可能です。例えば、l:app=nginx のように入力すると、ラベル app=nginx を持つリソースをフィルタリングできます。
  • フィルタリングを解除するには、フィルタリングモード中に Enter キーを押すか、Escape キーを押します。

詳細表示 (describe)

特定のリソースの詳細情報を表示するには、リストで対象のリソースを選択し、d キーを押します。これは kubectl describe <resource-type> <resource-name> コマンドの実行結果に相当します。

詳細画面では、リソースの仕様、ステータス、イベントなどが確認できます。詳細画面内でも上下キーでスクロールしたり、/ キーでテキスト検索したりできます。元のリスト画面に戻るには、Escape キーを押します。

ログの表示 (logs)

Podのログを表示するには、Podリストで対象のPodを選択し、l キーを押します。これは kubectl logs <pod-name> コマンドの実行結果に相当します。

  • デフォルトでは、Pod内の最初のコンテナのログが表示されます。複数のコンテナがあるPodの場合、ログ画面内で c キーを押すとコンテナを選択できます。
  • ログ表示画面に入ると、デフォルトでログが追跡(tail)されます。追跡を停止/再開するには f キーを押します。
  • 過去のログ全体を表示するには、ログ表示画面で Ctrl + P キーを押します。
  • ログ表示画面内でも、/ キーでログ内容を検索できます。
  • 元のリスト画面に戻るには、Escape キーを押します。

シェルの起動 (exec)

Pod内のコンテナにシェルで接続するには、Podリストで対象のPodを選択し、s キーを押します。これは kubectl exec -it <pod-name> -- <shell> コマンドの実行に相当します。

  • デフォルトのシェルは通常 bash または sh です。
  • 複数のコンテナがあるPodの場合、シェル接続するコンテナを選択できます。
  • シェルセッションを終了するには、通常のシェルと同様に exit コマンドを実行するか、Ctrl + D を押します。K9sのPodリスト画面に戻ります。

リソースの編集 (edit)

KubernetesリソースのYAML/JSON定義を編集するには、リストで対象のリソースを選択し、e キーを押します。これは kubectl edit <resource-type> <resource-name> コマンドの実行に相当します。

  • K9sはシステムデフォルトのエディタ($EDITOR 環境変数で指定されたエディタ)を起動し、選択したリソースの定義ファイルを読み込みます。
  • エディタでファイルを編集・保存して終了すると、K9sが変更内容をクラスターに適用します。適用に失敗した場合はエラーが表示されます。
  • 編集を中断してエディタを終了する場合、変更を保存せずに終了すれば、クラスターに変更は適用されません。

注意: リソースの編集はクラスターの状態を直接変更する危険な操作です。十分注意して実行してください。特にプロダクション環境での利用は慎重に行う必要があります。

リソースの削除 (delete)

Kubernetesリソースを削除するには、リストで対象のリソースを選択し、d キーを押します。これは kubectl delete <resource-type> <resource-name> コマンドの実行に相当します。

  • 削除確認のプロンプトが表示されます。操作を確定するには y と入力して Enter を押します。キャンセルするには n と入力するか Escape キーを押します。
  • 複数のリソースを選択して一度に削除することも可能です(後述のマーク機能を使用)。

注意: リソースの削除は元に戻せません。実行する際は十分注意してください。

コンテキスト / ネームスペースの切り替え

複数のKubernetesクラスターやネームスペースを扱う際に、K9sは非常に強力なツールとなります。

  • コンテキストの切り替え:
    • Ctrl + T キーを押すと、設定されているKubernetesコンテキスト(クラスター)のリストが表示されます。
    • 上下キーで選択し、Enter キーで切り替えます。
  • ネームスペースの切り替え:
    • デフォルトでは、K9sは起動時のデフォルトネームスペースを使用します。
    • : キーでコマンドラインモードに入り、ns と入力して Enter を押すと、ネームスペース一覧が表示されます。
    • ネームスペース一覧で上下キーで選択し、Enter キーで切り替えます。
    • ネームスペース一覧を表示せずに、特定のネームスペースに直接切り替えるには、コマンドラインモードで ns <namespace-name> または ns all と入力します。ns all は全てのネームスペースのリソースを表示する特別なネームスペースです。
    • コンテンツエリアでリソースを表示中に 0 キーを押すと、全てのネームスペースを表示するモードになります。特定のネームスペースに戻るには、再度 ns <namespace-name> コマンドを使用します。

複数のリソースを選択して操作する (Marking)

コンテンツエリアでリソースリストを表示している際に、特定の操作を複数のリソースに対して一度に実行したい場合があります。K9sでは「マーク(Marking)」機能を使ってこれが可能です。

  • リストで対象のリソースにカーソルを合わせ、Space キーを押すと、そのリソースがマークされます(行頭に [x] のようなマークが表示されます)。
  • 複数のリソースをマークできます。
  • マークしたリソースに対して操作を実行するには、操作に対応するキーを押します。例えば、マークしたPod全てを削除するには、d キーを押します(削除確認プロンプトが表示されます)。マークしたPod全てに対してログ追跡を開始するには、l キーを押します(ただし、複数のログを同時に見るのは画面レイアウト上難しい場合があります)。
  • マークを解除するには、再度 Space キーを押します。
  • 全てのマークを解除するには、U (Shift + U) キーを押します。

K9sの便利な機能

基本操作をマスターしたら、K9sのさらに便利な機能を活用してみましょう。

ポートフォワーディング (port-forward)

ローカルマシンからKubernetesクラスター内のServiceやPodにアクセスするために、ポートフォワーディングは頻繁に利用される機能です。K9sを使えば、これを簡単に行えます。

  • PodリストまたはServiceリストで、ポートフォワードしたいリソースを選択します。
  • Shift + F (つまり F) キーを押します。
  • ポートフォワード設定画面が表示されます。
    • Podを選択した場合、そのPodが公開しているポートがリストアップされます。ポートを選択して Enter を押すと、ランダムなローカルポートに転送設定されます。または、手動で [local-port]:[remote-port] の形式で入力することも可能です。
    • Serviceを選択した場合、Serviceが公開しているポートと、そのServiceがターゲットとするPodのポートが表示されます。同様にポートを選択または入力して設定します。
  • 設定後 Enter を押すと、ポートフォワーディングが開始されます。フッターに転送中のポート情報が表示されます。
  • ポートフォワーディングを停止するには、Shift + F (つまり F) キーを再度押すか、転送情報をクリック(対応しているターミナルであれば)して停止します。または、K9sの画面を閉じることでも停止します。

この機能は、ローカルの開発環境からクラスター上のアプリケーションにアクセスしてテストする際に非常に便利です。

リソースの再起動 (restart/rollout restart)

DeploymentやStatefulSetなどのワークロードを更新せずにPodを再起動したい場合があります(例えば、一時的な不調のリフレッシュなど)。K9sではこれを簡単に実行できます。

  • DeploymentリストまたはStatefulSetリストで対象のリソースを選択します。
  • R (Shift + R) キーを押します。
  • 確認プロンプトが表示されるので、y と入力して確定します。
  • K9sは選択されたワークロードに対して kubectl rollout restart コマンドに相当する操作を実行します。これにより、Podがローリングアップデート方式で順次再作成されます。

Pod自体を個別に再起動したい場合は、Podを選択して削除(d キー)するのが一般的です。通常、DeploymentやStatefulSetが新しいPodを自動的に作成します。

トップコマンド (top) – リソース使用率の確認

NodeやPodのリソース使用率(CPU、Memory)を確認するには、top コマンドに相当する機能を使用します。

  • NodeリストまたはPodリストで、対象のリソースにカーソルを合わせます。
  • T (Shift + T) キーを押します。
  • 選択したリソースのリソース使用率(CPU、Memory)が、時間の経過とともにグラフや数値で表示されます。これは kubectl top node または kubectl top pod コマンドの実行結果を整形したものです。
  • この機能を利用するには、クラスターにMetrics Serverがインストールされている必要があります。

イベントの表示

Kubernetesクラスターでは、リソースの作成、削除、スケジューリング、エラーなどの様々なイベントが発生します。これらのイベントは、問題の原因究明に非常に役立ちます。

  • ほとんどのリソースリスト画面で、リソースを選択して e キーを押すと、そのリソースに関連するイベント一覧が表示されます(d キーの詳細表示でイベントセクションを確認するよりも、イベント単独でリスト表示できます)。これは kubectl get events --field-selector involvedObject.name=<resource-name> に相当します。
  • また、: キーでコマンドラインモードに入り events と入力すると、現在のネームスペース全体のイベント一覧が表示されます。
  • イベント一覧では、イベントの種類、発生時刻、関連リソース、発生元、メッセージなどが確認できます。

特にPodが Pending から抜け出せない、または CrashLoopBackOff になる場合など、Podに関連するイベントを確認することで、スケジューリングの問題やコンテナ起動時のエラーなどの原因を特定しやすくなります。

エイリアス (alias)

K9sでは、よく使うコマンドやリソースビューにカスタムのエイリアスを設定できます。これにより、さらに素早くナビゲーションできるようになります。

エイリアスは設定ファイル (~/.k9s/config.yaml または ~/.k9s/plugin.yaml など、デフォルトでは ~/.k9s/aliases.yaml) で定義します。

例:
“`yaml

~/.k9s/aliases.yaml

aliases:
# Custom aliases for resource views
po: pods
deploy: deployments
svc: services
ing: ingresses
ns: namespaces
ctx: contexts
# Custom aliases for commands (plugins) – 例
pf: port-forward # これは組み込み機能ですが、例として
logtail: logs -f
``
デフォルトのエイリアスはK9sに組み込まれていますが、
aliases.yamlを作成して独自のエイリアスを追加したり、既存のエイリアスを上書きしたりできます。
設定ファイルにエイリアスを追加したら、K9sを再起動するか、コマンドラインモードで
reload` と入力して設定を再読み込みします。

エイリアスはコマンドラインモード(:)で入力します。例えば、Deployment一覧を表示したい場合、デフォルトのエイリアス deploy が定義されていれば、:deploy と入力するだけで済みます。

スキン / テーマの設定

K9sは、ターミナルの配色テーマをカスタマイズできます。いくつかの組み込みスキンが用意されているほか、独自のスキンを作成することも可能です。

  • コマンドラインモード(:)で skin <skin-name> と入力すると、利用可能なスキンリストが表示されます。
  • スキンリストで選択して Enter を押すと、テーマが即座に切り替わります。
  • skin default でデフォルトスキンに戻せます。
  • 設定ファイル (~/.k9s/config.yaml または ~/.k9s/skin.yaml) でデフォルトスキンを指定できます。

例:
“`yaml

~/.k9s/config.yaml

k9s:
# … その他の設定 …
skin: dark
“`
利用可能な組み込みスキン名は、K9sのリポジトリやドキュメントで確認できます。独自のスキンを作成する場合は、YAMLファイルで細かく色やスタイルを定義できます。

プラグインの活用

K9sの最も強力な機能の一つがプラグインシステムです。プラグインを使うと、選択したリソースに対してカスタムコマンドやスクリプトを実行するキーバインディングを追加できます。これにより、K9sの機能を大幅に拡張できます。

プラグインは設定ファイル (~/.k9s/plugin.yaml) で定義します。

例: 選択したPodに対して curl localhost:8080/healthz を実行するプラグイン
“`yaml

~/.k9s/plugin.yaml

plugins:
my-health-check:
shortCut: Shift+H # H キーにバインド
description: “Run health check curl command”
scopes:
– pods # このプラグインが有効なリソースタイプ (Pod)
command: kubectl
args:
– exec
– -it
– $NAME # K9sが選択されたリソースの名前に置換する変数
– —
– curl
– localhost:8080/healthz
``
この設定を追加すると、PodリストでPodを選択し
Shift + Hキーを押すだけで、そのPod内で指定したcurl` コマンドが実行され、結果が新しいターミナル画面に表示されます。

プラグイン定義の主要なフィールド:
* shortCut: プラグインを起動するためのキーバインディング。
* description: フッターに表示される説明。
* scopes: このプラグインが有効になるリソースタイプのリスト。* で全てのリソースタイプに適用できます。
* command: 実行するコマンド(例: kubectl, helm, ssh, /path/to/my/script.sh)。
* args: コマンドに渡す引数のリスト。$NAME, $NAMESPACE といった変数が利用できます。

このプラグイン機能を使えば、Kubernetesのデバッグ、診断、特定の管理タスクなどを、K9s上から素早く実行できるようになります。例えば、特定のラベルを持つPod一覧を表示するプラグインや、ServiceのClusterIPに対してPingを実行するプラグインなども作成可能です。

スナップショット / トレース

K9sは、特定のリソースビューの現在の状態をスナップショットとして保存したり、トレースとして記録したりする機能も持っています。

  • スナップショット: 現在表示しているリソースリスト(例: Pod一覧)の状態をJSONまたはYAML形式でファイルに保存します。これは、特定の時点でのクラスターの状態を記録しておきたい場合に便利です。コマンドラインモードで snapshot <filename> と入力します。
  • トレース: 特定のリソース(Podなど)を選択し、Ctrl + K キーを押すと、そのリソースに関する様々な情報(ログ、イベント、詳細情報など)をまとめて取得し、ファイルに保存します。これは、後でデバッグや分析を行うために、問題が発生したリソースの包括的な情報を収集したい場合に役立ちます。

これらの機能は、トラブルシューティング時の情報収集プロセスを効率化します。

メトリクス表示

Metrics Serverがインストールされていれば、K9sはPodやNodeのリソース使用率(CPU, Memory)を表示できます。

  • PodやNodeのリストで、デフォルトでCPUやMemoryの使用率(Requests/Limitsに対する割合など)が列として表示されます(設定による)。
  • T キーで詳細なトップ表示に切り替えられます(前述)。
  • Podリストで m キーを押すと、PodのCPU/Memory使用率でソートできます。

これらのメトリクス情報は、リソース不足による問題(PodのOOMKillなど)を特定するのに役立ちます。

アラート / 通知機能

K9sは、特定のイベントやリソースの状態変化に対してアラートや通知を発生させるように設定することも可能です。これは主にConfigMapなどの設定リソースを監視する際に利用されます。設定ファイル (config.yaml) でアラートルールを定義できます。

例: 特定のConfigMapが変更されたら通知する
“`yaml

~/.k9s/config.yaml

k9s:
# …
thresholds:
– resource: configmaps
threshold: 0 # Any change
level: warn
message: “ConfigMap {{ .Meta.Name }} in {{ .Meta.Namespace }} changed!”
“`
この機能は高度な利用例であり、設定も少し複雑になりますが、特定の重要なリソースに対する変更を監視したい場合に有用です。

K9sスクリプト (K9s Scripting)

K9sのプラグイン機能は、さらに進んだ「K9s Scripting」と組み合わせることで、より複雑な自動化タスクを実行できます。これは、K9sのイベント(例えば、特定のPodがクラッシュした、新しいリソースが作成されたなど)をトリガーとして、カスタムスクリプトを実行する機能です。

設定ファイル (config.yaml) の script セクションで定義します。

例: PodがCrashLoopBackOffになったらSlack通知スクリプトを実行する
“`yaml

~/.k9s/config.yaml

k9s:
# …
scripts:
– path: /path/to/your/slack-notification.sh
args: [“{{ .Meta.Name }}”, “{{ .Meta.Namespace }}”]
triggers:
– source: pods
event: CrashLoopBackOff
``/path/to/your/slack-notification.sh` スクリプトは、引数としてPod名とネームスペース名を受け取り、Slack Webhookなどに通知を送る処理を実装します。
この機能は、Kubernetesクラスターの監視と自動対応の基盤としてK9sを利用する可能性を示唆しています。

K9sのカスタマイズ

K9sはその高いカスタマイズ性も大きな特徴です。設定ファイルを編集することで、見た目、キーバインディング、エイリアス、プラグインなどを自分好みに調整できます。

K9sの設定ファイルは、デフォルトでは以下の場所に保存されます。

  • Linux / macOS: ~/.k9s/config.yaml
  • Windows: %USERPROFILE%\.k9s\config.yaml

この config.yaml がメインの設定ファイルですが、エイリアス (aliases.yaml)、プラグイン (plugin.yaml)、スキン (skin.yaml) など、機能を分割して個別のファイルに定義し、config.yaml から参照することも可能です。

設定ファイルを編集した後は、K9sを再起動するか、K9s内でコマンドラインモード(:)に入り reload と入力することで、設定が再読み込みされます。

設定ファイル (config.yaml) の主要な内容

config.yaml はYAML形式です。主要なセクションを説明します。

yaml
k9s:
refreshRate: 2 # リソースリストの更新間隔 (秒)
maxConnRetry: 5 # クラスター接続リトライ回数
headRoom: 0 # 上下のパディング
logBufferSize: 5000 # ログバッファサイズ (行)
logRequestSize: 200 # ログ取得時のデフォルト行数
currentContext: # 現在のコンテキスト (K9sが自動で設定)
currentCluster: # 現在のクラスター名 (K9sが自動で設定)
screenDumpDir: /tmp/k9s-screendumps # スクリーンショット保存ディレクトリ
# カスタマイズ設定
manualRefreshTime: 0 # 手動リフレッシュ間隔 (0で無効)
enableCPU: true # CPUメトリクス表示を有効化
enableMEM: true # Memoryメトリクス表示を有効化
enableDAL: true # DAL表示を有効化
# スキン設定 (直接定義するか、外部ファイルを指定)
skin:
name: "my-skin" # スキン名 (組み込み or 外部定義)
# colors: ... (直接色を定義する場合)
# プラグイン設定 (直接定義するか、外部ファイルを指定)
plugins:
# ... (プラグイン定義を直接書く場合)
# エイリアス設定 (直接定義するか、外部ファイルを指定)
aliases:
# ... (エイリアス定義を直接書く場合)
# キーバインディング設定 (直接定義するか、外部ファイルを指定)
keyMap:
# ... (キーバインディング定義を直接書く場合)

多くの設定項目がありますが、まずは refreshRate やメトリクス表示の有効/無効あたりから調整してみると良いでしょう。

キーバインディングのカスタマイズ

K9sの操作はキーボードショートカットに大きく依存しています。これらのキーバインディングは keyMap セクションでカスタマイズできます。デフォルトのバインディングを変更したり、新しい操作にキーを割り当てたりすることが可能です。

keyMap セクションは、ビューの種類ごとにキーバインディングを定義します。例えば global はどのビューでも有効なバインディング、pod はPodビューでのみ有効なバインディングです。

例: GlobalなEscapeキーの挙動を変更する
“`yaml

~/.k9s/config.yaml

k9s:
# …
keyMap:
global:
bindKeys:
– key: esc
description: “Quit K9s (override default)”
action: app.quit
# originalKey: esc # 元のバインディングを残す場合
“`
この例では、EscapeキーにK9sを終了するアクションを割り当てています。デフォルトではEscapeキーは多くの場面で「戻る」や「フィルタリング解除」などに使われます。

キーバインディングの定義では、以下の要素を指定します。
* key: 割り当てるキー(例: a, B, F2, enter, esc, space, delete, up, down, left, right, pgup, pgdn, home, end など)。修飾キー(Shift, Ctrl, Alt, Meta)と組み合わせる場合は Shift+A, Ctrl+C, Alt+F のように記述します。
* description: フッターに表示される説明。
* action: 実行するアクション。K9sが内部で定義している様々なアクション(例: app.quit, app.help, list.clearFilter, resource.delete, pod.logs, plugin, command など)を指定します。
* command, args: action: command の場合に実行する外部コマンド。
* plugin: action: plugin の場合に実行するプラグイン名。

全ての組み込みアクションやデフォルトのキーバインディングを知るには、K9sのヘルプ画面(? キーで表示)や公式ドキュメントを参照するのが最も確実です。

エイリアスの設定

前述のエイリアス機能の設定方法です。config.yamlaliases セクションで定義するか、aliases.yaml ファイルとして別途定義します。

例: aliases.yaml
“`yaml
aliases:
# リソースビューエイリアス
dep: deployments
st: statefulsets
cm: configmaps
sec: secrets

# コマンドエイリアス (通常はプラグインとして定義する方が柔軟ですが、シンプルなコマンドならここで定義も可能)
# viewall: ns all # これはプラグインで定義する方が良い例
“`

エイリアスは keyMapcommand アクション内で使用することもできます。

プラグインの定義と設定

前述のプラグイン機能の設定方法です。config.yamlplugins セクションで定義するか、plugin.yaml ファイルとして別途定義します。定義内容は前述の例を参照してください。

スキン / テーマの作成・適用

前述のスキン設定方法です。config.yamlskin セクションで直接定義するか、skin.yaml ファイルとして別途定義します。

skin.yaml の例:
yaml
k9s:
skin:
name: "custom-dark"
colors:
# Default colors
fg: 252 # White
bg: 235 # Black
# Border colors
border:
fg: 238
bg: 235
# Header colors
head:
fg: 255
bg: 27 # Blue
bold: true
underline: false
# Highlight colors
highlight:
fg: 255
bg: 237
# Label colors
label:
fg: 27 # Blue
bg: 235
bold: false
underline: false
# Table colors
table:
fg: 252
bg: 235
cursor:
fg: 235
bg: 27
header:
fg: 27
bg: 235
bold: true
underline: false
# ... その他多くの要素の色を定義可能

色の指定は、ターミナルがサポートするカラーコード(例: 256色パレットの番号)や、HEXコード(例: #RRGGBB)で行えます。非常に細かくカスタマイズできるため、時間をかければ自分だけのテーマを作成できます。

より高度なK9sの使い方

K9sは基本的なリソース操作だけでなく、さらに高度なシナリオにも対応できます。

複数のクラスター管理

開発、ステージング、プロダクションなど、複数のKubernetesクラスターを扱う環境では、クラスター間の切り替えが頻繁に発生します。K9sは、kubectl のconfigファイル (~/.kube/config) に定義された複数のコンテキストを自動的に認識し、Ctrl + T キーで簡単に切り替えられます。

それぞれのクラスターは、K9sの設定ファイル (~/.k9s/config.yaml) の clusters セクションで追加の設定を行うことも可能です。例えば、クラスターごとにデフォルトネームスペースを指定したり、エイリアスやプラグインの定義をオーバーライドしたりできます。

yaml
k9s:
# ...
clusters:
dev-cluster:
namespace: default # このクラスターではdefaultネームスペースをデフォルトに
view: pods # このクラスター起動時はPod一覧を表示
# aliases: # このクラスター専用のエイリアス定義
# ...
prod-cluster:
namespace: production # このクラスターではproductionネームスペースをデフォルトに
view: deployments # このクラスター起動時はDeployment一覧を表示
# aliases: # このクラスター専用のエイリアス定義
# ...

これにより、クラスターごとに最適な設定でK9sを起動・操作できるようになります。

カスタムリソース (CRD) の操作

Kubernetesエコシステムでは、多くのオペレーターや拡張機能がCustom Resource Definition (CRD) を定義し、独自のAPIオブジェクトを導入しています。K9sはこれらのCRDも認識し、表示・操作できます。

K9s起動中に、定義されているCRDを確認するには、コマンドラインモードで crds と入力します。CRD一覧が表示されるので、特定のCRDを選択すると、そのCRDによって作成されたカスタムリソースの一覧が表示されます。

例えば、Istioがインストールされているクラスターでは、gateways, virtualservices, destinationrules といったカスタムリソースが表示可能になります。これらのカスタムリソースに対しても、詳細表示(d)やYAML編集(e)といった基本的な操作が可能です。

自分で定義したCRDや、利用している特定のソフトウェア(例えば、Cert-Managerの certificatesissuers、Argo CDの applications など)が追加するカスタムリソースを、K9sから簡単に管理できます。

セキュリティ機能 (RBACとの連携)

K9s自身は特別な認証認可機構を持ちませんが、K9sがKubernetes APIと通信する際には、K9sを起動したユーザーが使用している kubectl のコンテキストに設定された認証情報(証明書、トークンなど)と、その認証情報に関連付けられたKubernetesのRBAC (Role-Based Access Control) 権限が適用されます。

つまり、K9sで可能な操作は、それを実行しているユーザーがKubernetes APIに対して実行を許可されている操作の範囲内に制限されます。例えば、あるユーザーが特定のネームスペースのPodを見る権限しか持っていなければ、K9sを使ってもそのネームスペースのPodしか見えず、他のネームスペースのリソースやクラスター全体のリソースを操作することはできません。

K9sをより安全に利用するためには、Kubernetesクラスター側で適切なRBAC設定を行うことが重要です。各ユーザーやサービスアカウントが必要最小限の権限だけを持つように構成することで、K9sを介した意図しない操作や悪意のある操作のリスクを低減できます。

トラブルシューティングへの活用

K9sはKubernetesクラスターで問題が発生した際の強力なトラブルシューティングツールとして活用できます。

  • Podの異常検出: Podリストで CrashLoopBackOff, Error, ImagePullBackOff といったステータスのPodを素早く見つけられます。
  • 原因の特定: 異常なPodを選択し、ログ(l キー)やイベント(e キー)を確認することで、エラーメッセージや関連するイベントから原因の手がかりを得られます。
  • リソース使用率の確認: NodeやPodのトップ表示(T キー)でリソース使用率を確認し、CPUやMemory不足が問題の原因でないか調査できます。
  • Pod内調査: シェル接続(s キー)してPod内部のファイルシステムやプロセスを確認し、より詳細なデバッグを行えます。
  • 関連リソースの確認: PodからReplicaSetやDeploymentへ、Serviceから関連Podへ、といったナビゲーションで、問題のあるコンポーネントがどのワークロードに属しているか、どのServiceで公開されているかなどを辿ることができます。
  • 定義の確認: 編集(e キー)機能でリソースのYAML定義を確認し、設定ミスがないかチェックできます。

これらの機能を組み合わせることで、kubectl コマンドを一つずつ実行するよりも遥かに効率的に、Kubernetesクラスター内の問題を診断し、解決に導くことができます。

K9sのメリット・デメリット 再確認

これまでにK9sの多くの機能を見てきましたが、ここでそのメリットとデメリットを整理しておきましょう。

メリット

  • 操作の圧倒的な迅速化: キーボードショートカットと直感的なナビゲーションにより、kubectl コマンド入力の手間が省け、日常的な操作が劇的に速くなります。
  • 視覚的な確認: リソースの状態や関連性が一覧表示されるため、クラスターの状況を素早く把握できます。色分けされたステータス表示は異常を即座に伝えます。
  • 学習コストの低減: kubectl の膨大なコマンド体系を全て覚える必要はありません。主要なリソースタイプ名といくつかの基本キー操作を覚えるだけで、多くの作業を行えます。
  • 多機能性: ログ追跡、シェル接続、ポートフォワーディング、リソース編集/削除、イベント表示など、運用に必要な機能が統合されています。
  • カスタマイズ性: キーバインディング、エイリアス、スキン、プラグインなどを自由に設定でき、個々のワークフローに合わせて最適化できます。
  • 軽量かつクロスプラットフォーム: TUIツールであるためリソース消費が少なく、macOS, Linux, Windowsなど様々な環境で快適に動作します。SSH接続したリモート環境でも利用可能です。
  • プラグインによる拡張性: 独自のコマンドやスクリプトをK9sに統合し、特定のタスクを自動化・効率化できます。

デメリット

  • 学習コスト (限定的): kubectl コマンド体系を覚えるよりは低いですが、K9s独自のキーボードショートカットやナビゲーション方法をある程度覚える必要があります。
  • 全てのkubectlコマンドを代替するわけではない: K9sは主要な操作をカバーしますが、kubectl の全てのコマンドや複雑なオプション(例: 特定条件でのフィルタリングを伴う一括操作など)を直接的に代替できるわけではありません。より高度な操作やバッチ処理には、やはり kubectl やスクリプトが必要になります。
  • 複雑な操作には不向きな場合も: YAMLマニフェストをゼロから作成したり、複雑なリソース定義を記述したりする作業は、外部のエディタやIDEの方が向いています。K9sの編集機能は既存リソースの微修正には便利ですが、大規模な編集には適していません。
  • ターミナルUIに依存: GUIベースのツール(Lens, Octantなど)と比較すると、グラフ表示やリッチな視覚表現の面で劣ります。

総合的に見ると、K9sはKubernetesの日常的な操作やデバッグにおいて、kubectl を補完し、圧倒的な効率化をもたらす強力なツールと言えます。そのメリットはデメリットを大きく上回るため、Kubernetesを頻繁に触る方にはぜひ導入をおすすめしたいツールです。

競合ツールとの比較 (簡易)

K9s以外にも、Kubernetesクラスターを操作・管理するためのツールはいくつか存在します。簡単に比較してみましょう。

  • kubectl: K9sを含むほとんどのツールが内部で利用している基本的なCLIツールです。最も柔軟で強力ですが、覚えることが多く、操作が煩雑になりがちです。K9sは kubectl の操作をより快適にするためのUIと言えます。
  • Kubernetes Dashboard: Webブラウザで動作する公式のGUIツールです。視覚的で分かりやすいですが、デプロイが必要で、アクセス設定(Service Account, RBACなど)がやや複雑な場合があります。リアルタイム性や操作の迅速さではK9sに劣る場合があります。
  • Lens: デスクトップアプリケーションとして動作するリッチなGUIツールです。複数のクラスター管理、リソースのグラフィカル表示、ログ・メトリクス表示、ターミナル機能などを備えており、非常に高機能です。K9sよりも多くのリソースを消費し、TUIツールではないためSSH接続先では使えません。機能が豊富すぎてややオーバーヘッドを感じるユーザーもいるかもしれません。
  • Octant: VMwareが開発していたWebベースのGUIツール(現在はCNCFプロジェクト)。開発者向けに特化しており、アプリケーションの構造理解に役立ちます。K9sと同様にローカルで起動して利用しますが、WebUIであるためターミナルとは別のウィンドウが必要になります。

K9sは、これらのツールの中で「ターミナル内での操作に特化し、キーボード主体で超高速な操作を実現する」という独自の立ち位置を確立しています。軽量さ、ターミナルとの親和性、操作の迅速さを重視するユーザーにとって、K9sは非常に魅力的な選択肢となります。GUIツールと組み合わせて使用するのも良いでしょう。

まとめ:K9sを日々のKubernetes操作に取り入れよう

この記事では、KubernetesのターミナルUIツールであるK9sについて、そのインストールから基本操作、便利な機能、カスタマイズ、そして高度な使い方まで、詳細に解説しました。

K9sは、kubectl コマンドラインツールでの作業に慣れているKubernetesユーザーにとって、日常的な操作を劇的に効率化する強力なツールです。Podの状態確認、ログ追跡、シェルアクセス、リソースの編集といった頻繁に行うタスクが、数回のキー操作で完了します。また、リソース間の関連性を視覚的に辿れるため、クラスターの構成を理解し、問題発生時の原因究明を迅速に行う助けとなります。

特に、複数のネームスペースやクラスターを切り替えながら作業することが多い方、あるいは、大量のリソースが稼働する環境で特定のPodやServiceを見つけ出すのに苦労している方にとって、K9sは手放せないツールとなるでしょう。

K9sの学習コストは低く、主要なキーボードショートカットとリソースタイプ名さえ覚えればすぐにその恩恵を受けられます。さらに、プラグインやエイリアス、キーバインディングのカスタマイズ機能を使えば、自分のワークフローに合わせてツールを最適化し、さらなる生産性向上を目指すことも可能です。

ぜひ、この記事を参考にK9sをインストールし、日々のKubernetes操作に取り入れてみてください。きっとその操作感と効率の良さに驚くはずです。「爆速Kubernetes操作」の世界へようこそ!

K9sの公式ドキュメント (https://k9scli.io/topics/overview/) も参照しながら、様々な機能を試してみてください。あなたのKubernetesライフが、より快適で効率的なものになることを願っています。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール