Charmed MicroK8s Observability

This guide describes how to integrate Charmed MicroK8s with the Canonical Observability Stack(COS) to gather metrics, logs, alerts and display dashboards for the MicroK8s cluster.

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 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

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

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

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:

1 Like