Kubevious is an open source Kubernetes Dashboard, but it’s not quite the same as our mainstream Dashboard, it’s very unique, it has all the configuration related to the application in one place, which saves the operator’s time. The main thing is that it has a Time Machine feature that allows us to go back in time to see the application error messages.

Features

Most of the Kubernetes Dashboard features are pretty much the same, so what features does Kubevious have?

An application-centric visualization

We know that even a simple Hello World application in Kubernetes will generate many resource objects, and it is relatively troublesome to get the configuration related to the application. Deployments, ReplicaSets, Pods, Services, Ingresses, Volumes, ConfigMaps, and other resource objects are identified and displayed together with a Box for the application.

The main screen is rendered using a number of Boxes, each of which can be selected or expanded by double-clicking on it, and the properties and configurations associated with each Box are displayed in the right-hand panel.

Misconfiguration detection

Kubernetes components and resource objects are configured independently, so there is a high probability that something like a spelling error will occur when using the component. kubevious identifies many errors, such as label errors, missing ports, etc. The red circles contain the number of errors within the child nodes.

Identifying Cascading Configurations

Configuration in Kubernetes is highly reusable, and small changes can have unintended consequences. kubevious can identify shared configuration and display other slave objects so that it can be seen at a glance, ensuring the cascading effect of changes.

When there are so many objects in a Kubernetes cluster, it can be time-consuming to find a specific configuration, and Kubevious is all about supporting full-text search for the entire cluster.

Capacity Planning and Resource Usage Optimization

Kubevious clearly determines how many resources are used by each container, Pod, Deployment, DaemonSet, namespace, etc. Directly from Kubevious, Kubevious presents not only the absolute resource request values, but also the relative usage per node, namespace, and cluster as a whole. Determine which applications are taking up most of the resources in the namespace.

Permission marking

Kubevious marks applications and their corresponding namespaces as radioactive, specifically it checks for privileged containers, hostPID, hostNetwork, hostIPC, etc. flags, and mount to some sensitive host locations, such as docker.sock files, etc.

Time Machine

This is probably one of the most interesting features to me, because we know that it’s very difficult to keep track of the various issues with an application as it changes constantly, and Kubevious allows us to go back to a previous point in time to see the configuration and error messages of the application through the time machine feature.

Installation

Kubevious can be installed on any Kubernetes discovery release, and can be installed quickly using Helm, which can be viewed in our previous article on the subject.

1
2
3
4
5
6
7
$ kubectl create namespace kubevious
$ git clone https://github.com/kubevious/deploy.git kubevious-deploy.git
$ cd kubevious-deploy.git/kubernetes
$ helm template kubevious \
    --namespace kubevious \
    -f kubevious/values.latest.yaml \
    > kubevious.yaml

Rendering the Chart template directly into a Kubernetes resource object, the rendered resource object will need some minor changes. Since Kubevious relies on MySQL, the best way to provide a storage for MySQL is to provide an available StorageClass object in volumeClaimTemplates so that the PV can be created automatically, and then just create the resource object above.

1
$ kubectl apply -f kubevious.yaml

During the installation process, there may be a problem that the database and database tables are not created automatically, we can enter the database and create the database manually, then execute the SQL statement under kubevious-mysql-init-script ConfigMap once to create the tables manually. If you encounter problems connecting to the database with permissions, you can also log in to the database and reconfigure the permissions:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ kubectl exec -it kubevious-mysql-0 /bin/bash -n kubevious
root@kubevious-mysql-0:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 838
Server version: 5.7.29-log MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.11 sec)
mysql> FLUSH PRIVILEGES; 

After the normal installation is complete we can view the corresponding resource objects.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ kubectl get pods -n kubevious
NAME                            READY   STATUS    RESTARTS   AGE
kubevious-8467486674-252wl      1/1     Running   0          57m
kubevious-mysql-0               1/1     Running   1          77m
kubevious-ui-786b6d68df-jp829   1/1     Running   0          66m
$ kubectl get svc -n kubevious
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubevious-mysql-svc   ClusterIP   None            <none>        3306/TCP         3h8m
kubevious-svc         NodePort    10.104.101.24   <none>        4000:31651/TCP   3h8m
kubevious-ui-svc      NodePort    10.96.43.12     <none>        3000:32367/TCP   3h8m

By default, a Service of type NodePort is created, so that we can access Kubevious via http://<nodeIP:32367>.

But Kubevious also has a relatively large defect is the use of MySQL database to do the cluster snapshot, for small-scale clusters is not a big problem, for large-scale clusters should be performance and capacity will slowly become a bottleneck, after all, the project is still in the early stages, the future is still promising.