MicroK8s Addons

To be as lightweight as possible, MicroK8s only installs the basics of a usable
Kubernetes install:

  • api-server
  • controller-manager
  • scheduler
  • kubelet
  • cni
  • kube-proxy

While this does deliver a pure Kubernetes experience with the smallest resource footprint possible, there are situations where you may require additional services. MicroK8s caters for this with the concept of “Addons” - extra services which can easily be added to MicroK8s. These addons can be enabled and disabled at any time, and most are pre-configured to ‘just work’ without any further set up.

For example, to enable the CoreDNS addon:

microk8s enable dns

These add-ons can be disabled at anytime using the disable command:

microk8s disable dns

… and you can check the list of available and installed addons at any time by running:

microk8s status

Note: Before installing add-ons which install extra client tools (e.g. Helm), be sure that the current user is part of the microk8s group, to avoid potential permission problems.

Addon Repositories

Starting from the v1.24 release, addons are organized in repositories. Repositories are essentially git projects in which users can place the addons they are interested in. To assist in creating a such repositories, the MicroK8s team maintains a template repository on github that can be forked to start a new addons collection. Although the template repository includes a HACKING.md guide with instructions on building a Python based demo addon, addons can be implemented in any programming language, even bash.

Addon repositories are found under /var/snap/microk8s/common/addons and can be edited in place. To ease the process of adding, removing and updating such repositories the microk8s addons repo command can be used. A repository under https://github.com/my-org/awesome-repo can be added on a MicroK8s cluster with:

microk8s addons repo add myrepo https://github.com/my-org/awesome-repo

An optional --reference flag can be used to point to a specific branch or tag inside the git repository.

The myrepo in the above example is the repository identifier. This identifier is used to differentiate addons with the same name found on separate addon repositories.

Removing and updating a repository is achieved with the microk8s addons repo remove and microk8s addons repo update commands respectively.

By default the MicroK8s ships with two repositories:

  • core, with essential addons maintained by the MicroK8s team, and

  • community, with community maintained addons.

Note: On fresh installs only the core repository is enabled by default. The community repository can be easily added at any time with: microk8s enable community.

Current MicroK8s Addons

Addons in the Core Repository

The addons maintained and officially supported by the MicroK8s team at Canonical are:

name description version compatibility
cert-manager Certificate management for Kubernetes clusters 1.25 amd64 arm64 power classic strict
community Enables the community addons repository 1.24 amd64 arm64 power s390 classic strict
dns Deploys CoreDNS. It is recommended that this addon is always enabled. 1.12 amd64 arm64 power s390 classic strict
dashboard The standard Kubernetes Dashboard. 1.12 amd64 arm64 power s390 classic strict
gpu Enable support for GPU accelerated workloads using the NVIDIA runtime. 1.12 amd64 classic
ha-cluster Allows for high availability on clusters with at least three nodes. 1.19 amd64 arm64 power s390 classic strict
helm Installs the Helm 3 package manager for Kubernetes 1.15 amd64 arm64 power s390 classic strict
helm3 Transition addon introducing the Helm 3 package manager 1.18 amd64 arm64 power s390 classic strict
hostpath-storage Create a default storage class which allocates storage from a host directory. Note!: The add-on uses simple filesystem storage local to the node where it was added. Not suitable for a production environment or clusters 1.12 amd64 arm64 power s390 classic strict
host-access Provides a fixed IP for access to the host’s services. 1.19 amd64 arm64 power s390 classic strict
ingress A simple ingress controller for external access. 1.12 amd64 arm64 power s390 classic strict
kube-ovn The feature rich Kube-OVN network fabric. 1.25 amd64 arm64 classic
mayastor Multi-node zero-ops storage option powered by Mayastor 1.24 amd64 arm64 classic
minio Cloud-agnostic S3-compatible object storage. 1.26 amd64 arm64 power s390 classic strict
metallb Deploys the MetalLB Loadbalancer. Note that currently this does not work on macOS, due to network filtering. 1.17 amd64 arm64 power s390 classic strict
metrics-server Adds the Kubernetes Metrics Server for API access to service metrics. 1.12 amd64 arm64 power s390 classic strict
prometheus Deploys the Prometheus Operator. 1.14 amd64 arm64 classic strict
rbac Enable Role Based Access Control for authorisation. Note that this is incompatible with some other add-ons. 1.14 amd64 arm64 power s390 classic strict
registry Deploy a private image registry and expose it on localhost:32000. 1.12 amd64 arm64 power s390 classic strict
storage DEPRECATED - Replaced by the hostpath-storage addon. 1.12 amd64 arm64 power s390 classic strict

Addons in the Community Repository

This collection of third party and community maintained addons can be easily enabled with:

microk8s enable community

Here is what is currently included:

name description version compatibility
ambassador Ambassador is an API and Ingress controller 1.19 <1.24 amd64 classic strict
argocd Deploys Argo CD, the declarative, GitOps continuous delivery tool for Kubernetes. 1.24 amd64 classic
cilium Deploys Cilium to support Kubernetes network policies using eBPF. 1.15 amd64 classic strict
fluentd Deploy the Elasticsearch-Fluentd-Kibana logging and monitoring solution. 1.13 amd64 classic
gopaddle-lite Simple “no-code” platform for Kubernetes developers. 1.26 amd64 classic
inaccel Simplify FPGA management and application lifecycle with InAccel. 1.24 amd64 classic strict
istio Adds the core Istio services (not available on arm64 arch). 1.12 amd64 classic strict
jaeger Deploy the Jaeger Operator in the “simplest” configuration. 1.13 amd64 arm64 classic strict
kata Adds Kata containers support - A secure container runtime with lightweight virtual machines. 1.22 amd64 classic
keda Deploys KEDA - Kubernetes Event-driven Autoscaling operator. 1.20 amd64 classic strict
knative Adds the Knative middleware to your cluster 1.15 amd64 arm64 power s390 classic strict
kwasm Add WebAssembly support to your Kubernetes nodes 1.26 amd64 arm64 classic strict
linkerd Deploys the linkerd service mesh 1.19 amd64 arm64 classic
multus Add multus for multiple network capability. 1.19 amd64 arm64 classic
nfs Adds NFS-based storage. 1.25 amd64 classic
ondat A Kubernetes-native persistent storage platform. 1.26 amd64 classic
openebs Add OpenEBS storage capability. 1.21 amd64 arm64 classic strict
openfaas OpenFaaS, the popular serverless framework. 1.21 amd64 classic strict
osm-edge Open Service Mesh Edge (OSM-Edge) fork from Open Service Mesh is a lightweight, extensible, Cloud Native service mesh built for Edge computing. 1.25 amd64 arm64 classic strict
portainer Container management dashboard (see portainer.io). 1.20 amd64 arm64 classic strict
sosivio Predictive troubleshooting for Kubernetes 1.26 amd64 classic strict
traefik Adds the Traefik Kubernetes Ingress controller. 1.20 amd64 arm64 classic strict
1 Like

Hi, it seems Linkerd and also Knative is now available for arm64…

From 1.20 MicroK8s linkerd addon is now available on arm.

what is the recommended way to update an add-on on microk8s?
I upgraded my cluster from 1.20 to 1.21 but e.g. dns still uses coredns 1.6.6 instead of 1.8.0.
I didn’t want to disable/enable the add-on to not miss some settings, so i decided to update the used image with microk8s.kubectl set image --namespace kube-system deployment.apps/coredns coredns=coredns/coredns:1.8.0.
Compared to the other microk9s procedures, this looks quite complicated to me.

I know that the dns add-on is very simple, but this was just an example.


@SukramJ Thanks for pointing this out. I don’t know if there is a better way to upgrade an add -on (@kjackal?), but this is definitely something we should mention in the upgrade docs

Pre-configured addons that ‘just work’ are great, but there are times when we might want to configure an addon. It would be useful if this page mentioned how to do so (by editing an addon manifest perhaps?)

1 Like

The hostpath-storage add-on is not intended to be used in a production environment and is not suitable for clusters.

What to use for production then?

I was in fact asking the same question before learning about StorageClasses, PersistentVolumes, PersistentVolumeClaims and all of that stuff.

Getting started

This not not exactly a guide or anything but simply various resources I found out that might help people out.

  1. I was using a custom cloud provider where I could create something called a Block storage which is a fast SSD that I mount to my controller VM.

  2. Once I had a partition ready, I created an NFS Server from that.

  3. I then took a look at NFS Storage provisioning in Kubernetes.

  4. I also started using Helm which has saved my life more than I can count.

Thanks for those resources - indeed, very useful if you need to better understand storage in K8s.
For MicroK8s clusters, the mayastore add-on is a great solution - docs here

1 Like

@Usersina From version 1.25 there is now an nfs addon too

Neat addition! Although I prefer the helm way so it’s easier if I ever want to move to a managed cluster.

1 Like

I just installed the latest version: MicroK8s v1.26.0 revision 4390

The list of core Add-ons is outdated on this page (https://microk8s.io/docs/addons), observability is missing, also when enabling Prometheus a warning of deprecation is shown and observability is installed instead:

microk8s enable prometheus
Infer repository core for addon prometheus
DEPRECATION WARNING: 'prometheus' is deprecated and will soon be removed. Please use 'observability' instead.

Infer repository core for addon observability
Addon core/observability is already enabled

It would be great if you could add a tutorial section about getting started with the current observability add-on, I found an external resource for this, but it references the deprecated add-on prometheus: