Awesome
Kubernator
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.
TL;DR
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.
Table of Contents
Features
Catalog
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
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.
Extensive Caching
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.
Multiple API Versions
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.
Tabs
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.
Copying Objects
When object is being copied, all unnecessary and read-only fields are automatically stripped as described in the corresponding Swagger scheme.
Actions Bar
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.
Keyboard Shortcuts
Most frequent actions have associated keyboard shortcuts.
Diff Editor
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
RBAC viewer shows Roles
, ClusterRoles
, RoleBindings
, ClusterRoleBindings
and relationships between them in a visually intuitive way.
Controls
Simple controls pane allows to show/hide a legend, isolated nodes and extended names.
Graph
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.
Notifications
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:
Getting started
There are many ways to run Kubernator
:
Install on cluster (recommended)
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.
Run in docker locally
-
Exec
docker run -d --name=kubernator -p 3000:80 smpio/kubernator
-
Run
kubectl proxy
. -
Open http://localhost:3000/ in your browser.
Build and run locally
-
Install and set up
kubectl
-
Clone and build
Kubernator
:yarn install && yarn build
-
Run Kubernetes API server:
kubectl proxy
-
Update
proxy
value inpackage.json
according to the previous command's output. -
Run
Kubernator
:yarn start
Desktop app
Coming soon.
Support
Please open an issue for support.
Please contribute using Github Flow. Create a branch, add commits, and open a pull request.
MIT License