---
title: Charmhub | Deploy MicroK8s using Charmhub - The Open Operator Collection
description: Deploy the latest version of MicroK8s on any cloud.
url: https://charmhub.io/microk8s/docs/how-to-cos
---

# MicroK8s

[Canonical Kubernetes](https://charmhub.io/publisher/containers "View all packages from Canonical Kubernetes")

* [Canonical Kubernetes](https://charmhub.io/publisher/containers "View all packages from Canonical Kubernetes")

Platform:

22.04

20.04

edge 242

```
juju deploy microk8s --channel edge
```

[Learn to deploy on juju >](https://juju.is/docs/juju/manage-applications)

---

#### Relevant links

* [Homepage](https://github.com/canonical/charm-microk8s)

---

#### Contacts

##### Maintainers

+ [The MicroK8s team](mailto:microk8s@canonical.com)

* [Submit a bug](https://github.com/canonical/charm-microk8s/issues)

---

Share your thoughts on this charm with the community on discourse.

[Join the discussion](https://discourse.charmhub.io/)

This guide describes how to integrate Charmed MicroK8s with the [Canonical Observability Stack(COS)](https://charmhub.io/topics/canonical-observability-stack) to gather metrics, logs, alerts and display dashboards for the MicroK8s cluster.

### [Requirements](https://charmhub.io/microk8s/docs/how-to-cos#p-27766-requirements)

* A running Charmed MicroK8s cluster

If you are planning to deploy COS on the cluster itself, then you also need to follow [the “Deploy Kubernetes charms” guide](https://charmhub.io/microk8s/docs/how-to-add-k8s) to configure the MicroK8s cluster as a Juju cloud. For this guide, we will assume that this has already been done and the Juju cloud is named `microk8s-cloud`.

### [Deploy COS](https://charmhub.io/microk8s/docs/how-to-cos#p-27766-deploy-cos)

> *NOTE*: If you have already deployed COS and only need to integrate it with your MicroK8s cluster, skip to the next section.

First, we create a model and deploy MetalLB. MetalLB will provide a public IP address for Prometheus, Loki and Grafana. Please choose an address that is appropriate for your network, in this example we will use `10.42.42.42`.

```
juju add-model metallb-system microk8s-cloud
juju deploy metallb --channel 1.28/stable --config iprange=10.42.42.42-10.42.42.42
```

Next, deploy COS using the `cos-lite` bundle:

```
juju add-model cos microk8s-cloud
juju deploy cos-lite --channel edge --trust
```

After `cos-lite` deployment is complete, the `juju status` output should look like this. Notice how the `traefik` application is using the LoadBalancer IP we configured:

```
Model  Controller  Cloud/Region              Version  SLA          Timestamp
cos    zs          microk8s-cloud/localhost  3.1.5    unsupported  10:19:47+03:00

App           Version  Status  Scale  Charm             Channel  Rev  Address         Exposed  Message
alertmanager  0.25.0   active      1  alertmanager-k8s  edge      88  10.152.183.44   no
catalogue              active      1  catalogue-k8s     edge      25  10.152.183.101  no
grafana       9.2.1    active      1  grafana-k8s       edge      92  10.152.183.245  no
loki          2.7.4    active      1  loki-k8s          edge      97  10.152.183.88   no
prometheus    2.46.0   active      1  prometheus-k8s    edge     148  10.152.183.233  no
traefik       2.10.4   active      1  traefik-k8s       edge     151  10.42.42.42     no

Unit             Workload  Agent  Address       Ports  Message
alertmanager/0*  active    idle   10.1.144.199
catalogue/0*     active    idle   10.1.17.130
grafana/0*       active    idle   10.1.144.200
loki/0*          active    idle   10.1.17.136
prometheus/0*    active    idle   10.1.144.201
traefik/0*       active    idle   10.1.17.135
```

Our next step is to create offers for the metrics, logs and dashboard endpoints. This will allow us to connect our MicroK8s cluster to COS:

```
juju offer prometheus:receive-remote-write prometheus
juju offer loki:logging loki
juju offer grafana:grafana-dashboard grafana
```

Note the endpoint names from the output, e.g.:

```
Application "prometheus" endpoints [receive-remote-write] available at "admin/cos.prometheus"
Application "loki" endpoints [logging] available at "admin/cos.loki"
Application "grafana" endpoints [grafana-dashboard] available at "admin/cos.grafana"
```

We will need these names to configure the cross-model relations in the next step.

### [Integrate MicroK8s with COS](https://charmhub.io/microk8s/docs/how-to-cos#p-27766-integrate-microk8s-with-cos)

We will now switch back to our main model:

```
juju switch microk8s
```

Next, consume the COS endpoints:

```
juju consume admin/cos.prometheus prometheus
juju consume admin/cos.loki loki
juju consume admin/cos.grafana grafana
```

Deploy `grafana-agent` and integrate it with our COS endpoints:

```
juju deploy grafana-agent --channel edge

juju integrate grafana-agent prometheus
juju integrate grafana-agent loki
juju integrate grafana-agent grafana
```

As a final step, integrate `microk8s` with the `grafana-agent`:

```
juju integrate microk8s grafana-agent
```

Wait for everything to settle, the output of `juju status` should eventually look like this:

```
Model     Controller  Cloud/Region   Version  SLA          Timestamp
microk8s  zs          zerostack/KHY  3.1.5    unsupported  10:55:27+03:00

SAAS        Status  Store  URL
grafana     active  zs     admin/cos.grafana
loki        active  zs     admin/cos.loki
prometheus  active  zs     admin/cos.prometheus

App            Version  Status  Scale  Charm          Channel      Rev  Exposed  Message
grafana-agent           active      3  grafana-agent  edge          18  no
microk8s       1.28.1   active      3  microk8s       1.28/stable  213  yes      node is ready

Unit                Workload  Agent  Machine  Public address  Ports      Message
microk8s/0          active    idle   0        172.16.100.241  16443/tcp  node is ready
  grafana-agent/0*  active    idle            172.16.100.241
microk8s/1*         active    idle   1        172.16.100.189  16443/tcp  node is ready
  grafana-agent/2   active    idle            172.16.100.189
microk8s/2          active    idle   2        172.16.100.129  16443/tcp  node is ready
  grafana-agent/1   active    idle            172.16.100.129

Machine  State    Address         Inst id                               Base          AZ    Message
0        started  172.16.100.241  9e1e142a-4a5c-407a-9605-6fe0e8abad3c  ubuntu@22.04  nova  ACTIVE
1        started  172.16.100.189  1ad53578-e1e4-42f2-a337-ba4f17f4be38  ubuntu@22.04  nova  ACTIVE
2        started  172.16.100.129  46d9e8fd-a47c-44aa-b43e-1490394f29bc  ubuntu@22.04  nova  ACTIVE
```

### [Explore Dashboards](https://charmhub.io/microk8s/docs/how-to-cos#p-27766-explore-dashboards)

Retrieve the Grafana admin password

```
JUJU_MODEL=cos juju run grafana/leader get-admin-password --wait
```

The output should include the admin password, as well as the URL where you can access Grafana:

```
admin-password: x6a798da56as321
url: http://10.42.42.42/cos-grafana
```

After logging in to Grafana, go to the list of Dashboards, and you can see a number of provisioned dashboards for the MicroK8s cluster:

#### Node Monitoring

Use the `General / System Resources` dashboard to see metrics and graphs for the individual MicroK8s nodes:

An example view can be seen below:

#### Control Plane Services

The following dashboards can be used to monitor the respective control plane services of the MicroK8s cluster:

* `Kubernetes / API Server`
* `Kubernetes / Kubelet`
* `Kubernetes / Proxy`
* `Kubernetes / Scheduler`
* `Kubernetes / Controller Manager`

An example view of the `Kubernetes / Controller Manager` dashboard can be seen below:

#### Workload monitoring

The following dashboards can be used to monitor the status and compute usage of workloads running in the MicroK8s cluster:

* `Kubernetes / Compute Resources / Cluster`
* `Kubernetes / Compute Resources / Namespace (Pods)`
* `Kubernetes / Compute Resources / Namespace (Workloads)`
* `Kubernetes / Compute Resources / Node (Pods)`
* `Kubernetes / Compute Resources / Pod`
* `Kubernetes / Compute Resources / Workload`

The following dashboards can be used to monitor the networking traffic in the MicroK8s cluster:

* `Kubernetes / Networking / Cluster`
* `Kubernetes / Networking / Namespace (Pods)`
* `Kubernetes / Networking / Namespace (Workloads)`
* `Kubernetes / Networking / Pod`
* `Kubernetes / Networking / Workload`

The following dashboards can be used to monitor the status of PersistentVolumes in the MicroK8s cluster:

* `Kubernetes / Persistent Volumes`

An example view of the `Kubernetes / Networking / Namespace (Pods)` dashboard can be seen below:

---
