MicroK8s Add ons

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 of
resource footprints, 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.

Current MicroK8s Addons

ambassador: (1.19+ tracks) Ambassador is an API and Ingress controller.

dashboard: The standard Kubernetes Dashboard.

dns: Deploys CoreDNS. This add-on may be required by others - it is
recommended you always enable it. In restricted environments you may need to
update the upstream DNS servers.

cilium: Deploys Cilium to support Kubernetes network policies using eBPF.

fluentd: Deploy the Elasticsearch-Fluentd-Kibana logging and
monitoring solution.

gpu: Enable support for GPU accelerated workloads using the NVIDIA runtime.

helm: Installs the Helm 2 package manager for Kubernetes.

helm3: Installs the Helm 3 package manager for Kubernetes.

host-access: Provides a fixed IP for access to the host’s services.

inaccel: (1.23+ tracks) Simplify FPGA management and application lifecycle with InAccel.

ingress: A simple ingress controller for external access.

istio: Adds the core Istio services (not available on arm64 arch).

jaeger: Deploy the Jaeger Operator in the “simplest”

juju: Enables a juju client to work with MicroK8s.

kata: (1.22+ tracks) Adds Kata containers support - A secure container runtime with lightweight virtual machines that feel and perform like containers.

keda: (1.20+ tracks) Deploys KEDA - Kubernetes Event-driven Autoscaling operator.

knative: Adds the Knative middleware to your cluster (not available on arm64 arch).

kubeflow: Adds Kubeflow using the Charmed Kubeflow operators.

linkerd: Deploys the linkerd service mesh ( arm64 version available in 1.20+).

metallb: Deploys the MetalLB Loadbalancer. Note that currently this does not work on macOS, due to filtering that macOS applies to network traffic.

metrics-server: Adds the Kubernetes Metrics Server
for API access to service metrics.

multus: (1.19+ tracks) Add multus for multiple network capability.

openfaas: OpenFaaS, the popular serverless framework, (not available on arm64 arch).

openebs: Add OpenEBS storage capability, (not available on arm64 arch).

portainer: Container management dashboard (see portainer.io).

prometheus: Deploys the Prometheus Operator.

rbac: Enable Role Based Access Control for authorisation. Note that this is
incompatible with some other add-ons.

registry: Deploy a private image registry and expose it on localhost:32000.
The storage add-on will be enabled as part of this add-on. See the registry
documentation for more details.

storage: Create a default storage class which allocates storage from a
host directory. N.B. This is simple filesystem storage local to the node where it was added - you may require something more complex for a cluster.

traefik: (1.20+ tracks) Adds the Traefik Kubernetes Ingress controller.

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