K8s LensにResource Map Extensionを入れてリソース関係を可視化する
Kubernetesのリソース(Deployment,Pod,Service,Ingress etc...)の状況をサクッと確認したいと思った時、皆さんはどのような方法を取るでしょうか。
私が思い当たる中では、次のような方法が考えられます[1]。
方法 | 製品例 | 備考 |
---|---|---|
kubectlで頑張る | - | 素で標準コマンドを叩くのではなく、いい感じのpluginを入れている人も多いかも |
Kubernetes Dashboardを入れる | - | クラスターに展開が必要、セキュリティ的な懸念有り |
GUIツールを使う | Octant,Lens | 各種クライアントOSに合わせてパッケージが用意されていることがほとんど |
TUIツールを使う | k9s,KDash | GoやRustで書かれたツールが多く、バイナリを配置するだけでインストールできるものが多い |
K8s関連製品の可視化機能の利用 | ArgoCD,Aqua Security,Skydive,SPEKT8 | 見せ方・どこまで見えるかなどは製品それぞれで大きく異なる |
エディターの連携機能を使う | VSCodeのKubernetes連携 |
素のkubectlだけで頑張るのはかなり骨が折れるため、特に検証時はそれ以外の方法を使ってらっしゃる方も多いかと思いますが、私は
- クラスターに何かをデプロイしたくない
- ローカルのkubeconfigといい感じにContextを同期したい
という思いから、プライベートではLensを利用しています。
ただ、LensではNodeやDeployment、Podといった各種リソースごとの状況をリスト表示できるものの、リソースを横断したトポロジーマップを表示する機能はネイティブでは備わっていませんでした。
調査してみると、同種のツールであるOctantではResource Viewerと呼ばれる機能によってリソースマップを表示することができるようでした。
そこで、Lensでも同じようなことができないかと思いさらに調査を進めると、Lens標準の拡張機能であるExtensionsの中にLens Resource MapというExtensionが存在することがわかりました。
Lens Resource Mapとは
Lens Resource Mapとは、K8sの関連リソースを一覧表示できるサードパーティのLens Extensionです。
といってもよくわからないかと思いますので、導入することでどういったものが表示できるかを先に図示します。
このように、DeploymentやPod、Serviceといった互いに紐付いているリソース群が一覧性が高い状態で表示されているのがわかります。
特徴的なのは、通常のリソースだけでなくHelmのReleaseといったようなものも対応している点です。
また、この図はリアルタイムにリソースの状況が反映されており、実際にリソースを更新すると瞬時に画面に反映されます。
次の節からは、導入方法と簡単な使い方の備忘録を紹介していきます。
今回説明しないこと
- K8sクラスターの構築方法
- Lensの導入方法
- インストールしていない方は、お使いのOSに合わせたパッケージを公式サイトからダウンロードしてインストールしてみてください
環境
- macOS: Big Sur 11.5.2
- Kubernetes: v1.19.1
- Kindで事前に構築済みのシングルノードクラスター
- Lens: 5.2.4-latest.20210923.1
- Lensから上記のクラスターに対して接続設定済み
今回はKindでクラスターを用意していますが、基本的にどのようなK8s環境でも利用できます。
導入
- 画面上部の
Lens
->Extensions
を開く
Command+Shift+E
のショートカットでも開けます。
- Extensions画面が開いたら、
Name or file path or URL
のボックスに@nevalla/kube-resource-map
と入力してInstall
を押す
Lens 5以降の手順となるため、Lens 4系をお使いの方はこちらを参考にしてください。
無事インストールされると、次のように表示されます。
ちなみに右のドットメニューから無効化・アンインストールも可能です。
使い方
- 接続済みのクラスターのメニューから
Resource Map
を選択する
- リソースを確認する
各種リソースにカーソルを当てると、Namespaceや作成時間、Selectorといったメタデータが表示されます。
Deploymentの場合
Podの場合
また、リソースをダブルクリックすると詳細情報が画面右部に表示され、Deploymentであればkubectl edit
、kubectl scale
、kubectl rollout restart
相当の処理をメニューから行うこともできます。
- Namespaceを切り替える
デフォルトではdefault
Namespace内のリソースが表示されていますが、以下のメニューから切り替えることが可能です。
最後に
このように、LensにResource Map Extension
を導入することで、現在のクラスター内のリソース関係を簡単に可視化できることが分かりました。
上記のようにExtension自体は非常に簡単にインストールできるので、Lensをお使いの方は是非触ってみてください。
また、個人的にここが改善されるといいな、と思ったのは次の点です。
- CRDの対応
- 作者によると、ロードマップには入っているようです
- https://github.com/nevalla/lens-resource-map-extension/issues/3#issuecomment-829474287
- 中間リソースの表示
- Deploymentの場合は、PodだけではなくReplicaSetも表示してほしい
- 状態遷移時の表示
- リソースの状態遷移時の表示が少し分かりにくいので、どのリソースに更新がかかっているか分かりやすくして欲しい
最後に、公式のリポジトリに他のExtension含めてリストが公開されていますので、気になった他のExtensionがあったら触ってみても面白いかもしれません。
-
もし他に良い方法があったらコメントなどで教えてください ↩︎
Discussion