Kubernator
is an alternative Kubernetes UI. In contrast to high-level Kubernetes Dashboard, it provides low-level control and clean view on all objects in a cluster with the ability to create new ones, edit and resolve conflicts. As an entirely client-side app (like kubectl
), it doesn't require any backend except Kubernetes API server itself, and also respects cluster's access control.
kubectl create ns kubernator
kubectl -n kubernator run --image=smpio/kubernator --port=80 kubernator
kubectl -n kubernator expose deploy kubernator
kubectl proxy
Then open service proxy URL in your browser.
Note that exposing it as ingress won't work, because the page should be on the same domain as API server. This is totally client-side app. kubectl proxy
should be running.
Catalog offers an intuitive interface for managing Kubernetes objects (like Deployment
, Service
and everything else). Objects can be created, compared, modified and removed using a powerful diff editor.
Navigation tree shows objects' kinds, grouped by namespaces, and objects themselves. All API groups are fetched, which yields a list of versions and endpoints for every group. Then for all groups and versions Kubernator
loads resources list, and then ― list of objects for every known resource. To show the tree, objects are grouped by their namespaces. Navigation has its own actions bar, which currently consists from one action ― reload namespaces.
Kubernator
fires a lot of API calls, that's why it actively caches their responses in browser's local storage to boost loading times in subsequent uses, e.g. API groups and Swagger schemas are reloaded only when cluster is upgraded. Resources are reloaded every time the corresponding kind or namespace is being opened. And objects are reloaded again when opened in the editor.
Every group fetches its resources using all API versions, not only the preferred one, and then merges given resources into one list considering versions priority. It means we can access objects through different API versions. Moreover, when a new object is created, an API endpoint would be choosed automatically based on the value of apiVersion
field in its description.
Tab names reflect current object's location in the navigation tree (object.namespace → object.kind → object). New objects have green tab color, modified and not submitted objects ― red tab color. Local modifications are saved even if the tab was closed and reopened again.
When object is being copied, all unnecessary and read-only fields are automatically stripped as described in the corresponding Swagger scheme.
Available actions: open a new tab copying current object; close all tabs; reload, save or delete current object; switch currently active tab to the left/right neighbour.
Most frequent actions have associated keyboard shortcuts.
Diff editor is based on the powerful Monaco Editor
. Cursor position, scroll position and not applied updates are saved automatically for every open tab.
RBAC viewer shows Roles
, ClusterRoles
, RoleBindings
, ClusterRoleBindings
and relationships between them in a visually intuitive way.
Simple controls pane allows to show/hide a legend, isolated nodes and extended names.
Graph area (built with the awesome d3
library) shows an interactive force graph of linked nodes. The graph can be paned, dragged and zoomed. Nodes are draggable too, and links also show some additional information when hovered.
Every error and warning shows itself in a floating message on the right top side of the window. Errors are red and don't vanish automatically as warnings do. An example of concurrent edits of the same object:
There are many ways to run Kubernator
:
After installation you will have access to Kubernator just by running kubectl proxy
. You won't have to run anything else locally. To install, run the following commands:
kubectl create ns kubernator
kubectl -n kubernator run --image=smpio/kubernator --port=80 kubernator
kubectl -n kubernator expose deploy kubernator
kubectl proxy
Then open service proxy URL in your browser.
Note that exposing it as ingress won't work, because the page should be on the same domain as API server. kubectl proxy
should be running.
Exec docker run -d --name=kubernator -p 3000:80 smpio/kubernator
Run kubectl proxy
.
Open http://localhost:3000/ in your browser.
Install and set up kubectl
Clone and build Kubernator
:
yarn install && yarn build
Run Kubernetes API server:
kubectl proxy
Update proxy
value in package.json
according to the previous command's output.
Run Kubernator
:
yarn start
Coming soon.
Please open an issue for support.
Please contribute using Github Flow. Create a branch, add commits, and open a pull request.
MIT License