How to Monitor Your VKE Cluster with tobs

tobs - The Observability Stack for Kubernetes is a Kubernetes monitoring stack that collects metrics with Prometheus, visualizes them with Grafana, and stores them long term in TimescaleDB through Promscale. It also bundles supporting components such as AlertManager, Node-Exporter, and Kube-State-Metrics, so a single Helm release provides collection, storage, alerting, and dashboards.
This guide explains how to install tobs in a Vultr Kubernetes Engine (VKE) cluster and back its metrics database with Vultr Object Storage. It covers installing the stack with Helm, customizing the chart values for Vultr Block Storage, visualizing metrics in Grafana, querying the metrics database directly with SQL, and troubleshooting a failed deployment.
Prerequisites
Before you begin, you need to:
- Deploy a Vultr Kubernetes Engine cluster with at least two 4 GB nodes. Nodes with 2 GB of memory are not sufficient for the tobs stack.
- Download the cluster configuration and configure kubectl on your local machine.
- Install Helm 3 or later.
- Provision an Object Storage subscription and create a bucket to use as the S3-compatible backup target for TimescaleDB.
Install tobs
The tobs Helm chart pins each bundled component to a version tested against a specific range of Kubernetes releases. Confirm that your cluster falls within the supported range before installing, because an unsupported version leaves pods in a crash loop that is difficult to diagnose later.
Check the Kubernetes version running on your nodes.
console$ kubectl get nodes
The output displays each node with a
Readystatus and its Kubernetes version.Check the compatibility matrix to confirm which tobs version supports your Kubernetes version.
Add the Timescale Helm repository.
console$ helm repo add timescale https://charts.timescale.com/
Update the repository cache.
console$ helm repo update
Generate a values file from the chart defaults.
console$ helm show values timescale/tobs > my_values.yml
Open the values file in a text editor.
console$ nano my_values.yml
Change every
storage: 8Gientry tostorage: 10Gi. Vultr Block Storage enforces a 10 GB minimum, so a smaller request leaves the volume claim unbound.Reduce the
size: 150Givalue undertimescaledb-singleto a smaller volume if you want to lower the storage cost.Save and close the file.
Install the stack. Replace
RELEASE-NAMEwith a name for the Helm release.console$ helm upgrade --wait --install RELEASE-NAME --values my_values.yml timescale/tobs
The installer prompts for your Object Storage bucket name, endpoint hostname, region, access key, and secret key. Enter the values for the bucket you created in the prerequisites, and leave the region blank to accept the default.
Note- The
--waitflag is required. The chart creates OpenTelemetry custom resources only after the OpenTelemetry operator is running, and omitting the flag causes those resources to fail. You can omit it when installing tobs without OpenTelemetry support. - Installing the full stack with OpenTelemetry support requires cert-manager in the cluster. Follow the cert-manager documentation to install it first. cert-manager is not required when OpenTelemetry support is disabled.
- The
Watch the deployment progress.
console$ kubectl get pods
The installation takes several minutes. Pods report
CrashLoopBackOffwhile dependencies start, which is expected during this period.Verify that the stack finished deploying.
console$ kubectl get pods
Verify that the Prometheus, Grafana, Promscale, TimescaleDB, and exporter pods all report a
Runningstatus. Pods that remain inCrashLoopBackOffafter the deployment settles indicate a problem, which the troubleshooting section addresses.
Configure the Stack
Every component in tobs is configured through the Helm values file rather than through individual component settings. Editing that single file and upgrading the release keeps the whole stack consistent.
Review the default values file in the project repository to see the available settings, which are documented inline.
Consult the Helm chart documentation for a description of each configuration option.
Apply any changes by upgrading the release with your edited values file. Replace
RELEASE-NAMEwith your Helm release name.console$ helm upgrade --wait --install RELEASE-NAME --values my_values.yml timescale/tobs
Troubleshoot the Deployment
Failed deployments surface as pods stuck in a crash loop, and the cause is usually visible in the cluster events or the pod logs. Work from the cluster-wide events down to the individual pod.
List cluster events in chronological order.
console$ kubectl get events --sort-by='.metadata.creationTimestamp'
Describe a failing pod to inspect its state and recent events. Replace
POD-NAMEwith the name of the pod.console$ kubectl describe pod POD-NAME
View the logs of a failing pod. Replace
POD-NAMEwith the name of the pod.console$ kubectl logs POD-NAME
Resolve a Promscale Authentication Failure
The Promscale pod stores its own copy of the database password. When that copy falls out of sync with the TimescaleDB superuser password, Promscale fails to connect and enters a crash loop.
View the Promscale pod log. Replace
POD-NAMEwith your Promscale pod name.console$ kubectl logs POD-NAME
A password mismatch produces the following error.
password authentication failed for user \"postgres\" (SQLSTATE 28P01))Read the superuser password from the credentials secret.
console$ kubectl get secrets tobs-credentials -o jsonpath="{.data.PATRONI_SUPERUSER_PASSWORD}"
Edit the Promscale secret and set the
PROMSCALE_DB_PASSWORDkey to the value from the previous step.console$ kubectl edit secrets tobs-promscale
Delete the Promscale pod so that the deployment recreates it with the corrected secret. Replace
POD-NAMEwith your Promscale pod name.console$ kubectl delete pod POD-NAME
Verify that the replacement pod reaches a
Runningstatus.console$ kubectl get pods
Conclusion
You have installed the tobs observability stack in a Vultr Kubernetes Engine cluster, configured it to store long-term metrics in TimescaleDB with Vultr Object Storage as the backup target, and resolved the most common deployment failure. Because the project is archived, treat this deployment as a short-term or evaluation setup and plan a migration to a maintained stack. For more information, visit the tobs repository.