Processes kubectl outputs to enable vim-like navigation in a buffer for your cluster.
Navigate your cluster in a buffer, using hierarchy where possible (backspace for up, enter for down) e.g. root -> deplyoment -> pod -> container
Exec into containers
In the pod view, select a pod by pressing<cr>
and then again <cr>
on the container you want to exec into
- kubectl
- curl
- neovim >= 0.10
Install the plugin with your preferred package manager:
return {
{
"ramilito/kubectl.nvim",
config = function()
require("kubectl").setup()
end,
},
}
We expose open, close and toggle to bind against:
vim.keymap.set("n", "<leader>k", '<cmd>lua require("kubectl").toggle()<cr>', { noremap = true, silent = true })
You can also override the plugin's keymaps using the <Plug>
mappings:
-- default mappings
vim.keymap.set("n", "<Plug>(kubectl.alias_view)", "<C-a>")
vim.keymap.set("n", "<Plug>(kubectl.browse)", "gx")
vim.keymap.set("n", "<Plug>(kubectl.cordon)", "gC")
vim.keymap.set("n", "<Plug>(kubectl.create_job)", "gc")
vim.keymap.set("n", "<Plug>(kubectl.delete)", "gD")
vim.keymap.set("n", "<Plug>(kubectl.describe)", "gd")
vim.keymap.set("n", "<Plug>(kubectl.drain)", "gR")
vim.keymap.set("n", "<Plug>(kubectl.edit)", "ge")
vim.keymap.set("v", "<Plug>(kubectl.filter_term)", "<C-f>")
vim.keymap.set("n", "<Plug>(kubectl.filter_view)", "<C-f>")
vim.keymap.set("n", "<Plug>(kubectl.follow)", "f")
vim.keymap.set("n", "<Plug>(kubectl.go_up)", "<BS>")
vim.keymap.set("n", "<Plug>(kubectl.help)", "g?")
vim.keymap.set("n", "<Plug>(kubectl.history)", "gh")
vim.keymap.set("n", "<Plug>(kubectl.kill)", "gk")
vim.keymap.set("n", "<Plug>(kubectl.logs)", "gl")
vim.keymap.set("n", "<Plug>(kubectl.namespace_view)", "<C-n>")
vim.keymap.set("n", "<Plug>(kubectl.portforward)", "gp")
vim.keymap.set("n", "<Plug>(kubectl.portforwards_view)", "gP")
vim.keymap.set("n", "<Plug>(kubectl.prefix)", "gp")
vim.keymap.set("n", "<Plug>(kubectl.quit)", "")
vim.keymap.set("n", "<Plug>(kubectl.refresh)", "gr")
vim.keymap.set("n", "<Plug>(kubectl.rollout_restart)", "grr")
vim.keymap.set("n", "<Plug>(kubectl.scale)", "gss")
vim.keymap.set("n", "<Plug>(kubectl.select)", "<CR>")
vim.keymap.set("n", "<Plug>(kubectl.set_image)", "gi")
vim.keymap.set("n", "<Plug>(kubectl.sort)", "gs")
vim.keymap.set("n", "<Plug>(kubectl.suspend_job)", "gx")
vim.keymap.set("n", "<Plug>(kubectl.tab)", "<Tab>")
vim.keymap.set("n", "<Plug>(kubectl.timestamps)", "gt")
vim.keymap.set("n", "<Plug>(kubectl.top_nodes)", "gn")
vim.keymap.set("n", "<Plug>(kubectl.top_pods)", "gp")
vim.keymap.set("n", "<Plug>(kubectl.uncordon)", "gU")
vim.keymap.set("n", "<Plug>(kubectl.view_1)", "1")
vim.keymap.set("n", "<Plug>(kubectl.view_2)", "2")
vim.keymap.set("n", "<Plug>(kubectl.view_3)", "3")
vim.keymap.set("n", "<Plug>(kubectl.view_4)", "4")
vim.keymap.set("n", "<Plug>(kubectl.view_5)", "5")
vim.keymap.set("n", "<Plug>(kubectl.wrap)", "gw")
{
auto_refresh = {
enabled = true,
interval = 3000, -- milliseconds
},
diff = {
bin = "kubediff" -- or any other binary
},
namespace = "All",
namespace_fallback = {}, -- If you have limited access you can list all the namespaces here
notifications = {
enabled = true,
verbose = false,
blend = 100,
},
hints = true,
context = true,
float_size = {
-- Almost fullscreen:
-- width = 1.0,
-- height = 0.95, -- Setting it to 1 will cause bottom to be cutoff by statuscolumn
-- For more context aware size:
width = 0.9,
height = 0.8,
-- Might need to tweak these to get it centered when float is smaller
col = 10,
row = 5,
},
obj_fresh = 0, -- highlight if creation newer than number (in minutes)
}
The setup function only adds ~1ms to startup. We use kubectl proxy and curl to reduce latency.
Warning
As we have not yet reached v1.0.0, we may have some breaking changes in cases where it is deemed necessary.
This plugins main purpose is to browse the kubernetes state using vim like navigation and keys, similar to oil.nvim for file browsing.