Kubernetesを操作するターミナル用ツール、K9sとKDashを紹介
Kubernetesは複数のノードに展開されるKubelet配下のPodをAPI Serverを経由で実行するための仕組みだが、操作を行うためにはKubectlというコマンドラインツールを使う。Red Hatが推進するOpenShiftなどもocコマンドを使って操作するなど、いわゆるミニマムな思想でターミナルの操作さえできれば一通りの運用管理は可能となっている。
しかし毎回コマンドを打つという操作にはミスがつきものだし、一覧性が極端に悪いのは自明だろう。そこで今回はターミナルから操作するキャラクターユーザーインターフェースであるK9sというツールを紹介したい。またK9sとほぼ同じ機能を持つKDashというRustで開発された新しいツールにも触れたい。
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/
コマンドラインから起動するツールであるということでコマンドに引数を与えて環境やバージョンなどを確認することが可能だ。
ここからはデモを交えて紹介を行っている。まずここではサービスの一覧が表示されている。CLIのツールらしくスラッシュやエンターキー、ESCキーなどでコマンド入力、詳細表示、上のレベルに戻るなどの操作が行えるようになっている。Kubernetesの操作対象となるネームスペース、サービス、Podなどを一覧表示から選択して詳細を表示、また編集や削除が可能になっている。
次の操作ではMinikube上に展開されたPodを確認している。ここではサービスメッシュのLinkerdも実行されている。
Podに付与されたラベルによるフィルタリングも可能だ。この例では「version=v2」というラベルを持っているPodをフィルターしている。
またPodの中でのシェルコマンドの実行や設定の編集なども可能だ。
さらにログも確認できるなど、デベロッパーやクラスターの運用担当者が欲しがる機能が用意されていることがわかる。ここまではkubectlでもできることをなぞった説明になっているが、ここからK9sの特徴的な機能であるPulse、Popeye、そしてSanitizerの説明を行った。
Pulse、Popeye、Sanitizer
Pulseはクラスターの実行状況を確認するためのダッシュボード、Popeyeはリソースの依存関係を視るためのRead-onlyのツール、そしてSanitizerはその構成上の間違いやリスクを洗い出すためのツールという位置付けだ。
実際にはPopeyeの裏でSanitizerが実行されているということだろう。エラーやウォーニングが一覧表示され、それをドリルダウンすると要素ごとにSanitizerからのメッセージが表示されるという仕組みだと思われる。
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はシンプルなターミナルベースのダッシュボードであり、Kubernetesのリソースがどれだけ使われているのかなどをCLIで表示するためのツールである。
前段としてRustの紹介、主にGoで書かれているKubernetesの上でRustを使うことの意義などを解説した後で、KDashの紹介を行っている。
このスライドでも明確に語られているように、KubernetesのCLIツールとしてK9sが存在していることを承知の上で敢えて開発を行った背景には、Kubernetesのエコシステムの中でRustを使ってどれだけ快適に開発できるのかを確認したかったというのが大きな理由だという。すでに存在するツールの機能を参考にしながら、Rustでいわば「車輪の再発明」を行っていることになるが、RustによるPoC(Proof of Concept)が目的であれば、最終的な成果物における価値を評価するのは作者の意図からは外れると言える。
ただRustを評価する上で抽象化についてコストがかからない、つまりコードをさまざまな形で記述したとしても演算結果は変わらないという点を発見したというのがこのスライドでのポイントだ。Javaのベテランデベロッパーらしく、ここで階乗を行うコードをループで回す方式、再帰的な方式、関数的プログラミングによる方式の3つを採用してJavaとRustでベンチマークを行っている。それによればJavaは方式によって性能にバラツキが発生したが、Rustでは書き方に寄らず性能は常に一定であり、プログラムの書き方が変わったとしても生成されるコードが一定の形式になるというRustコンパイラーの優秀さを実証した形になった。
これに関連してハイレベルなプログラミング言語では安全性、処理のスピード、そして抽象化はトレードオフであり、どれかを犠牲にしなければいけないが、Rustはこの3つを兼ね備えた言語であると説明した。ひとつだけ難点があるとすれば、Rustを理解して使いこなすまでの学習コストであるというのがこのスライドの要点となる。
最後にパフォーマンスとメモリーやエネルギーの効率性などの観点でプログラミング言語を調査したリサーチにおいても、Rustは高い結果を出していることを紹介した。
リサーチのソース(PDF):Energy Efficiency across Programming Languages
Kubernetesのエコシステムは大きなところで言えば、パブリッククラウドが提供するマネージドのKubernetes、さらに多数の商用サービスを展開するオブザーバービリティやセキュリティのソフトウェアやサービス、CI/CDのためのツールやサービスというところが目立っている。だが、K9sやKDashのような足らない部分の小さな穴を埋めるようなツールはこれからも出てくるだろう。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Rustのエコシステムの拡がりを感じるデスクトップアプリのためのツールキットTauriを紹介
- 「TAURI」をはじめる前に -「Rust」の基礎と開発環境の構築
- KubernetesのマニフェストをMagnumで実行する
- All Things OpenからFermyonTechのMatt Butcher氏のセッションを紹介
- RustとWASMで開発されKubernetesで実装されたデータストリームシステムFluvioを紹介
- Rustで書かれたKubernetesのためのWASM実行環境Krustletとは?
- Kubernetesアプリケーションのモニタリングことはじめ
- サービスメッシュのLinkerd 2.9を紹介。EWMA実装のロードバランサー機能とは
- Oracle Cloud Hangout Cafe Season5 #3「Kubernetes のセキュリティ」(2022年3月9日開催)
- CNDT2021、クラウドネイティブなシステムにおけるデバッグ手法を紹介