Skip to content

k8sを操作するVimプラグインk8s.nvimを作った

Noevimからk8sを操作するk8s.nvimを作ったので紹介する。

UIはこんな感じでfloat windowでキーマップを使ってリソースを閲覧、操作できる。

例えば:K8sPod一覧が表示され、ddescribeできたら<C-f>でフィルタ、pでポートフォワードできる。 操作感は完全にTUIツールそのものとなっている。

TUIならk9sでいいじゃんって言葉が聞こえてきそうだが、部分的にはそうだと思う。 しかし、自分は逆張りなところがあってk9sを使ったら負けだと思っているのと、k9sは自分のOSSではないので自分好みのUIや操作感ではないから自作することにした。

今ならAIを使えば昔よりもはるかに速く作れるし、実際に作れた。

そんなわけで、個自分的に推しポイントを書いておく

ポートフォワード

ServicePod一覧でpを押すとポートフォワードできる。 こんな感じでコンテナ側のポートを選択したあとホスト側のポートを入力する流れになっている。

Image from Gyazo

ポートフォワード一覧画面もあって、そこでDを押すと止まる。

Image from Gyazo

永続化はちょっと面倒そうなので実装していないため、Neovimを終了すると全部止まるようになっているので要注意。

フィルタリング

<C-f>Pod一覧などをフィルターリングできる。 さらに/で通常の検索もできる。

大枠絞り込んだあと、/で検索してカーソル移動できるので、高速に操作できる。

Image from Gyazo

Podへのアタッチとpodのログ

Pod一覧でeでアタッチできたり、lでログを見れたりする。 これらは別タブのターミナルで実行されるようなっているので、複数のpodにアタッチしたりログを見たりできる。

k9sでは複数のpodのログを同時に見れないので、これは便利なのではないだろうか。

キーマップの変更

こんな感じでユーザはキーマップを自由に変更できる。まぁプラグインなら当然ではあるが。 設定されたキーマップは?を押すとヘルプページにも表示される。

lua
{
  "skanehira/k8s.nvim",
  dependencies = { "MunifTanjim/nui.nvim" },
  opts = {
    keymaps = {
      -- Global keymaps (all views)
      global = {
        quit = { key = "Q", desc = "Hide" },
      },
      -- Pod list view
      pod_list = {
        describe = { key = "K", desc = "Describe" },
      },
      -- Deployment list view
      deployment_list = {
        scale = { key = "S", desc = "Scale" },
      },
    },
  },
}

Image from Gyazo

画面切り替え

<C-r>でリソースを選択して画面を切り替えることができるが、複数の画面を行き来することを想定して<C-h>で前の画面、<C-l>で次の画面を切り替える事ができる。

undoとredoと同じような機能と思ってもらえればイメージしやすいと思う。

たとえばPod画面からSecrets画面に遷移したあと、またPod画面に戻りたくなったとき<C-h>だけでいけるし、PodからSecretsに行きたいときは<C-l>でいける。

さいごに

基本的にドッグフーディングしながら改善していく予定だけど、もしNeovimでk8sを操作したい人がいたらぜひ試してほしい。

Released under the MIT License.