Kubernetesを操作するターミナル用ツール、K9sとKDashを紹介

2022年8月16日(火)
松下 康之 - Yasuyuki Matsushita
Kubernetesの操作をコマンドラインではなくターミナルのCUIで行うツール、K9sとK9sに影響を受けてRustで書かれたKDashを紹介。

Kubernetesは複数のノードに展開されるKubelet配下のPodをAPI Serverを経由で実行するための仕組みだが、操作を行うためにはKubectlというコマンドラインツールを使う。Red Hatが推進するOpenShiftなどもocコマンドを使って操作するなど、いわゆるミニマムな思想でターミナルの操作さえできれば一通りの運用管理は可能となっている。

しかし毎回コマンドを打つという操作にはミスがつきものだし、一覧性が極端に悪いのは自明だろう。そこで今回はターミナルから操作するキャラクターユーザーインターフェースであるK9sというツールを紹介したい。またK9sとほぼ同じ機能を持つKDashというRustで開発された新しいツールにも触れたい。

K9sを紹介する動画

K9sを紹介する動画

K9s

これはTech Primersというサイトが公開している13分程度の紹介動画だ。タイトルは「K9s usage and features walkthrough | Popeye Sanitizer | Productivity | Kubernetes Primer」とやや長めだが、K9sを使いながら機能を解説する内容となっており、短いながら要点を押さえた動画だ。

K9sの動画:@<href>https://www.youtube.com/watch?v=jovHiTobzKQ,K9s usage and features walkthrough | Popeye Sanitizer | Productivity | Kubernetes Primer}

なおK9sの公式サイトは以下から参照されたい。

K9s公式サイト:https://k9scli.io/

コマンドラインから起動するツールであるということでコマンドに引数を与えて環境やバージョンなどを確認することが可能だ。

K9s自体の情報や環境を表示

K9s自体の情報や環境を表示

ここからはデモを交えて紹介を行っている。まずここではサービスの一覧が表示されている。CLIのツールらしくスラッシュやエンターキー、ESCキーなどでコマンド入力、詳細表示、上のレベルに戻るなどの操作が行えるようになっている。Kubernetesの操作対象となるネームスペース、サービス、Podなどを一覧表示から選択して詳細を表示、また編集や削除が可能になっている。

サービスが一覧表示され、IPやPortも確認できる

サービスが一覧表示され、IPやPortも確認できる

次の操作ではMinikube上に展開されたPodを確認している。ここではサービスメッシュのLinkerdも実行されている。

Podを表示

Podを表示

Podに付与されたラベルによるフィルタリングも可能だ。この例では「version=v2」というラベルを持っているPodをフィルターしている。

ラベルによるフィルタリングも

ラベルによるフィルタリングも

またPodの中でのシェルコマンドの実行や設定の編集なども可能だ。

ネームスペースの一覧表示

ネームスペースの一覧表示

さらにログも確認できるなど、デベロッパーやクラスターの運用担当者が欲しがる機能が用意されていることがわかる。ここまではkubectlでもできることをなぞった説明になっているが、ここからK9sの特徴的な機能であるPulse、Popeye、そしてSanitizerの説明を行った。

Pulse、Popeye、Sanitizer

クラスターのダッシュボードを表示するPulse

クラスターのダッシュボードを表示するPulse

Pulseはクラスターの実行状況を確認するためのダッシュボード、Popeyeはリソースの依存関係を視るためのRead-onlyのツール、そしてSanitizerはその構成上の間違いやリスクを洗い出すためのツールという位置付けだ。

Popeyeでリソースの状況を表示

Popeyeでリソースの状況を表示

実際にはPopeyeの裏でSanitizerが実行されているということだろう。エラーやウォーニングが一覧表示され、それをドリルダウンすると要素ごとにSanitizerからのメッセージが表示されるという仕組みだと思われる。

SanitizerでPodの中の問題点を指摘

SanitizerでPodの中の問題点を指摘

KDash

続いてRustで書かれたKDashに関する動画を簡単に紹介しよう。この動画は「Rust for the Kubernetes Ecosystem - Deepu K Sasidharan - Rust Linz, April 2022」というタイトルで、RustのコミュニティミーティングであるRust Linzの2022年4月のセッションのひとつだ。セッションを担当したのはJava関連のコミュニティで活発に活動しているDeepu K Sasidharan氏だ。Sasidharan氏はOktaのデベロッパーアドボケイトとして活動しているエンジニアだ。

KDashの動画:Rust for the Kubernetes Ecosystem - Deepu K Sasidharan - Rust Linz, April 2022

KDashのGitHubページ:https://github.com/kdash-rs/kdash

タイトルが示している通り、メモリーセーフなプログラミング言語RustがKubernetesのエコシステムの中でどのように位置付けられているのかを解説する中で、実際にRustを使ってKubernetesのためのプログラムであるKDashを開発したのでそれを紹介するという内容になっている。

KDashの紹介

KDashの紹介

KDashはシンプルなターミナルベースのダッシュボードであり、Kubernetesのリソースがどれだけ使われているのかなどをCLIで表示するためのツールである。

ここでは各リソースのCPU使用率が表示されている

ここでは各リソースのCPU使用率が表示されている

前段としてRustの紹介、主にGoで書かれているKubernetesの上でRustを使うことの意義などを解説した後で、KDashの紹介を行っている。

KDashを開発しようと思った背景

KDashを開発しようと思った背景

このスライドでも明確に語られているように、KubernetesのCLIツールとしてK9sが存在していることを承知の上で敢えて開発を行った背景には、Kubernetesのエコシステムの中でRustを使ってどれだけ快適に開発できるのかを確認したかったというのが大きな理由だという。すでに存在するツールの機能を参考にしながら、Rustでいわば「車輪の再発明」を行っていることになるが、RustによるPoC(Proof of Concept)が目的であれば、最終的な成果物における価値を評価するのは作者の意図からは外れると言える。

Javaと比べてプログラミングモデルを変えても性能は変わらない

Javaと比べてプログラミングモデルを変えても性能は変わらない

ただRustを評価する上で抽象化についてコストがかからない、つまりコードをさまざまな形で記述したとしても演算結果は変わらないという点を発見したというのがこのスライドでのポイントだ。Javaのベテランデベロッパーらしく、ここで階乗を行うコードをループで回す方式、再帰的な方式、関数的プログラミングによる方式の3つを採用してJavaとRustでベンチマークを行っている。それによればJavaは方式によって性能にバラツキが発生したが、Rustでは書き方に寄らず性能は常に一定であり、プログラムの書き方が変わったとしても生成されるコードが一定の形式になるというRustコンパイラーの優秀さを実証した形になった。

これに関連してハイレベルなプログラミング言語では安全性、処理のスピード、そして抽象化はトレードオフであり、どれかを犠牲にしなければいけないが、Rustはこの3つを兼ね備えた言語であると説明した。ひとつだけ難点があるとすれば、Rustを理解して使いこなすまでの学習コストであるというのがこのスライドの要点となる。

安全、スピード、抽象化の3つを同時に備えたRust

安全、スピード、抽象化の3つを同時に備えたRust

最後にパフォーマンスとメモリーやエネルギーの効率性などの観点でプログラミング言語を調査したリサーチにおいても、Rustは高い結果を出していることを紹介した。

性能、メモリー使用率、コードの大きさなどでC言語にも匹敵するRust

性能、メモリー使用率、コードの大きさなどでC言語にも匹敵するRust

リサーチのソース(PDF):Energy Efficiency across Programming Languages

Kubernetesのエコシステムは大きなところで言えば、パブリッククラウドが提供するマネージドのKubernetes、さらに多数の商用サービスを展開するオブザーバービリティやセキュリティのソフトウェアやサービス、CI/CDのためのツールやサービスというところが目立っている。だが、K9sやKDashのような足らない部分の小さな穴を埋めるようなツールはこれからも出てくるだろう。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

OSSイベント

Open Source Summit Japan 2022開催。車載からストレージ、Kubernetesまで幅広いトピックをカバー

2023/4/26
2022年12月、横浜でOpen Source Summit Japanが開催された。リアルでは約500名が参加し、車載システムからSBoM、AIまで広範なセッションが行われた。
開発言語イベント

WASM Meetup@ByteDanceで垣間見たWebAssemblyの静かな広がり

2023/4/11
ByteDanceのシリコンバレーオフィスで開催されたWebAssemblyのミートアップを紹介。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています