🔍

K8s LensにResource Map Extensionを入れてリソース関係を可視化する

2021/09/26に公開

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と呼ばれる機能によってリソースマップを表示することができるようでした。

https://www.bestdevops.com/octant-a-local-and-real-time-dashboard-for-kubernetes-workloads/

そこで、Lensでも同じようなことができないかと思いさらに調査を進めると、Lens標準の拡張機能であるExtensionsの中にLens Resource MapというExtensionが存在することがわかりました。

Lens Resource Mapとは

https://github.com/nevalla/lens-resource-map-extension

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 editkubectl scalekubectl rollout restart相当の処理をメニューから行うこともできます。

  • Namespaceを切り替える

デフォルトではdefault Namespace内のリソースが表示されていますが、以下のメニューから切り替えることが可能です。

最後に

このように、LensにResource Map Extensionを導入することで、現在のクラスター内のリソース関係を簡単に可視化できることが分かりました。
上記のようにExtension自体は非常に簡単にインストールできるので、Lensをお使いの方は是非触ってみてください。

また、個人的にここが改善されるといいな、と思ったのは次の点です。

  • CRDの対応
  • 中間リソースの表示
    • Deploymentの場合は、PodだけではなくReplicaSetも表示してほしい
  • 状態遷移時の表示
    • リソースの状態遷移時の表示が少し分かりにくいので、どのリソースに更新がかかっているか分かりやすくして欲しい

最後に、公式のリポジトリに他のExtension含めてリストが公開されていますので、気になった他のExtensionがあったら触ってみても面白いかもしれません。

https://github.com/lensapp/lens-extensions

脚注
  1. もし他に良い方法があったらコメントなどで教えてください ↩︎

Discussion