Unity Assignment
This assignment is for an extra ECTS with the title "Kubernetes workshop". By attending the Kubernetes webinar and doing this extra assignment you can get 1 extra credit.
Enrolment for the course is required for the extra credit. Follow the instructions on /registration-and-completion to ensure you've enrolled. Unfortunately, this also means that the credits are only available if electronic enrollment is available to you, as specified on the registration and completion page.
Deadline for the assignment is the end of the course.
Recap
Shijun used the following helm chart to deploy Prometheus and Grafana (and all the other tools) to his cluster: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack. The repository also has the install instructions.
In this helpful section from the kube-prometheus-stack README we learned how to tell prometheus to scrape all "PodMonitorSelectors" and "ServiceMonitorSelector" CRDs:
helm upgrade --set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false prometheus prometheus-community/kube-prometheus-stack
Also, you have already completed /part-2/5-monitoring, which introduced you how to connect to grafana with kubectl port-forward.
Assignment
Create an application and setup Prometheus so that it scrapes the application for metrics and show how the metrics change over time through grafana. Follow the steps to not get overwhelmed:
Step 0: Preparation
As a preparation create a new web app project, with whatever tech stack / language you choose. I highly recommend choosing a language from this list
The app should have 3 endpoints: /cat, /dog and /random.
- /cat endpoint returns an image of a cat
- /dog endpoint returns an image of a dog
- /random endpoint returns a random image
Step 1: Prometheus client library
This step will require you to read the documentation for the client libraries, choose what type the metric will be and expose the metrics through an endpoint.
Add Prometheus client library and track the usage of each image type. Whenever a cat image is shown increment the counter for cats, and whenever a dog is shown increment the counter for dogs.
Here's an image that confirms you've completed step 1, where the metrics are available to Prometheus in /metrics path.

Step 2: Prometheus operator
This step is the most challenging and will require you to read the documentation for the kube-prometheus-stack and install Prometheus to your cluster and configure it to scrape your application.
Tip: Check the Recap section above.
You will need a PodMonitor Custom Resource, docs here, api doc here and an example here
Interestingly, according to API documentation, the PodMonitor only accepts the monitored port as a string value, so you will need to add a name to the port, e.g:
podmonitor.yaml
podMetricsEndpoints:
- port: web
path: "/metrics"
deplyment.yaml
containers:
- ports:
- name: web
containerPort: 8080
Install Prometheus to your cluster and have it scrape your application. Confirm that it has the data by querying through the Prometheus UI
Here's an image that confirms you've completed step 2, the data is available to Prometheus:

Step 3: Grafana
Show Grafana graph for the types of images trending.
Here's an image that confirms you've completed step 3, here the Grafana gets data from Prometheus about the cat and dog views and shows them as a rate over the last 5 minutes:

Done, what now?
Contact me (jami.kousa@helsinki.fi) and tell me your student number and a link to your project.