私が仕事で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を打ち込むこと。
:リソース namespace名 /検索文字
で、さらに特定の文字で検索した状態にできます。
:リソース namespace名 @context名
で、コンテキストと組み合わせて指定することも可能です。
ここまでやることはあまりないと思いますが、
:リソース namespace名 /検索文字 @context名
と打ち込むことも可能です。
特定リソースをすべて表示する
allを指定することですべてのnamespaceの特定のリソースを表示することができます。
例えば、クラスタ上に存在するすべてのPodを表示する場合は:po allと入力します。
リソース名わかるけどnamespaceがわからない場合などに/検索文字と組み合わせてよく使います。
異常なリソースだけを表示する
ctrl-zで異常なリソースのみの表示に切り替えることができます。
再度ctrl-zで通常の表示に戻ります。
:po allですべてのPodを表示して、ctrl-zで、クラスタ全体で異常なPodを瞬時に確認することができます。
コンテキストを切り替える
:ctxでコンテキスト一覧を表示して、選択するでも良いですが
:ctx コンテキスト名といった具合に、コンテキスト名を一緒に入力すると一手でコンテキストを切り替えられます。
リソース名をクリップボードにコピーする
cでクリップボードにリソース名をコピーできます。
わざわざ、マウスで選択してコピーする必要はありません。
リソースのnamespaceをクリップボードにコピーする
nで選択したリソースのnamespace名をクリップボードにコピーできます。
リソースをソートする
shiftと組み合わせることでリソースを色々な要素でソートできます。
大抵の場合以下の3パターンを覚えておけばOKだと思います。
上記外は、:?でヘルプ画面を表示して確認してください。
PodがスケジュールされているNodeを見る
Podの異常を調査しているときに、そのPodがスケジュールされているNodeの情報を調べるケースはよくあると思います。
対象のPodを選択した状態でoを打ち込むとそのPodがスケジュールされているNodeのみが表示された画面に遷移できます。
:nodeでNode一覧を選択し、Node名で検索するよりもこちらの方が早いです。
ownerReferenceのリソースにジャンプする
Podの異常を検知して、そのPodに紐づくDeploymentの内容を確認したいとなった場合、どうしますか?Deploymentを表示するようにして、そこから検索文字で絞り込みますか?
そんな時は、shift-jで選択したリソースのownerReferenceを辿ることができます。
対象となるPodを選択してshift-jでReplicasetにジャンプ
さらにshift-jでDeploymentにジャンプできます。
他にも、JobからCronJobに遡る時にも利用できますね。
CronJobをすぐに実行する
CronJobを選択し、tでtriggerすることができます。
作成されるJob名は、cronjob名-manual-ランダム文字列になります。
CronJobをsuspendする
任意のCronJobを選択しsでsuspendをtrueに切り替えることができます。
suspendがtrueなCronJobの場合、sを押すとfalseに切り替えます。
Logをコピペしやすくする
k9sでログを表示して、そのログをコピペしてどこかに貼り付けることはよくあります。
k9sで表示するログは、枠で囲われているので素直にログをマウスで選択しようとするとその枠線まで選択してしまい余計な記号が入り込んでしまいます。
fで、フルスクリーンでログを表示することができます。フルスクリーン状態では上記の枠線が取り除かれるため、矩形選択をせずともログを選択しやすくなります。
ちなみに、ログ全体をコピーしたい場合は、cを押すと、すべてのログをクリップボードにコピーすることができます。
特定のConfigMap/Secret/PVCを利用しているPodを見つける
:cmで対象となるConfigMapを選択してuで、そのConfigMapを利用しているPodを見つけることができます。
ConfigMapだけでなく、SecretやPersistentVolumeClaimでもuは利用可能です。
Secertの内容を確認する
Secretをの中身を確認する場合は、describeした状態でxを押すことで、 Base64デコードした状態の内容を確認することができます。
わざわざ文字列をコピーしてきて、手元でBase64デコードして内容を確認する手間が省けますね。
表示している情報を保存する
ctrl-sで表示している情報をcsv形式で保存できます。
保存したファイルは:sdで確認できます。
:sdでファイルの一覧が表示されるので、ファイルを選択することで中身をかくにんすることができます。
k9sのUIの崩れを直す
皆さんのk9sのUIがこんな感じで崩れていることないですか?
原因はお使いのPCのlocaleの設定です。
LC_CTYPE="ja_JP.UTF-8"に設定されていると、表示が崩れます。
表示が崩れていても、操作に大きな支障はありませんが、スタイリッシュな見た目で操作したい場合は、LC_CTYPE="en_US.UTF-8"などに設定してk9sを利用しましょう。
おまけ
使う機会はほとんどないですが、こんな機能も実はありますという紹介です。
コンテナからファイルをダウンロードする
Pod一覧から任意のPodを選択し、tを押すと以下のダイアログが表示されます。
Fromにダウンロードしたいコンテナ上のファイルのパス
Toにローカルのファイルパスを入力することでファイルのダウンロードすることができます。
また、ローカルからPodのコンテナにファイルをアップロードすることも可能です。
不要なPodを一括で削除する
CompletedやerrorなstatusのPodを一括削除するのがz(Sanitize)です。
Pod一覧でzを押し、表示されるダイアログに「Yes Please!」と打ち込むと発動します。
特定のnamespaceのPod一覧画面で実行した時は、そのnamespaceのPodのみが対象になります。
:po allでPodを表示している場合は、すべてのnamespaceのPodが対象になります。
牛にしゃべらせる
:cow xxx
で入力した文字列を牛がしゃべります。
以上です。
今回の記事を通して、少しでも皆さんのお役に立てれば幸いです。






































