Skip to content

Commit e86a9f0

Browse files
feat(helm): add autoscaling to helm chart
1 parent 808f00c commit e86a9f0

9 files changed

Lines changed: 164 additions & 0 deletions

File tree

charts/metrics-server/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,17 @@ The following table lists the configurable parameters of the _Metrics Server_ ch
5959
| `service.port` | Service port. | `443` |
6060
| `service.annotations` | Annotations to add to the service. | `{}` |
6161
| `service.labels` | Labels to add to the service. | `{}` |
62+
| `addonResizer.enabled` | If `true`, run the addon-resizer as a sidecar to automatically scale resource requests with cluster size. | `false` |
63+
| `addonResizer.image.repository` | addon-resizer image repository | registry.k8s.io/autoscaling/addon-resizer |
64+
| `addonResizer.image.tag` | addon-resizer image tag | 1.8.14 |
65+
| `addonResizer.resources` | Resource requests and limits for the _nanny_ container. | `{limits: {cpu: 40m, memory: 25Mi}, requests: {cpu: 40m, memory: 25Mi}}` |
66+
| `addonResizer.nanny.cpu` | The base CPU requirement. | 20m |
67+
| `addonResizer.nanny.extraCPU` | The amount of CPU to add per node. | 1m |
68+
| `addonResizer.nanny.extraMemory` | The amount of memory to add per node. | 2Mi |
69+
| `addonResizer.nanny.memory` | The base memory requirement. | 15Mi |
70+
| `addonResizer.nanny.minClusterSize` | Specifies the smallest number of nodes resources will be scaled to. | 10 |
71+
| `addonResizer.nanny.pollPeriod` | The time, in milliseconds, to poll the dependent container. | 300000 |
72+
| `addonResizer.nanny.threshold` | A number between 0-100. The dependent's resources are rewritten when they deviate from expected by more than threshold. | 5 |
6273
| `metrics.enabled` | If `true`, allow unauthenticated access to `/metrics`. | `false` |
6374
| `serviceMonitor.enabled` | If `true`, create a _Prometheus_ service monitor. This needs `metrics.enabled` to be `true`. | `false` |
6475
| `serviceMonitor.additionalLabels` | Additional labels to be set on the ServiceMonitor. | `{}` |

charts/metrics-server/templates/_helpers.tpl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ The image to use
7171
{{- printf "%s:%s" .Values.image.repository (default (printf "v%s" .Chart.AppVersion) .Values.image.tag) }}
7272
{{- end }}
7373

74+
{{/*
75+
The image to use for the addon resizer
76+
*/}}
77+
{{- define "metrics-server.addonResizer.image" -}}
78+
{{- printf "%s:%s" .Values.addonResizer.image.repository .Values.addonResizer.image.tag }}
79+
{{- end }}
80+
7481
{{/* Get PodDisruptionBudget API Version */}}
7582
{{- define "metrics-server.pdb.apiVersion" -}}
7683
{{- if and (.Capabilities.APIVersions.Has "policy/v1") (semverCompare ">= 1.21-0" .Capabilities.KubeVersion.Version) -}}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{{- if and .Values.rbac.create .Values.addonResizer.enabled -}}
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: ClusterRole
4+
metadata:
5+
name: {{ printf "system:%s-nanny" (include "metrics-server.fullname" .) }}
6+
labels:
7+
{{- include "metrics-server.labels" . | nindent 4 }}
8+
rules:
9+
- nonResourceURLs:
10+
- /metrics
11+
verbs:
12+
- get
13+
{{- end -}}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{{- if .Values.rbac.create -}}
2+
{{- if .Values.addonResizer.enabled -}}
3+
apiVersion: rbac.authorization.k8s.io/v1
4+
kind: ClusterRoleBinding
5+
metadata:
6+
name: {{ printf "system:%s-nanny" (include "metrics-server.fullname" .) }}
7+
labels:
8+
{{- include "metrics-server.labels" . | nindent 4 }}
9+
roleRef:
10+
apiGroup: rbac.authorization.k8s.io
11+
kind: ClusterRole
12+
name: system:{{ template "metrics-server.fullname" . }}-nanny
13+
subjects:
14+
- kind: ServiceAccount
15+
name: {{ include "metrics-server.serviceAccountName" . }}
16+
namespace: {{ .Release.Namespace }}
17+
{{- end -}}
18+
{{- end -}}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{{- if .Values.addonResizer.enabled -}}
2+
apiVersion: v1
3+
kind: ConfigMap
4+
metadata:
5+
name: {{ include "metrics-server.fullname" .}}-nanny-config
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
{{- include "metrics-server.labels" . | nindent 4 }}
9+
data:
10+
NannyConfiguration: |-
11+
apiVersion: nannyconfig/v1alpha1
12+
kind: NannyConfiguration
13+
baseCPU: {{ .Values.addonResizer.nanny.cpu }}
14+
cpuPerNode: {{ .Values.addonResizer.nanny.extraCpu }}
15+
baseMemory: {{ .Values.addonResizer.nanny.memory }}
16+
memoryPerNode: {{ .Values.addonResizer.nanny.extraMemory }}
17+
{{- end -}}

charts/metrics-server/templates/deployment.yaml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,37 @@ spec:
8787
resources:
8888
{{- toYaml . | nindent 12 }}
8989
{{- end }}
90+
{{- if .Values.addonResizer.enabled }}
91+
- name: metrics-server-nanny
92+
image: {{ include "metrics-server.addonResizer.image" . }}
93+
env:
94+
- name: MY_POD_NAME
95+
valueFrom:
96+
fieldRef:
97+
fieldPath: metadata.name
98+
- name: MY_POD_NAMESPACE
99+
valueFrom:
100+
fieldRef:
101+
fieldPath: metadata.namespace
102+
command:
103+
- /pod_nanny
104+
- --config-dir=/etc/config
105+
- --deployment={{ include "metrics-server.fullname" . }}
106+
- --threshold={{ .Values.addonResizer.nanny.threshold }}
107+
- --deployment={{ include "metrics-server.fullname" . }}
108+
- --container=metrics-server
109+
- --poll-period={{ .Values.addonResizer.nanny.pollPeriod }}
110+
- --estimator=exponential
111+
- --minClusterSize={{ .Values.addonResizer.nanny.minClusterSize }}
112+
- --use-metrics=true
113+
volumeMounts:
114+
- name: nanny-config-volume
115+
mountPath: /etc/config
116+
{{- with .Values.addonResizer.resources }}
117+
resources:
118+
{{- toYaml . | nindent 12 }}
119+
{{- end }}
120+
{{- end }}
90121
volumes:
91122
- name: tmp
92123
emptyDir: {}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{{- if .Values.rbac.create -}}
2+
{{- if .Values.addonResizer.enabled -}}
3+
apiVersion: rbac.authorization.k8s.io/v1
4+
kind: Role
5+
metadata:
6+
name: {{ printf "system:%s-nanny" (include "metrics-server.fullname" .) }}
7+
namespace: {{ .Release.Namespace }}
8+
labels:
9+
{{- include "metrics-server.labels" . | nindent 4 }}
10+
rules:
11+
- apiGroups:
12+
- ""
13+
resources:
14+
- pods
15+
verbs:
16+
- get
17+
- apiGroups:
18+
- apps
19+
resources:
20+
- deployments
21+
resourceNames:
22+
- metrics-server
23+
verbs:
24+
- get
25+
- patch
26+
{{- end -}}
27+
{{- end -}}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{{- if .Values.rbac.create -}}
2+
{{- if .Values.addonResizer.enabled -}}
3+
apiVersion: rbac.authorization.k8s.io/v1
4+
kind: RoleBinding
5+
metadata:
6+
name: {{ printf "%s-nanny" (include "metrics-server.fullname" .) }}
7+
namespace: kube-system
8+
labels:
9+
{{- include "metrics-server.labels" . | nindent 4 }}
10+
roleRef:
11+
apiGroup: rbac.authorization.k8s.io
12+
kind: Role
13+
name: metrics-server-nanny
14+
subjects:
15+
- kind: ServiceAccount
16+
name: {{ include "metrics-server.serviceAccountName" . }}
17+
namespace: {{ .Release.Namespace }}
18+
{{- end -}}
19+
{{- end -}}

charts/metrics-server/values.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,27 @@ service:
118118
# kubernetes.io/cluster-service: "true"
119119
# kubernetes.io/name: "Metrics-server"
120120

121+
addonResizer:
122+
enabled: false
123+
image:
124+
repository: registry.k8s.io/autoscaling/addon-resizer
125+
tag: 1.8.14
126+
resources:
127+
limits:
128+
cpu: 40m
129+
memory: 25Mi
130+
requests:
131+
cpu: 40m
132+
memory: 25Mi
133+
nanny:
134+
cpu: 20m
135+
extraCpu: 1m
136+
extraMemory: 2Mi
137+
memory: 15Mi
138+
minClusterSize: 10
139+
pollPeriod: 300000
140+
threshold: 5
141+
121142
metrics:
122143
enabled: false
123144

0 commit comments

Comments
 (0)