diff --git a/monitoring/README.md b/monitoring/README.md new file mode 100644 index 00000000..37149786 --- /dev/null +++ b/monitoring/README.md @@ -0,0 +1,52 @@ +Heapster +=========== + +Heapster enables monitoring of Kubernetes Clusters using [cAdvisor](https://github.com/google/cadvisor). It currently works only on GCE. + +#####Run Heapster in a Kubernetes cluster with an Influxdb backend and [Grafana](http://grafana.org/docs/features/influxdb) + +**Step 1: Setup Kube cluster** + +Fork the Kubernetes repository and [turn up a Kubernetes cluster](https://github.com/GoogleCloudPlatform/kubernetes-new#contents), if you haven't already. Make sure kubectl.sh is exported. + +**Step 2: Start a Pod with Influxdb, grafana and elasticsearch** + +```shell +$ kubectl.sh create -f deploy/influx-grafana-pod.json +``` + +**Step 3: Start Influxdb service** + +```shell +$ kubectl.sh create -f deploy/influx-grafana-service.json +``` + +**Step 4: Update firewall rules** + +Open up ports tcp:80,8083,8086,9200. +```shell +$ gcutil addfirewall --allowed=tcp:80,tcp:8083,tcp:8086,tcp:9200 --target_tags=kubernetes-minion heapster +``` + +**Step 5: Start Heapster Pod** + +```shell +$ kubectl.sh create -f deploy/heapster-pod.json +``` + +Verify that all the pods and services are up and running: + +```shell +$ kubectl.sh get pods +``` +```shell +$ kubectl.sh get services +``` + +To start monitoring the cluster using grafana, find out the the external IP of the minion where the 'influx-grafana' Pod is running from the output of `kubectl.sh get pods`, and visit `http://:80`. + +To access the Influxdb UI visit `http://:8083`. + +#####Hints +* Grafana's default username and password is 'admin'. You can change that by modifying the grafana container [here](influx-grafana/deploy/grafana-influxdb-pod.json) +* To enable memory and swap accounting on the minions follow the instructions [here](https://docs.docker.com/installation/ubuntulinux/#memory-and-swap-accounting) diff --git a/monitoring/heapster-pod.json b/monitoring/heapster-pod.json new file mode 100644 index 00000000..7ecbc505 --- /dev/null +++ b/monitoring/heapster-pod.json @@ -0,0 +1,18 @@ +{ + "id": "heapster", + "kind": "Pod", + "apiVersion": "v1beta1", + "desiredState": { + "manifest": { + "version": "v1beta1", + "id": "heapster", + "containers": [{ + "name": "heapster", + "image": "kubernetes/heapster", + }] + } + }, + "labels": { + "name": "heapster", + } +} diff --git a/monitoring/influx-grafana-pod.json b/monitoring/influx-grafana-pod.json new file mode 100644 index 00000000..001ecdda --- /dev/null +++ b/monitoring/influx-grafana-pod.json @@ -0,0 +1,34 @@ +{ + "id": "influx-grafana", + "kind": "Pod", + "apiVersion": "v1beta1", + "desiredState": { + "manifest": { + "version": "v1beta1", + "id": "influx-grafana", + "containers": [{ + "name": "influxdb", + "image": "kubernetes/heapster_influxdb", + "ports": [ + {"containerPort": 8083, "hostPort": 8083}, + {"containerPort": 8086, "hostPort": 8086}, + {"containerPort": 8090, "hostPort": 8090}, + {"containerPort": 8099, "hostPort": 8099}] + }, { + "name": "grafana", + "image": "kubernetes/heapster_grafana", + "ports": [{"containerPort": 80, "hostPort": 80}], + "env": [{"name": HTTP_USER, "value": admin}, + {"name": HTTP_PASS, "value": admin}], + }, { + "name": "elasticsearch", + "image": "dockerfile/elasticsearch", + "ports": [{"containerPort": 9200, "hostPort": 9200}, + {"containerPort": 9300}], + }] + }, + }, + "labels": { + "name": "influxdb", + } +} diff --git a/monitoring/influx-grafana-service.json b/monitoring/influx-grafana-service.json new file mode 100644 index 00000000..18e7bca4 --- /dev/null +++ b/monitoring/influx-grafana-service.json @@ -0,0 +1,10 @@ +{ + "id": "influx-master", + "kind": "Service", + "apiVersion": "v1beta1", + "port": 8085, + "containerPort": 8086, + "provider": "kubernetes-default", + "component": "influxdb" + "selector": { "name": "influxdb" } +} \ No newline at end of file