Skip to content

Commit 6c93558

Browse files
authored
adding option to deploy ingester as statefulset (#46)
Signed-off-by: Roger Steneteg <[email protected]>
1 parent 7b56da0 commit 6c93558

File tree

3 files changed

+221
-18
lines changed

3 files changed

+221
-18
lines changed

templates/ingester-dep.yaml

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{{- if not .Values.ingester.statefulSet.enabled -}}
12
apiVersion: apps/v1
23
kind: Deployment
34
metadata:
@@ -29,19 +30,19 @@ spec:
2930
{{- toYaml . | nindent 8 }}
3031
{{- end }}
3132
annotations:
32-
{{- if .Values.useExternalConfig }}
33+
{{- if .Values.useExternalConfig }}
3334
checksum/config: {{ .Values.externalConfigVersion }}
34-
{{- else }}
35+
{{- else }}
3536
checksum/config: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
36-
{{- end}}
37+
{{- end}}
3738
{{- with .Values.ingester.podAnnotations }}
3839
{{- toYaml . | nindent 8 }}
3940
{{- end }}
4041
spec:
4142
serviceAccountName: {{ template "cortex.serviceAccountName" . }}
42-
{{- if .Values.ingester.priorityClassName }}
43+
{{- if .Values.ingester.priorityClassName }}
4344
priorityClassName: {{ .Values.ingester.priorityClassName }}
44-
{{- end }}
45+
{{- end }}
4546
securityContext:
4647
{{- toYaml .Values.ingester.securityContext | nindent 8 }}
4748
initContainers:
@@ -50,7 +51,7 @@ spec:
5051
imagePullSecrets:
5152
{{- range .Values.image.pullSecrets }}
5253
- name: {{ . }}
53-
{{- end}}
54+
{{- end }}
5455
{{- end }}
5556
containers:
5657
- name: {{ .Chart.Name }}
@@ -65,9 +66,9 @@ spec:
6566
{{- if index .Values "memcached-index-write" "enabled" }}
6667
- -store.index-cache-write.memcached.addresses=dns+{{ template "cortex.fullname" . }}-memcached-index-write.{{ .Release.Namespace }}.svc.cluster.local:11211
6768
{{- end }}
68-
{{- range $key, $value := .Values.ingester.extraArgs }}
69+
{{- range $key, $value := .Values.ingester.extraArgs }}
6970
- "-{{ $key }}={{ $value }}"
70-
{{- end }}
71+
{{- end }}
7172
volumeMounts:
7273
{{- if .Values.ingester.extraVolumeMounts }}
7374
{{ toYaml .Values.ingester.extraVolumeMounts | nindent 12}}
@@ -76,7 +77,14 @@ spec:
7677
mountPath: /etc/cortex
7778
- name: storage
7879
mountPath: "/data"
80+
{{- if .Values.ingester.persistentVolume.subPath }}
81+
subPath: {{ .Values.ingester.persistentVolume.subPath }}
82+
{{- else }}
83+
{{- if .Values.ingester.persistence.subPath }}
84+
## DEPRECATED: use persistentVolume.subPath instead
7985
subPath: {{ .Values.ingester.persistence.subPath }}
86+
{{- end }}
87+
{{- end }}
8088
ports:
8189
- name: http-metrics
8290
containerPort: {{ .Values.config.server.http_listen_port }}
@@ -91,11 +99,11 @@ spec:
9199
readOnlyRootFilesystem: true
92100
env:
93101
{{- if .Values.ingester.env }}
94-
{{- toYaml .Values.ingester.env | nindent 12 }}
102+
{{ toYaml .Values.ingester.env | nindent 12 }}
95103
{{- end }}
96-
{{- if .Values.ingester.extraContainers }}
97-
{{ toYaml .Values.ingester.extraContainers | indent 8}}
98-
{{- end }}
104+
{{- with .Values.ingester.extraContainers }}
105+
{{ toYaml . | nindent 8 }}
106+
{{- end }}
99107
nodeSelector:
100108
{{- toYaml .Values.ingester.nodeSelector | nindent 8 }}
101109
affinity:
@@ -106,13 +114,14 @@ spec:
106114
volumes:
107115
- name: config
108116
secret:
109-
{{- if .Values.useExternalConfig }}
117+
{{- if .Values.useExternalConfig }}
110118
secretName: {{ .Values.externalConfigSecretName }}
111-
{{- else }}
119+
{{- else }}
112120
secretName: {{ template "cortex.fullname" . }}
113-
{{- end }}
114-
{{- if .Values.ingester.extraVolumes }}
115-
{{ toYaml .Values.ingester.extraVolumes | indent 8}}
116-
{{- end }}
121+
{{- end }}
122+
{{- if .Values.ingester.extraVolumes }}
123+
{{ toYaml .Values.ingester.extraVolumes | nindent 8}}
124+
{{- end }}
117125
- name: storage
118126
emptyDir: {}
127+
{{- end -}}

templates/ingester-statefulset.yaml

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
{{- if .Values.ingester.statefulSet.enabled -}}
2+
apiVersion: apps/v1
3+
kind: StatefulSet
4+
metadata:
5+
name: {{ template "cortex.fullname" . }}-ingester
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
app: {{ template "cortex.name" . }}-ingester
9+
chart: {{ template "cortex.chart" . }}
10+
release: {{ .Release.Name }}
11+
heritage: {{ .Release.Service }}
12+
annotations:
13+
{{- toYaml .Values.ingester.annotations | nindent 4 }}
14+
spec:
15+
replicas: {{ .Values.ingester.replicas }}
16+
selector:
17+
matchLabels:
18+
app: {{ template "cortex.name" . }}-ingester
19+
release: {{ .Release.Name }}
20+
serviceName: {{ template "cortex.fullname" . }}-ingester
21+
{{- if .Values.ingester.persistentVolume.enabled }}
22+
volumeClaimTemplates:
23+
- metadata:
24+
name: storage
25+
{{- if .Values.ingester.persistentVolume.annotations }}
26+
annotations:
27+
{{ toYaml .Values.ingester.persistentVolume.annotations | nindent 10 }}
28+
{{- end }}
29+
spec:
30+
{{- if .Values.ingester.persistentVolume.storageClass }}
31+
{{- if (eq "-" .Values.ingester.persistentVolume.storageClass) }}
32+
storageClassName: ""
33+
{{- else }}
34+
storageClassName: "{{ .Values.ingester.persistentVolume.storageClass }}"
35+
{{- end }}
36+
{{- end }}
37+
accessModes:
38+
{{ toYaml .Values.ingester.persistentVolume.accessModes | nindent 10 }}
39+
resources:
40+
requests:
41+
storage: "{{ .Values.ingester.persistentVolume.size }}"
42+
{{- end }}
43+
template:
44+
metadata:
45+
labels:
46+
app: {{ template "cortex.name" . }}-ingester
47+
name: {{ template "cortex.name" . }}-ingester
48+
target: ingester
49+
release: {{ .Release.Name }}
50+
{{- with .Values.ingester.podLabels }}
51+
{{- toYaml . | nindent 8 }}
52+
{{- end }}
53+
annotations:
54+
{{- if .Values.useExternalConfig }}
55+
checksum/config: {{ .Values.externalConfigVersion }}
56+
{{- else }}
57+
checksum/config: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
58+
{{- end }}
59+
{{- with .Values.ingester.podAnnotations }}
60+
{{- toYaml . | nindent 8 }}
61+
{{- end }}
62+
spec:
63+
serviceAccountName: {{ template "cortex.serviceAccountName" . }}
64+
{{- if .Values.ingester.priorityClassName }}
65+
priorityClassName: {{ .Values.ingester.priorityClassName }}
66+
{{- end }}
67+
securityContext:
68+
{{- toYaml .Values.ingester.securityContext | nindent 8 }}
69+
initContainers:
70+
{{- toYaml .Values.ingester.initContainers | nindent 8 }}
71+
{{- if .Values.image.pullSecrets }}
72+
imagePullSecrets:
73+
{{- range .Values.image.pullSecrets }}
74+
- name: {{ . }}
75+
{{- end }}
76+
{{- end }}
77+
nodeSelector:
78+
{{- toYaml .Values.ingester.nodeSelector | nindent 8 }}
79+
affinity:
80+
{{- toYaml .Values.ingester.affinity | nindent 8 }}
81+
tolerations:
82+
{{- toYaml .Values.ingester.tolerations | nindent 8 }}
83+
terminationGracePeriodSeconds: {{ .Values.ingester.terminationGracePeriodSeconds }}
84+
volumes:
85+
- name: config
86+
secret:
87+
{{- if .Values.useExternalConfig }}
88+
secretName: {{ .Values.externalConfigSecretName }}
89+
{{- else }}
90+
secretName: {{ template "cortex.fullname" . }}
91+
{{- end }}
92+
{{- if not .Values.ingester.persistentVolume.enabled }}
93+
- name: storage
94+
emptyDir: {}
95+
{{- end }}
96+
{{- if .Values.ingester.extraVolumes }}
97+
{{ toYaml .Values.ingester.extraVolumes | nindent 8 }}
98+
{{- end }}
99+
containers:
100+
{{- if .Values.ingester.extraContainers }}
101+
{{ toYaml .Values.ingester.extraContainers | nindent 8 }}
102+
{{- end }}
103+
- name: {{ .Chart.Name }}
104+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
105+
imagePullPolicy: {{ .Values.image.pullPolicy }}
106+
args:
107+
- "-target=ingester"
108+
- "-config.file=/etc/cortex/cortex.yaml"
109+
{{- if .Values.memcached.enabled }}
110+
- -store.chunks-cache.memcached.addresses=dns+{{ template "cortex.fullname" . }}-memcached.{{ .Release.Namespace }}.svc.cluster.local:11211
111+
{{- end }}
112+
{{- if index .Values "memcached-index-write" "enabled" }}
113+
- -store.index-cache-write.memcached.addresses=dns+{{ template "cortex.fullname" . }}-memcached-index-write.{{ .Release.Namespace }}.svc.cluster.local:11211
114+
{{- end }}
115+
{{- range $key, $value := .Values.ingester.extraArgs }}
116+
- "-{{ $key }}={{ $value }}"
117+
{{- end }}
118+
volumeMounts:
119+
{{- if .Values.ingester.extraVolumeMounts }}
120+
{{ toYaml .Values.ingester.extraVolumeMounts | nindent 12}}
121+
{{- end }}
122+
- name: config
123+
mountPath: /etc/cortex
124+
- name: storage
125+
mountPath: "/data"
126+
{{- if .Values.ingester.persistentVolume.subPath }}
127+
subPath: {{ .Values.ingester.persistentVolume.subPath }}
128+
{{- else }}
129+
{{- if .Values.ingester.persistence.subPath }}
130+
## DEPRECATED: use persistentVolume.subPath instead
131+
subPath: {{ .Values.ingester.persistence.subPath }}
132+
{{- end }}
133+
{{- end }}
134+
ports:
135+
- name: http-metrics
136+
containerPort: {{ .Values.config.server.http_listen_port }}
137+
protocol: TCP
138+
livenessProbe:
139+
{{- toYaml .Values.ingester.livenessProbe | nindent 12 }}
140+
readinessProbe:
141+
{{- toYaml .Values.ingester.readinessProbe | nindent 12 }}
142+
resources:
143+
{{- toYaml .Values.ingester.resources | nindent 12 }}
144+
securityContext:
145+
readOnlyRootFilesystem: true
146+
env:
147+
{{- if .Values.ingester.env }}
148+
{{- toYaml .Values.ingester.env | nindent 12 }}
149+
{{- end }}
150+
{{- end -}}

values.yaml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,12 @@ distributor:
343343
ingester:
344344
replicas: 3
345345

346+
statefulSet:
347+
## If true, use a statefulset instead of a deployment for pod management.
348+
## This is useful when using WAL
349+
##
350+
enabled: false
351+
346352
service:
347353
port: 80
348354
annotations: {}
@@ -383,9 +389,47 @@ ingester:
383389
topologyKey: "kubernetes.io/hostname"
384390

385391
annotations: {}
392+
393+
## DEPRECATED: use persistentVolume.subPath instead
386394
persistence:
387395
subPath:
388396

397+
persistentVolume:
398+
## If true and ingester.statefulSet.enabled is true,
399+
## Ingester will create/use a Persistent Volume Claim
400+
## If false, use emptyDir
401+
##
402+
enabled: true
403+
404+
## Ingester data Persistent Volume Claim annotations
405+
##
406+
annotations: {}
407+
408+
## Ingester data Persistent Volume access modes
409+
## Must match those of existing PV or dynamic provisioner
410+
## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
411+
##
412+
accessModes:
413+
- ReadWriteOnce
414+
415+
## Ingester data Persistent Volume size
416+
##
417+
size: 2Gi
418+
419+
## Subdirectory of Ingester data Persistent Volume to mount
420+
## Useful if the volume's root directory is not empty
421+
##
422+
subPath: ""
423+
424+
## Ingester data Persistent Volume Storage Class
425+
## If defined, storageClassName: <storageClass>
426+
## If set to "-", storageClassName: "", which disables dynamic provisioning
427+
## If undefined (the default) or set to null, no storageClassName spec is
428+
## set, choosing the default provisioner. (gp2 on AWS, standard on
429+
## GKE, AWS & OpenStack)
430+
##
431+
# storageClass: "-"
432+
389433
livenessProbe:
390434
failureThreshold: 20 # 10 minutes failure threshold
391435
httpGet:

0 commit comments

Comments
 (0)