Introduction

Headlamp is a new open source tool by Kinvolk, created to visualise Kubernetes clusters in a modern way. The biggest highlight of it is "Extensibility". Headlamp is extensible by the concept of Plugins, which means you can create your own plugins and use them with Headlamp to make it yours.

As mentioned in the official documentation, "Plugins are one of the key features of Headlamp". They allow users to modify what, and how, information is displayed, as well as other functionality. The ultimate goal of the plugins system is to allow vendors to build and deploy Headlamp with extra functionality without having to maintain a fork of the project. More information on how to build and use plugins can be found here

Headlamp can be installed within the cluster to access it over the internet or it can also be installed as an application. In this tutorial we will install Headlamp in a Civo managed K3s cluster and go through its features.

Note: This guide is not a comparison with other existing cluster visualisation tools. instead it's a walkthrough of the installation and some features that Headlamp provides.

Prerequisites

  • A Kubernetes cluster you control. We'll take advantage of Civo's super-fast managed K3s service to experiment with this quickly. If you don't yet have an account, sign up to the beta now to take advantage of quick deploy times and $70 free credit per month! Alternatively, you could also use any other Kubernetes cluster.
  • kubectl installed, and the kubeconfig file for your cluster downloaded.

Civo Kubernetes configuration

Make sure you can connect to your Kubernetes cluster by running

$ kubectl get nodes
NAME               STATUS   ROLES    AGE   VERSION
kube-node-97b7     Ready    <none>   4d    v1.18.6+k3s1
kube-master-e72e   Ready    master   4d    v1.18.6+k3s1
kube-node-c532     Ready    <none>   4d    v1.18.6+k3s1

You should see the names of the nodes in your cluster displayed similar to above.

Headlamp Installation

Step 1: Service account and ClusterRoleBinding Creation

Run the following commands to create the service account, the binding, and to acquire a secrets token ID.

$ kubectl -n kube-system create serviceaccount headlamp-admin
serviceaccount/headlamp-admin created

$ kubectl create clusterrolebinding headlamp-admin --serviceaccount=kube-system:headlamp-admin --clusterrole=cluster-admin
clusterrolebinding.rbac.authorization.k8s.io/headlamp-admin created

$ kubectl -n kube-system get secrets | grep headlamp-admin
headlamp-admin-token-kzv5t                           kubernetes.io/service-account-token   3      13s

Make note of the token as this will be used to login to the Headlamp dashboard:

kubectl -n kube-system describe secret headlamp-admin-token-kzv5t

Step2: Install Headlamp

This creates a Headlamp deployment and service:

kubectl apply -f https://raw.githubusercontent.com/kinvolk/headlamp/master/kubernetes-headlamp.yaml

service/headlamp created
deployment.apps/headlamp created

kubectl get pods -n kube-system | grep headlamp
headlamp-7c54bdf8c9-cz5pj                1/1     Running     0          95s

kubectl get svc -n kube-system | grep headlamp
headlamp             ClusterIP      192.168.169.23    <none>            80/TCP                       109s

Step 3: Create ingress

By default, Civo K3s clusters will come with Traefik as an ingress controller, so we will simply use that here. Run the following, but make sure to change the your-cluster-id in the host line to match your cluster's DNS entry (which you can see on the cluster administration page):

$ cat << EOF | kubectl apply -f -
pipe heredoc> apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: headlamp
  namespace: kube-system
spec:
  rules:
  - host: headlamp.<your-cluster-id>.k8s.civo.com
    http:
      paths:
      - backend:
          serviceName: headlamp
          servicePort: 80
EOF

ingress.extensions/headlamp created

Let's make sure that we have a working ingress, by running:

$ kubectl get ing -n kube-system | grep headlamp
headlamp   <none>   headlamp.fb54c6ea-e9a5-4bda-8a05-e68115ac21d0.k8s.civo.com   185.136.233.178   80      46s

If you see output like above, you will be able to connect to the Headlamp interface at the ingress URL you defined.

Step 3: Open the Headlamp UI

Signing in to Headlamp

We will be using the token login, so enter the token from the headlamp secret from step 1 above.

The initial cluster overview gives the for CPU Usage, Memory Usage and Pods, the events are also listed below.

Cluster overview

You can have different views of your cluster, such as Namespaces, Nodes, etc.

You can have an overview of all Nodes in the cluster, and detailed view for each node, with information about the labels, annotations and system information as well.

Nodes overview

Node specifics

You can also edit the Node directly from the UI :

Editing a node

Workload section - It gives the list of workloads that are deployed to the cluster. You can view and edit this section directly from the UI as well:

Workloads

Storage view - It gives the view of Storage classes, Persistent volumes and PVC:

Cluster storage

Network view - It gives the view for services and ingress:

Cluster network services

Security Section - It gives the view of Service Account, Roles, RoleBindings and Secrets

Security overview

Overall, Headlamp presents simple UI, while the aggregated view gives a fresh look to the eyes.

Oops, I nearly forgot to mention the DARK MODE. Yes, Headlamp comes with a dark mode as well:

Dark mode

Give Headlamp a try, and let us know how it compares to any other Kubernetes visualisation tools you may have used!