Home

Awesome

Kubernator   Twitter

Docker Build Status GitHub last commit GitHub commit activity the past week, 4 weeks, year GitHub closed issues GitHub closed pull requests GitHub license

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.

Catalog: Overview

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.

Catalog: Navigation Tree

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.

Catalog: Multiple API Versions

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.

Catalog: Tabs

Copying Objects

When object is being copied, all unnecessary and read-only fields are automatically stripped as described in the corresponding Swagger scheme.

Catalog: Copying Objects

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.

Catalog: Actions Bar

Keyboard Shortcuts

Most frequent actions have associated keyboard shortcuts.

Catalog: 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.

Catalog: Diff Editor

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.

RBAC: Overview

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.

RBAC: Graph

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:

Notifications: Overview

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

  1. Exec docker run -d --name=kubernator -p 3000:80 smpio/kubernator

  2. Run kubectl proxy.

  3. Open http://localhost:3000/ in your browser.

Build and run locally

  1. Install and set up kubectl

  2. Clone and build Kubernator:

    yarn install && yarn build
    
  3. Run Kubernetes API server:

    kubectl proxy
    
  4. Update proxy value in package.json according to the previous command's output.

  5. 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