You are looking at the documentation of a prior release. To read the documentation of the latest release, please
visit here.
New to KubeDB? Please start here.
Using Prometheus (CoreOS operator) with KubeDB
This tutorial will show you how to monitor PostgreSQL using Prometheus via CoreOS Prometheus Operator.
Before You Begin
At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using minikube.
Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps here.
To keep things isolated, this tutorial uses a separate namespace called demo
throughout this tutorial.
$ kubectl create ns demo
namespace "demo" created
$ kubectl get ns demo
NAME STATUS AGE
demo Active 5s
Note: Yaml files used in this tutorial are stored in docs/examples/postgres folder in github repository kubedb/cli.
This tutorial assumes that you are familiar with PostgreSQL concept.
Deploy CoreOS-Prometheus Operator
In RBAC enabled cluster
If RBAC is enabled, Run the following command to prepare your cluster for this tutorial:
$ kubectl create -f https://raw.githubusercontent.com/kubedb/cli/0.8.0/docs/examples/monitoring/coreos-operator/rbac/demo-0.yaml
clusterrole "prometheus-operator" created
serviceaccount "prometheus-operator" created
clusterrolebinding "prometheus-operator" created
deployment "prometheus-operator" created
Watch the Deployment’s Pods.
$ kubectl get pods -n demo --watch
NAME READY STATUS RESTARTS AGE
prometheus-operator-79cb9dcd4b-2njgq 1/1 Running 0 2m
This CoreOS-Prometheus operator will create some supported Custom Resource Definition (CRD).
$ kubectl get crd
NAME AGE
alertmanagers.monitoring.coreos.com 11m
prometheuses.monitoring.coreos.com 11m
servicemonitors.monitoring.coreos.com 11m
Once the Prometheus operator CRDs are registered, run the following command to create a Prometheus.
$ kubectl create -f https://raw.githubusercontent.com/kubedb/cli/0.8.0/docs/examples/monitoring/coreos-operator/rbac/demo-1.yaml
clusterrole "prometheus" created
serviceaccount "prometheus" created
clusterrolebinding "prometheus" created
prometheus "prometheus" created
service "prometheus" created
Verify RBAC stuffs
$ kubectl get clusterroles
NAME AGE
prometheus 1m
prometheus-operator 5m
$ kubectl get clusterrolebindings
NAME AGE
prometheus 1m
prometheus-operator 5m
In RBAC not enabled cluster
If RBAC is not enabled, Run the following command to prepare your cluster for this tutorial:
$ https://raw.githubusercontent.com/kubedb/cli/0.8.0/docs/examples/monitoring/coreos-operator/demo-0.yaml
namespace "demo" created
deployment "prometheus-operator" created
Watch the Deployment’s Pods.
$ kubectl get pods -n demo --watch
NAME READY STATUS RESTARTS AGE
prometheus-operator-5dcd844486-nprmk 0/1 ContainerCreating 0 27s
prometheus-operator-5dcd844486-nprmk 1/1 Running 0 46s
This CoreOS-Prometheus operator will create some supported Custom Resource Definition (CRD).
$ kubectl get crd
NAME AGE
alertmanagers.monitoring.coreos.com 45s
prometheuses.monitoring.coreos.com 44s
servicemonitors.monitoring.coreos.com 44s
Once the Prometheus operator CRDs are registered, run the following command to create a Prometheus.
$ https://raw.githubusercontent.com/kubedb/cli/0.8.0/docs/examples/monitoring/coreos-operator/demo-1.yaml
prometheus "prometheus" created
service "prometheus" created
Prometheus Dashboard
Now open prometheus dashboard on browser by running minikube service prometheus-service -n demo
.
Or you can get the URL of prometheus
Service by running following command
$ minikube service prometheus -n demo --url
http://192.168.99.100:30900
Monitor PostgreSQL with CoreOS Prometheus
apiVersion: kubedb.com/v1alpha1
kind: Postgres
metadata:
name: coreos-prom-postgres
namespace: demo
spec:
version: "9.6"
storage:
storageClassName: "standard"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Mi
monitor:
agent: prometheus.io/coreos-operator
prometheus:
namespace: demo
labels:
app: kubedb
interval: 10s
Here,
monitor.agent
indicates the monitoring agent. Currently only valid value currently iscoreos-prometheus-operator
monitor.prometheus
specifies the information for monitoring by prometheusprometheus.namespace
specifies the namespace where ServiceMonitor is created.prometheus.labels
specifies the labels applied to ServiceMonitor.prometheus.port
indicates the port for PostgreSQL exporter endpoint (default is56790
)prometheus.interval
indicates the scraping interval (eg, ’10s')
Now create PostgreSQL with monitoring spec
$ kubedb create -f https://raw.githubusercontent.com/kubedb/cli/0.8.0/docs/examples/postgres/monitoring/coreos-prom-postgres.yaml
postgres "coreos-prom-postgres" created
KubeDB operator will create a ServiceMonitor object once the PostgreSQL is successfully running.
$ kubectl get servicemonitor -n demo
NAME AGE
kubedb-demo-coreos-prom-postgres 1s
Now, if you go the Prometheus Dashboard, you should see that this database endpoint as one of the targets.
Cleaning up
To cleanup the Kubernetes resources created by this tutorial, run:
$ kubectl patch -n demo pg/coreos-prom-postgres -p '{"spec":{"doNotPause":false}}' --type="merge"
$ kubectl delete -n demo pg/coreos-prom-postgres
$ kubectl patch -n demo drmn/coreos-prom-postgres -p '{"spec":{"wipeOut":true}}' --type="merge"
$ kubectl delete -n demo drmn/coreos-prom-postgres
# In rbac enabled cluster,
# $ kubectl delete clusterrolebindings prometheus-operator prometheus
# $ kubectl delete clusterrole prometheus-operator prometheus
$ kubectl delete ns demo
Next Steps
- Monitor your PostgreSQL database with KubeDB using built-in Prometheus.
- Wondering what features are coming next? Please visit here.
- Want to hack on KubeDB? Check our contribution guidelines.