Getting Started With Kubernetes
Getting started with Helm
To deploy Parosly in Kubernetes, it is easy to use the provided values.yaml file. This will deploy the prometheus-community/prometheus chart including the Parosly application as a sidecar container inside the Prometheus pod.
IMPORTANT: When using the provided values.yaml, all Prometheus configurations specified in the prometheus.yml file can not be managed through Helm values. Instead, the configurations need to be managed via the /configs API or the web UI of the Parosly app.
Get repository info
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
Install chart
$ helm install prometheus prometheus-community/prometheus \
--values https://raw.githubusercontent.com/parosly/parosly/main/docs/examples/kubernetes/helm/values.yaml
Verify that everything is working properly
When the chart is installed successfully by executing the following commands, you should see similar output.
$ kubectl get pod -l app.kubernetes.io/component=server
NAME READY STATUS RESTARTS AGE
prometheus-server-54595bd74b-tr7fb 3/3 Running 0 1m
$ kubectl get svc prometheus-server
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-server ClusterIP 10.100.237.217 <none> 80/TCP 1m
$ kubectl logs -f -l app.kubernetes.io/component=server -c parosly
{"timestamp": "07 Dec 2024 10:23:14", "level": "INFO", "message": "Starting web management UI"}
{"timestamp": "07 Dec 2024 10:23:15", "level": "INFO", "message": "The connection to the Prometheus server has been established successfully!"}
{"timestamp": "07 Dec 2024 10:23:15", "level": "INFO", "message": "Successfully started metrics endpoint at /api-metrics path"}
{"timestamp": "07 Dec 2024 10:23:15", "level": "INFO", "message": "Server listening on 0.0.0.0:9090"}
Once the apps are ready to handle requests, you can start creating your first Prometheus rules via API.
Important: As you can see, the type of service is
ClusterIP
, which means it’s only accessible from within the Kubernetes cluster.
Expose service locally
Port forward the service and open another tab for the next step.
$ kubectl port-forward svc/prometheus-server 9090:80
Crating example alerting rule via API
POST /api/v1/rules
Request
curl -i -XPOST 'http://localhost:9090/api/v1/rules' \
--header 'Content-Type: application/json' \
--data '{
"data": {
"groups": [
{
"name": "ServiceHealthAlerts",
"rules": [
{
"alert": "HighCPUUsage",
"expr": "sum(rate(cpu_usage{job=\"webserver\"}[5m])) > 0.8",
"for": "5m",
"labels": {
"severity": "warning"
},
"annotations": {
"summary": "High CPU Usage Detected",
"description": "The CPU usage for the web server is {{ $value }}% for the last 5 minutes."
}
}
]
}
]
}
}'
Response
HTTP/1.1 201 Created
content-length: 99
content-type: application/json
{"status":"success","message":"The rule was created successfully","file":"453ee16d-6310-42e0-8d57-2857e27d250f.yml"}
Where the 453ee16d-6310-42e0-8d57-2857e27d250f.yml
is the randomly generated filename created by the Parosly server.
Deleting alerting rule file via API
DELETE /api/v1/rules/{file}
Note that the filename in your example is different from the example below.
Request
curl -i -XDELETE 'http://localhost:9090/api/v1/rules/453ee16d-6310-42e0-8d57-2857e27d250f.yml'
Response
HTTP/1.1 204 No Content
content-type: application/json
You can find the complete API documentation here. Enjoy!
Further reading
- Read about how-to guides in the Diátaxis framework