16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

意外に知られていないかもしれないk9sの小技集

Last updated at Posted at 2024-12-10

私が仕事でKubernetesの運用業務に携わり、k9sを使うようになって4年が経ちました。

Kubernetesクラスタを運用するにあたり、私にとってk9sはなくてはならない存在ですが、長年利用していく中で実はこんなこともできたんだ、という発見がいくつもあります。

本エントリーでは、意外に知られていなさそうなk9sの機能、小技などを紹介させていただきます。

k9s自体の説明や、基本操作に関しては以前書いた記事を参考にしてください。

使用しているk9sのバージョンは、執筆時点で最新の0.32.7になります。

お使いのバージョンによっては、今回紹介する機能やオペレーションに対応していない可能性もありますのでご注意ください。

紹介する小技の早見表

まず、最初に本記事で紹介する内容のまとめを以下に書いておきます。
詳しく知りたい方は、後続の内容をご確認ください。

やりたいこと 操作
特定のnamespaceの特定のリソースを表示する :リソース namespace名
特定のリソースをすべて表示する :リソース all
異常なリソースだけを表示する ctrl-z
コンテキストを切り替える :ctx コンテキスト名
リソース名をクリップボードにコピーする c
リソースのnamespaceをクリップボードにコピーする n
リソースをソートする shift-c shift-m shift-a
PodがスケジュールされているNodeを見る o
ownerReferenceのリソースにジャンプする shift-j
CronJobをすぐに実行する t
CronJobをsuspendする s
Logをコピペしやすくする f
特定のConfigMap/Secret/PVCを利用しているPodを見つける u
Secertの内容を確認する x
表示している情報を保存する ctrl-s
k9sのUIの崩れを直す export LC_CTYPE="en_US.UTF-8"

特定のnamespaceの特定のリソースを表示する

:リソース namespace名で可能です。

以下のようにリソースはなんでもOK。

:dp namespace名
:sts namespace名
:svc namespace名

重要なのは、リソースの後に限定したいnamespaceを打ち込むこと。

スクリーンショット 2024-12-09 0.34.22.png

:リソース namespace名 /検索文字
で、さらに特定の文字で検索した状態にできます。

スクリーンショット 2024-12-09 0.36.03.png

:リソース namespace名 @context名
で、コンテキストと組み合わせて指定することも可能です。

スクリーンショット 2024-12-09 0.40.15.png

ここまでやることはあまりないと思いますが、
:リソース namespace名 /検索文字 @context名
と打ち込むことも可能です。

スクリーンショット 2024-12-09 0.37.05.png

特定リソースをすべて表示する

allを指定することですべてのnamespaceの特定のリソースを表示することができます。

例えば、クラスタ上に存在するすべてのPodを表示する場合は:po allと入力します。

スクリーンショット 2024-12-09 0.55.06.png

リソース名わかるけどnamespaceがわからない場合などに/検索文字と組み合わせてよく使います。

異常なリソースだけを表示する

ctrl-zで異常なリソースのみの表示に切り替えることができます。
再度ctrl-zで通常の表示に戻ります。

スクリーンショット 2024-12-09 1.04.22.png

スクリーンショット 2024-12-09 1.04.34.png

:po allですべてのPodを表示して、ctrl-zで、クラスタ全体で異常なPodを瞬時に確認することができます。

コンテキストを切り替える

:ctxでコンテキスト一覧を表示して、選択するでも良いですが

スクリーンショット 2024-12-08 23.56.13.png

:ctx コンテキスト名といった具合に、コンテキスト名を一緒に入力すると一手でコンテキストを切り替えられます。

リソース名をクリップボードにコピーする

cでクリップボードにリソース名をコピーできます。

スクリーンショット 2024-12-09 0.42.48.png

わざわざ、マウスで選択してコピーする必要はありません。

リソースのnamespaceをクリップボードにコピーする

nで選択したリソースのnamespace名をクリップボードにコピーできます。

スクリーンショット 2024-12-09 0.45.17.png

リソースをソートする

shiftと組み合わせることでリソースを色々な要素でソートできます。
大抵の場合以下の3パターンを覚えておけばOKだと思います。

shift-c CPU使用量でソート
スクリーンショット 2024-12-09 1.45.27.png

shift-m Memory使用量でソート
スクリーンショット 2024-12-09 1.45.40.png

shift-a Ageでソート
スクリーンショット 2024-12-09 1.45.53.png

上記外は、:?でヘルプ画面を表示して確認してください。

PodがスケジュールされているNodeを見る

Podの異常を調査しているときに、そのPodがスケジュールされているNodeの情報を調べるケースはよくあると思います。

対象のPodを選択した状態でoを打ち込むとそのPodがスケジュールされているNodeのみが表示された画面に遷移できます。

スクリーンショット 2024-12-09 0.51.13.png

スクリーンショット 2024-12-09 0.51.26.png

:nodeでNode一覧を選択し、Node名で検索するよりもこちらの方が早いです。

ownerReferenceのリソースにジャンプする

Podの異常を検知して、そのPodに紐づくDeploymentの内容を確認したいとなった場合、どうしますか?Deploymentを表示するようにして、そこから検索文字で絞り込みますか?

そんな時は、shift-jで選択したリソースのownerReferenceを辿ることができます。

対象となるPodを選択してshift-jでReplicasetにジャンプ
さらにshift-jでDeploymentにジャンプできます。

スクリーンショット 2024-12-09 1.13.14.png

スクリーンショット 2024-12-09 1.13.26.png

スクリーンショット 2024-12-09 1.13.38.png

他にも、JobからCronJobに遡る時にも利用できますね。

CronJobをすぐに実行する

CronJobを選択し、tでtriggerすることができます。

スクリーンショット 2024-12-09 22.38.11.png

作成されるJob名は、cronjob名-manual-ランダム文字列になります。

スクリーンショット 2024-12-09 22.39.29.png

CronJobをsuspendする

任意のCronJobを選択しsでsuspendをtrueに切り替えることができます。

スクリーンショット 2024-12-09 22.33.54.png

suspendがtrueなCronJobの場合、sを押すとfalseに切り替えます。

スクリーンショット 2024-12-09 22.34.44.png

Logをコピペしやすくする

k9sでログを表示して、そのログをコピペしてどこかに貼り付けることはよくあります。
k9sで表示するログは、枠で囲われているので素直にログをマウスで選択しようとするとその枠線まで選択してしまい余計な記号が入り込んでしまいます。

スクリーンショット 2024-12-09 1.18.38.png

fで、フルスクリーンでログを表示することができます。フルスクリーン状態では上記の枠線が取り除かれるため、矩形選択をせずともログを選択しやすくなります。

スクリーンショット 2024-12-09 1.19.00.png

ちなみに、ログ全体をコピーしたい場合は、cを押すと、すべてのログをクリップボードにコピーすることができます。

特定のConfigMap/Secret/PVCを利用しているPodを見つける

:cmで対象となるConfigMapを選択してuで、そのConfigMapを利用しているPodを見つけることができます。

スクリーンショット 2024-12-09 13.14.58.png

スクリーンショット 2024-12-09 13.15.33.png

ConfigMapだけでなく、SecretやPersistentVolumeClaimでもuは利用可能です。

Secertの内容を確認する

Secretをの中身を確認する場合は、describeした状態でxを押すことで、 Base64デコードした状態の内容を確認することができます。

スクリーンショット 2024-12-09 22.04.25.png

スクリーンショット 2024-12-09 22.04.38.png

スクリーンショット 2024-12-09 22.04.50.png

わざわざ文字列をコピーしてきて、手元でBase64デコードして内容を確認する手間が省けますね。

表示している情報を保存する

ctrl-sで表示している情報をcsv形式で保存できます。

スクリーンショット 2024-12-09 13.20.57.png

保存したファイルは:sdで確認できます。

スクリーンショット 2024-12-09 13.17.51.png

:sdでファイルの一覧が表示されるので、ファイルを選択することで中身をかくにんすることができます。

スクリーンショット 2024-12-09 13.20.15.png

k9sのUIの崩れを直す

皆さんのk9sのUIがこんな感じで崩れていることないですか?

スクリーンショット 2024-12-08 23.58.38.png

原因はお使いのPCのlocaleの設定です。
LC_CTYPE="ja_JP.UTF-8"に設定されていると、表示が崩れます。

表示が崩れていても、操作に大きな支障はありませんが、スタイリッシュな見た目で操作したい場合は、LC_CTYPE="en_US.UTF-8"などに設定してk9sを利用しましょう。

スクリーンショット 2024-12-08 23.59.27.png

おまけ

使う機会はほとんどないですが、こんな機能も実はありますという紹介です。

コンテナからファイルをダウンロードする

Pod一覧から任意のPodを選択し、tを押すと以下のダイアログが表示されます。

スクリーンショット 2024-12-09 21.57.42.png

Fromにダウンロードしたいコンテナ上のファイルのパス
Toにローカルのファイルパスを入力することでファイルのダウンロードすることができます。

また、ローカルからPodのコンテナにファイルをアップロードすることも可能です。

スクリーンショット 2024-12-09 21.59.38.png

不要なPodを一括で削除する

CompletedやerrorなstatusのPodを一括削除するのがz(Sanitize)です。

Pod一覧でzを押し、表示されるダイアログに「Yes Please!」と打ち込むと発動します。

スクリーンショット 2024-12-09 22.19.33.png

スクリーンショット 2024-12-09 22.20.07.png

特定のnamespaceのPod一覧画面で実行した時は、そのnamespaceのPodのみが対象になります。

:po allでPodを表示している場合は、すべてのnamespaceのPodが対象になります。

牛にしゃべらせる

:cow xxx

で入力した文字列を牛がしゃべります。

スクリーンショット 2024-12-09 23.14.10.png

以上です。

今回の記事を通して、少しでも皆さんのお役に立てれば幸いです。

16
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?