Skip to content
This repository was archived by the owner on Apr 19, 2021. It is now read-only.

Commit dbb985a

Browse files
committed
Add monitoring plugin.
[Resolves #3]
1 parent 2dc70aa commit dbb985a

10 files changed

+306
-0
lines changed

jobs/create-kubernetes-monitoring/monit

Whitespace-only changes.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
name: create-kubernetes-monitoring
3+
templates:
4+
bin/run.erb: bin/run
5+
manifests/grafana-service.yaml.erb: manifests/grafana-service.yaml
6+
manifests/heapster-controller.yaml.erb: manifests/heapster-controller.yaml
7+
manifests/heapster-service.yaml.erb: manifests/heapster-service.yaml
8+
manifests/influxdb-grafana-controller.yaml.erb: manifests/influxdb-grafana-controller.yaml
9+
manifests/influxdb-service.yaml.erb: manifests/influxdb-service.yaml
10+
packages:
11+
- kubernetes
12+
13+
properties:
14+
apiserver.host:
15+
description: The host running the apiserver to connect to
16+
17+
nodes:
18+
description: List of Kubernetes nodes
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
PATH=$PATH:/var/vcap/packages/kubernetes/bin
6+
API_HOST=<%= p('apiserver.host') %>
7+
8+
kubectl -s http://${API_HOST}:8080 apply -f /var/vcap/jobs/create-kubernetes-monitoring/manifests
9+
10+
counter=60
11+
until [ $counter -le 0 ]; do
12+
if kubectl -s http://${API_HOST}:8080 get pod --namespace=kube-system | grep 'heapster-.* 4/4 ' && \
13+
kubectl -s http://${API_HOST}:8080 get pod --namespace=kube-system | grep 'monitoring-influxdb-grafana-.* 2/2 '
14+
then
15+
exit 0
16+
fi
17+
sleep 5
18+
let counter-=1
19+
done
20+
21+
echo "Failed to start monitoring plugin"
22+
exit 1
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: monitoring-grafana
5+
namespace: kube-system
6+
labels:
7+
kubernetes.io/cluster-service: "true"
8+
kubernetes.io/name: "Grafana"
9+
spec:
10+
type: LoadBalancer
11+
ports:
12+
- port: 80
13+
targetPort: 3000
14+
selector:
15+
k8s-app: influxGrafana
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<%
2+
base_metrics_memory = '140Mi'
3+
metrics_memory = base_metrics_memory
4+
base_metrics_cpu = '80m'
5+
metrics_cpu = base_metrics_cpu
6+
base_eventer_memory = '190Mi'
7+
eventer_memory = base_eventer_memory
8+
metrics_memory_per_node = 4
9+
metrics_cpu_per_node = 0.5
10+
eventer_memory_per_node = 500
11+
num_nodes = p('nodes').length
12+
nanny_memory = '90Mi'
13+
nanny_memory_per_node = 200
14+
if num_nodes >= 0
15+
metrics_memory = "#{200 + num_nodes * metrics_memory_per_node}Mi"
16+
metrics_cpu = "#{80 + num_nodes * metrics_cpu_per_node}m"
17+
eventer_memory = "#{200 * 1024 + num_nodes * eventer_memory_per_node}Ki"
18+
nanny_memory = "#{90 * 1024 + num_nodes * nanny_memory_per_node}Ki"
19+
end
20+
%>
21+
22+
apiVersion: extensions/v1beta1
23+
kind: Deployment
24+
metadata:
25+
name: heapster-v1.2.0-beta.1
26+
namespace: kube-system
27+
labels:
28+
k8s-app: heapster
29+
kubernetes.io/cluster-service: "true"
30+
version: v1.2.0-beta.1
31+
spec:
32+
replicas: 1
33+
selector:
34+
matchLabels:
35+
k8s-app: heapster
36+
version: v1.2.0-beta.1
37+
template:
38+
metadata:
39+
labels:
40+
k8s-app: heapster
41+
version: v1.2.0-beta.1
42+
annotations:
43+
scheduler.alpha.kubernetes.io/critical-pod: ''
44+
scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
45+
spec:
46+
containers:
47+
- image: gcr.io/google_containers/heapster:v1.2.0-beta.1
48+
name: heapster
49+
resources:
50+
# keep request = limit to keep this container in guaranteed class
51+
limits:
52+
cpu: <%= metrics_cpu %>
53+
memory: <%= metrics_memory %>
54+
requests:
55+
cpu: <%= metrics_cpu %>
56+
memory: <%= metrics_memory %>
57+
command:
58+
- /heapster
59+
- --source=kubernetes.summary_api:''
60+
- --sink=influxdb:http://monitoring-influxdb:8086
61+
- image: gcr.io/google_containers/heapster:v1.2.0-beta.1
62+
name: eventer
63+
resources:
64+
# keep request = limit to keep this container in guaranteed class
65+
limits:
66+
cpu: 100m
67+
memory: <%= eventer_memory %>
68+
requests:
69+
cpu: 100m
70+
memory: <%= eventer_memory %>
71+
command:
72+
- /eventer
73+
- --source=kubernetes:''
74+
- --sink=influxdb:http://monitoring-influxdb:8086
75+
- image: gcr.io/google_containers/addon-resizer:1.3
76+
name: heapster-nanny
77+
resources:
78+
limits:
79+
cpu: 50m
80+
memory: <%= nanny_memory %>
81+
requests:
82+
cpu: 50m
83+
memory: <%= nanny_memory %>
84+
env:
85+
- name: MY_POD_NAME
86+
valueFrom:
87+
fieldRef:
88+
fieldPath: metadata.name
89+
- name: MY_POD_NAMESPACE
90+
valueFrom:
91+
fieldRef:
92+
fieldPath: metadata.namespace
93+
command:
94+
- /pod_nanny
95+
- --cpu=<%= base_metrics_cpu %>
96+
- --extra-cpu=<%= metrics_cpu_per_node %>m
97+
- --memory=<%= base_metrics_memory %>
98+
- --extra-memory=<%= metrics_memory_per_node %>Mi
99+
- --threshold=5
100+
- --deployment=heapster-v1.2.0-beta.1
101+
- --container=heapster
102+
- --poll-period=300000
103+
- --estimator=exponential
104+
- image: gcr.io/google_containers/addon-resizer:1.3
105+
name: eventer-nanny
106+
resources:
107+
limits:
108+
cpu: 50m
109+
memory: <%= nanny_memory %>
110+
requests:
111+
cpu: 50m
112+
memory: <%= nanny_memory %>
113+
env:
114+
- name: MY_POD_NAME
115+
valueFrom:
116+
fieldRef:
117+
fieldPath: metadata.name
118+
- name: MY_POD_NAMESPACE
119+
valueFrom:
120+
fieldRef:
121+
fieldPath: metadata.namespace
122+
command:
123+
- /pod_nanny
124+
- --cpu=100m
125+
- --extra-cpu=0m
126+
- --memory=<%= base_eventer_memory %>
127+
- --extra-memory=<%= eventer_memory_per_node %>Ki
128+
- --threshold=5
129+
- --deployment=heapster-v1.2.0-beta.1
130+
- --container=eventer
131+
- --poll-period=300000
132+
- --estimator=exponential
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
kind: Service
2+
apiVersion: v1
3+
metadata:
4+
name: heapster
5+
namespace: kube-system
6+
labels:
7+
kubernetes.io/cluster-service: "true"
8+
kubernetes.io/name: "Heapster"
9+
spec:
10+
ports:
11+
- port: 80
12+
targetPort: 8082
13+
selector:
14+
k8s-app: heapster
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
apiVersion: v1
2+
kind: ReplicationController
3+
metadata:
4+
name: monitoring-influxdb-grafana-v3
5+
namespace: kube-system
6+
labels:
7+
k8s-app: influxGrafana
8+
version: v3
9+
kubernetes.io/cluster-service: "true"
10+
spec:
11+
replicas: 1
12+
selector:
13+
k8s-app: influxGrafana
14+
version: v3
15+
template:
16+
metadata:
17+
labels:
18+
k8s-app: influxGrafana
19+
version: v3
20+
kubernetes.io/cluster-service: "true"
21+
spec:
22+
containers:
23+
- image: gcr.io/google_containers/heapster_influxdb:v0.5
24+
name: influxdb
25+
resources:
26+
# keep request = limit to keep this container in guaranteed class
27+
limits:
28+
cpu: 100m
29+
memory: 500Mi
30+
requests:
31+
cpu: 100m
32+
memory: 500Mi
33+
ports:
34+
- containerPort: 8083
35+
- containerPort: 8086
36+
volumeMounts:
37+
- name: influxdb-persistent-storage
38+
mountPath: /data
39+
- image: gcr.io/google_containers/heapster_grafana:v2.6.0-2
40+
name: grafana
41+
env:
42+
resources:
43+
# keep request = limit to keep this container in guaranteed class
44+
limits:
45+
cpu: 100m
46+
memory: 100Mi
47+
requests:
48+
cpu: 100m
49+
memory: 100Mi
50+
env:
51+
# This variable is required to setup templates in Grafana.
52+
- name: INFLUXDB_SERVICE_URL
53+
value: http://monitoring-influxdb:8086
54+
# The following env variables are required to make Grafana accessible via
55+
# the kubernetes api-server proxy. On production clusters, we recommend
56+
# removing these env variables, setup auth for grafana, and expose the grafana
57+
# service using a LoadBalancer or a public IP.
58+
- name: GF_AUTH_BASIC_ENABLED
59+
value: "false"
60+
- name: GF_AUTH_ANONYMOUS_ENABLED
61+
value: "true"
62+
- name: GF_AUTH_ANONYMOUS_ORG_ROLE
63+
value: Admin
64+
- name: GF_SERVER_ROOT_URL
65+
value: /api/v1/proxy/namespaces/kube-system/services/monitoring-grafana/
66+
volumeMounts:
67+
- name: grafana-persistent-storage
68+
mountPath: /var
69+
volumes:
70+
- name: influxdb-persistent-storage
71+
emptyDir: {}
72+
- name: grafana-persistent-storage
73+
emptyDir: {}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: monitoring-influxdb
5+
namespace: kube-system
6+
labels:
7+
kubernetes.io/cluster-service: "true"
8+
kubernetes.io/name: "InfluxDB"
9+
spec:
10+
ports:
11+
- name: http
12+
port: 8083
13+
targetPort: 8083
14+
- name: api
15+
port: 8086
16+
targetPort: 8086
17+
selector:
18+
k8s-app: influxGrafana

templates/k8s-infrastructure-aws.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ jobs:
5757

5858
properties:
5959
<<: (( merge ))
60+
nodes: (( jobs.master.networks.default.static_ips jobs.minion.networks.default.static_ips ))
6061
apiserver:
6162
<<: (( merge ))
6263
host: (( jobs.master.networks.default.static_ips.[0] ))

templates/k8s-jobs.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,19 @@ jobs:
5656
properties:
5757
networks:
5858
apps: default
59+
60+
- name: create-kubernetes-monitoring
61+
lifecycle: errand
62+
templates:
63+
- {name: create-kubernetes-monitoring, release: kubernetes}
64+
instances: 1
65+
resource_pool: default
66+
networks:
67+
- name: default
68+
properties:
69+
networks:
70+
apps: default
71+
5972
- name: guestbook-example
6073
lifecycle: errand
6174
templates:

0 commit comments

Comments
 (0)