Skip to content

Commit 37d0f71

Browse files
authored
add prometheus-adapter to the robot part of the prometheus app (#640)
it will provide Kubernetes metrics API for 'kubectl top pods' and other consumers
1 parent 46d3e7f commit 37d0f71

2 files changed

Lines changed: 370 additions & 0 deletions

File tree

Lines changed: 358 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,358 @@
1+
apiVersion: apiregistration.k8s.io/v1
2+
kind: APIService
3+
metadata:
4+
labels:
5+
app.kubernetes.io/component: metrics-adapter
6+
app.kubernetes.io/name: prometheus-adapter
7+
app.kubernetes.io/version: 0.12.0
8+
name: v1beta1.metrics.k8s.io
9+
spec:
10+
group: metrics.k8s.io
11+
groupPriorityMinimum: 100
12+
insecureSkipTLSVerify: true
13+
service:
14+
name: prometheus-adapter
15+
namespace: {{ .Release.Namespace }}
16+
version: v1beta1
17+
versionPriority: 100
18+
---
19+
apiVersion: rbac.authorization.k8s.io/v1
20+
kind: ClusterRole
21+
metadata:
22+
labels:
23+
app.kubernetes.io/component: metrics-adapter
24+
app.kubernetes.io/name: prometheus-adapter
25+
app.kubernetes.io/version: 0.12.0
26+
rbac.authorization.k8s.io/aggregate-to-admin: "true"
27+
rbac.authorization.k8s.io/aggregate-to-edit: "true"
28+
rbac.authorization.k8s.io/aggregate-to-view: "true"
29+
name: system:aggregated-metrics-reader
30+
namespace: {{ .Release.Namespace }}
31+
rules:
32+
- apiGroups:
33+
- metrics.k8s.io
34+
resources:
35+
- pods
36+
- nodes
37+
verbs:
38+
- get
39+
- list
40+
- watch
41+
---
42+
apiVersion: rbac.authorization.k8s.io/v1
43+
kind: ClusterRoleBinding
44+
metadata:
45+
labels:
46+
app.kubernetes.io/component: metrics-adapter
47+
app.kubernetes.io/name: prometheus-adapter
48+
app.kubernetes.io/version: 0.12.0
49+
name: resource-metrics:system:auth-delegator
50+
namespace: {{ .Release.Namespace }}
51+
roleRef:
52+
apiGroup: rbac.authorization.k8s.io
53+
kind: ClusterRole
54+
name: system:auth-delegator
55+
subjects:
56+
- kind: ServiceAccount
57+
name: prometheus-adapter
58+
namespace: {{ .Release.Namespace }}
59+
---
60+
apiVersion: rbac.authorization.k8s.io/v1
61+
kind: ClusterRoleBinding
62+
metadata:
63+
name: hpa-controller-custom-metrics
64+
labels:
65+
app.kubernetes.io/component: metrics-adapter
66+
app.kubernetes.io/name: prometheus-adapter
67+
roleRef:
68+
apiGroup: rbac.authorization.k8s.io
69+
kind: ClusterRole
70+
name: custom-metrics-server-resources
71+
subjects:
72+
- kind: ServiceAccount
73+
name: horizontal-pod-autoscaler
74+
namespace: kube-system
75+
---
76+
apiVersion: rbac.authorization.k8s.io/v1
77+
kind: ClusterRoleBinding
78+
metadata:
79+
labels:
80+
app.kubernetes.io/component: metrics-adapter
81+
app.kubernetes.io/name: prometheus-adapter
82+
app.kubernetes.io/version: 0.12.0
83+
name: prometheus-adapter
84+
namespace: {{ .Release.Namespace }}
85+
roleRef:
86+
apiGroup: rbac.authorization.k8s.io
87+
kind: ClusterRole
88+
name: prometheus-adapter
89+
subjects:
90+
- kind: ServiceAccount
91+
name: prometheus-adapter
92+
namespace: {{ .Release.Namespace }}
93+
---
94+
apiVersion: rbac.authorization.k8s.io/v1
95+
kind: ClusterRole
96+
metadata:
97+
labels:
98+
app.kubernetes.io/component: metrics-adapter
99+
app.kubernetes.io/name: prometheus-adapter
100+
app.kubernetes.io/version: 0.12.0
101+
name: resource-metrics-server-resources
102+
rules:
103+
- apiGroups:
104+
- metrics.k8s.io
105+
resources:
106+
- '*'
107+
verbs:
108+
- '*'
109+
---
110+
apiVersion: rbac.authorization.k8s.io/v1
111+
kind: ClusterRole
112+
metadata:
113+
labels:
114+
app.kubernetes.io/component: metrics-adapter
115+
app.kubernetes.io/name: prometheus-adapter
116+
app.kubernetes.io/version: 0.12.0
117+
name: prometheus-adapter
118+
rules:
119+
- apiGroups:
120+
- ""
121+
resources:
122+
- nodes
123+
- namespaces
124+
- pods
125+
- services
126+
verbs:
127+
- get
128+
- list
129+
- watch
130+
---
131+
apiVersion: v1
132+
data:
133+
config.yaml: |-
134+
"resourceRules":
135+
"cpu":
136+
"containerLabel": "container"
137+
"containerQuery": |
138+
sum by (<<.GroupBy>>) (
139+
irate (
140+
container_cpu_usage_seconds_total{<<.LabelMatchers>>,container!="",pod!=""}[4m]
141+
)
142+
)
143+
"nodeQuery": |
144+
sum by (<<.GroupBy>>) (
145+
irate(
146+
node_cpu_usage_seconds_total{<<.LabelMatchers>>}[4m]
147+
)
148+
)
149+
"resources":
150+
"overrides":
151+
"namespace":
152+
"resource": "namespace"
153+
"node":
154+
"resource": "node"
155+
"pod":
156+
"resource": "pod"
157+
"memory":
158+
"containerLabel": "container"
159+
"containerQuery": |
160+
sum by (<<.GroupBy>>) (
161+
container_memory_working_set_bytes{<<.LabelMatchers>>,container!="",pod!=""}
162+
)
163+
"nodeQuery": |
164+
sum by (<<.GroupBy>>) (
165+
node_memory_working_set_bytes{<<.LabelMatchers>>}
166+
)
167+
"resources":
168+
"overrides":
169+
"node":
170+
"resource": "node"
171+
"namespace":
172+
"resource": "namespace"
173+
"pod":
174+
"resource": "pod"
175+
"window": "5m"
176+
kind: ConfigMap
177+
metadata:
178+
labels:
179+
app.kubernetes.io/component: metrics-adapter
180+
app.kubernetes.io/name: prometheus-adapter
181+
app.kubernetes.io/version: 0.12.0
182+
name: adapter-config
183+
namespace: {{ .Release.Namespace }}
184+
---
185+
apiVersion: apps/v1
186+
kind: Deployment
187+
metadata:
188+
labels:
189+
app.kubernetes.io/component: metrics-adapter
190+
app.kubernetes.io/name: prometheus-adapter
191+
app.kubernetes.io/version: 0.12.0
192+
name: prometheus-adapter
193+
namespace: {{ .Release.Namespace }}
194+
spec:
195+
replicas: 1
196+
selector:
197+
matchLabels:
198+
app.kubernetes.io/component: metrics-adapter
199+
app.kubernetes.io/name: prometheus-adapter
200+
strategy:
201+
rollingUpdate:
202+
maxSurge: 1
203+
maxUnavailable: 1
204+
template:
205+
metadata:
206+
labels:
207+
app.kubernetes.io/component: metrics-adapter
208+
app.kubernetes.io/name: prometheus-adapter
209+
app.kubernetes.io/version: 0.12.0
210+
spec:
211+
automountServiceAccountToken: true
212+
containers:
213+
- args:
214+
- --cert-dir=/var/run/serving-cert
215+
- --config=/etc/adapter/config.yaml
216+
- --metrics-relist-interval=1m
217+
- --prometheus-url=http://kube-prometheus.{{ .Release.Namespace }}.svc:9090/
218+
- --secure-port=6443
219+
- --tls-cipher-suites=TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA
220+
image: registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.12.0
221+
livenessProbe:
222+
failureThreshold: 5
223+
httpGet:
224+
path: /livez
225+
port: https
226+
scheme: HTTPS
227+
initialDelaySeconds: 30
228+
periodSeconds: 5
229+
name: prometheus-adapter
230+
ports:
231+
- containerPort: 6443
232+
name: https
233+
readinessProbe:
234+
failureThreshold: 5
235+
httpGet:
236+
path: /readyz
237+
port: https
238+
scheme: HTTPS
239+
initialDelaySeconds: 30
240+
periodSeconds: 5
241+
resources:
242+
requests:
243+
cpu: 102m
244+
memory: 180Mi
245+
securityContext:
246+
allowPrivilegeEscalation: false
247+
capabilities:
248+
drop:
249+
- ALL
250+
readOnlyRootFilesystem: true
251+
terminationMessagePolicy: FallbackToLogsOnError
252+
volumeMounts:
253+
- mountPath: /tmp
254+
name: tmpfs
255+
readOnly: false
256+
- mountPath: /var/run/serving-cert
257+
name: volume-serving-cert
258+
readOnly: false
259+
- mountPath: /etc/adapter
260+
name: config
261+
readOnly: false
262+
nodeSelector:
263+
kubernetes.io/os: linux
264+
securityContext: {}
265+
serviceAccountName: prometheus-adapter
266+
volumes:
267+
- emptyDir: {}
268+
name: tmpfs
269+
- emptyDir: {}
270+
name: volume-serving-cert
271+
- configMap:
272+
name: adapter-config
273+
name: config
274+
---
275+
apiVersion: networking.k8s.io/v1
276+
kind: NetworkPolicy
277+
metadata:
278+
labels:
279+
app.kubernetes.io/component: metrics-adapter
280+
app.kubernetes.io/name: prometheus-adapter
281+
app.kubernetes.io/version: 0.12.0
282+
name: prometheus-adapter
283+
namespace: {{ .Release.Namespace }}
284+
spec:
285+
egress:
286+
- {}
287+
ingress:
288+
- {}
289+
podSelector:
290+
matchLabels:
291+
app.kubernetes.io/component: metrics-adapter
292+
app.kubernetes.io/name: prometheus-adapter
293+
policyTypes:
294+
- Egress
295+
- Ingress
296+
---
297+
apiVersion: policy/v1
298+
kind: PodDisruptionBudget
299+
metadata:
300+
labels:
301+
app.kubernetes.io/component: metrics-adapter
302+
app.kubernetes.io/name: prometheus-adapter
303+
app.kubernetes.io/version: 0.12.0
304+
name: prometheus-adapter
305+
namespace: {{ .Release.Namespace }}
306+
spec:
307+
minAvailable: 1
308+
selector:
309+
matchLabels:
310+
app.kubernetes.io/component: metrics-adapter
311+
app.kubernetes.io/name: prometheus-adapter
312+
---
313+
apiVersion: rbac.authorization.k8s.io/v1
314+
kind: RoleBinding
315+
metadata:
316+
labels:
317+
app.kubernetes.io/component: metrics-adapter
318+
app.kubernetes.io/name: prometheus-adapter
319+
app.kubernetes.io/version: 0.12.0
320+
name: resource-metrics-auth-reader
321+
namespace: kube-system
322+
roleRef:
323+
apiGroup: rbac.authorization.k8s.io
324+
kind: Role
325+
name: extension-apiserver-authentication-reader
326+
subjects:
327+
- kind: ServiceAccount
328+
name: prometheus-adapter
329+
namespace: {{ .Release.Namespace }}
330+
---
331+
apiVersion: v1
332+
automountServiceAccountToken: false
333+
kind: ServiceAccount
334+
metadata:
335+
labels:
336+
app.kubernetes.io/component: metrics-adapter
337+
app.kubernetes.io/name: prometheus-adapter
338+
app.kubernetes.io/version: 0.12.0
339+
name: prometheus-adapter
340+
namespace: {{ .Release.Namespace }}
341+
---
342+
apiVersion: v1
343+
kind: Service
344+
metadata:
345+
labels:
346+
app.kubernetes.io/component: metrics-adapter
347+
app.kubernetes.io/name: prometheus-adapter
348+
app.kubernetes.io/version: 0.12.0
349+
name: prometheus-adapter
350+
namespace: {{ .Release.Namespace }}
351+
spec:
352+
ports:
353+
- name: https
354+
port: 443
355+
targetPort: 6443
356+
selector:
357+
app.kubernetes.io/component: metrics-adapter
358+
app.kubernetes.io/name: prometheus-adapter
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
3+
VERSION="0.12.0"
4+
OUT="robot/prometheus-adapter.yaml"
5+
wget https://github.com/kubernetes-sigs/prometheus-adapter/archive/refs/tags/v"${VERSION}".tar.gz
6+
tar xvzf v"${VERSION}".tar.gz
7+
8+
awk 'FNR==1 && NR>1 {print "---"}{print}' "prometheus-adapter-${VERSION}/deploy/manifests/"*.yaml > "${OUT}"
9+
sed -i 's#replicas: 2#replicas: 1#g' "${OUT}"
10+
sed -i 's#namespace: monitoring#namespace: {{ .Release.Namespace }}#g' "${OUT}"
11+
sed -i 's#https://prometheus.monitoring.svc#http://kube-prometheus.{{ .Release.Namespace }}.svc#g' "${OUT}"
12+

0 commit comments

Comments
 (0)