Skip to content

Commit 7d3c3a3

Browse files
authored
Add parquet converter (#579)
Signed-off-by: SungJin1212 <[email protected]>
1 parent 994013b commit 7d3c3a3

File tree

7 files changed

+337
-0
lines changed

7 files changed

+337
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## master / unreleased
44

5+
* [FEATURE] Add a parquet converter. #579
56
* [DEPENDENCY] Update quay.io/cortexproject/cortex Docker tag to v1.20.1 #577
67

78
## 3.0.0 / 2025-11-27

README.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,50 @@ Kubernetes: `^1.19.0-0`
543543
| overrides_exporter.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `180` | |
544544
| overrides_exporter.&ZeroWidthSpace;tolerations | list | `[]` | |
545545
| overrides_exporter.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` | |
546+
| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;key | string | `"app.kubernetes.io/component"` | |
547+
| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;operator | string | `"In"` | |
548+
| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;labelSelector.&ZeroWidthSpace;matchExpressions[0].&ZeroWidthSpace;values[0] | string | `"parquet-converter"` | |
549+
| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;podAffinityTerm.&ZeroWidthSpace;topologyKey | string | `"kubernetes.io/hostname"` | |
550+
| parquet_converter.&ZeroWidthSpace;affinity.&ZeroWidthSpace;podAntiAffinity.&ZeroWidthSpace;preferredDuringSchedulingIgnoredDuringExecution[0].&ZeroWidthSpace;weight | int | `100` | |
551+
| parquet_converter.&ZeroWidthSpace;annotations | object | `{}` | |
552+
| parquet_converter.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` | |
553+
| parquet_converter.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;readOnlyRootFilesystem | bool | `true` | |
554+
| parquet_converter.&ZeroWidthSpace;enabled | bool | `false` | https://cortexmetrics.io/docs/guides/parquet-mode/ |
555+
| parquet_converter.&ZeroWidthSpace;env | list | `[]` | |
556+
| parquet_converter.&ZeroWidthSpace;extraArgs | object | `{}` | Additional Cortex container arguments, e.g. log.level (debug, info, warn, error) |
557+
| parquet_converter.&ZeroWidthSpace;extraContainers | list | `[]` | |
558+
| parquet_converter.&ZeroWidthSpace;extraPorts | list | `[]` | |
559+
| parquet_converter.&ZeroWidthSpace;extraVolumeMounts | list | `[]` | |
560+
| parquet_converter.&ZeroWidthSpace;extraVolumes | list | `[]` | |
561+
| parquet_converter.&ZeroWidthSpace;initContainers | list | `[]` | |
562+
| parquet_converter.&ZeroWidthSpace;lifecycle | object | `{}` | |
563+
| parquet_converter.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `"/ready"` | |
564+
| parquet_converter.&ZeroWidthSpace;livenessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `"http-metrics"` | |
565+
| parquet_converter.&ZeroWidthSpace;nodeSelector | object | `{}` | |
566+
| parquet_converter.&ZeroWidthSpace;podAnnotations | object | `{"prometheus.io/port":"http-metrics","prometheus.io/scrape":"true"}` | Pod Annotations |
567+
| parquet_converter.&ZeroWidthSpace;podLabels | object | `{}` | Pod Labels |
568+
| parquet_converter.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `"/ready"` | |
569+
| parquet_converter.&ZeroWidthSpace;readinessProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `"http-metrics"` | |
570+
| parquet_converter.&ZeroWidthSpace;replicas | int | `1` | |
571+
| parquet_converter.&ZeroWidthSpace;resources | object | `{}` | |
572+
| parquet_converter.&ZeroWidthSpace;securityContext | object | `{}` | |
573+
| parquet_converter.&ZeroWidthSpace;service.&ZeroWidthSpace;annotations | object | `{}` | |
574+
| parquet_converter.&ZeroWidthSpace;service.&ZeroWidthSpace;labels | object | `{}` | |
575+
| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;additionalLabels | object | `{}` | |
576+
| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;enabled | bool | `false` | |
577+
| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;extraEndpointSpec | object | `{}` | Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint |
578+
| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;metricRelabelings | list | `[]` | |
579+
| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;podTargetLabels | list | `[]` | |
580+
| parquet_converter.&ZeroWidthSpace;serviceMonitor.&ZeroWidthSpace;relabelings | list | `[]` | |
581+
| parquet_converter.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;failureThreshold | int | `10` | |
582+
| parquet_converter.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;path | string | `"/ready"` | |
583+
| parquet_converter.&ZeroWidthSpace;startupProbe.&ZeroWidthSpace;httpGet.&ZeroWidthSpace;port | string | `"http-metrics"` | |
584+
| parquet_converter.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxSurge | int | `0` | |
585+
| parquet_converter.&ZeroWidthSpace;strategy.&ZeroWidthSpace;rollingUpdate.&ZeroWidthSpace;maxUnavailable | int | `1` | |
586+
| parquet_converter.&ZeroWidthSpace;strategy.&ZeroWidthSpace;type | string | `"RollingUpdate"` | |
587+
| parquet_converter.&ZeroWidthSpace;terminationGracePeriodSeconds | int | `180` | |
588+
| parquet_converter.&ZeroWidthSpace;tolerations | list | `[]` | |
589+
| parquet_converter.&ZeroWidthSpace;topologySpreadConstraints | list | `[]` | |
546590
| purger.&ZeroWidthSpace;affinity | object | `{}` | |
547591
| purger.&ZeroWidthSpace;annotations | object | `{}` | |
548592
| purger.&ZeroWidthSpace;containerSecurityContext.&ZeroWidthSpace;enabled | bool | `true` | |
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
{{/*
3+
parquet-converter fullname
4+
*/}}
5+
{{- define "cortex.parquetConverterFullname" -}}
6+
{{ include "cortex.fullname" . }}-parquet-converter
7+
{{- end }}
8+
9+
{{/*
10+
parquet-converter common labels
11+
*/}}
12+
{{- define "cortex.parquetConverterLabels" -}}
13+
{{ include "cortex.labels" . }}
14+
app.kubernetes.io/component: parquet-converter
15+
{{- end }}
16+
17+
{{/*
18+
parquet-converter selector labels
19+
*/}}
20+
{{- define "cortex.parquetConverterSelectorLabels" -}}
21+
{{ include "cortex.selectorLabels" . }}
22+
app.kubernetes.io/component: parquet-converter
23+
{{- end }}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
{{- if .Values.parquet_converter.enabled }}
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
metadata:
5+
name: {{ include "cortex.parquetConverterFullname" . }}
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
{{- include "cortex.parquetConverterLabels" . | nindent 4 }}
9+
annotations:
10+
{{- toYaml .Values.parquet_converter.annotations | nindent 4 }}
11+
spec:
12+
replicas: {{ .Values.parquet_converter.replicas }}
13+
selector:
14+
matchLabels:
15+
{{- include "cortex.parquetConverterSelectorLabels" . | nindent 6 }}
16+
strategy:
17+
{{- toYaml .Values.parquet_converter.strategy | nindent 4 }}
18+
template:
19+
metadata:
20+
labels:
21+
{{- include "cortex.parquetConverterLabels" . | nindent 8 }}
22+
{{- with .Values.parquet_converter.podLabels }}
23+
{{- toYaml . | nindent 8 }}
24+
{{- end }}
25+
annotations:
26+
{{- if .Values.useExternalConfig }}
27+
checksum/config: {{ .Values.externalConfigVersion }}
28+
{{- else }}
29+
checksum/config: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
30+
{{- end }}
31+
{{- with .Values.parquet_converter.podAnnotations }}
32+
{{- toYaml . | nindent 8 }}
33+
{{- end }}
34+
spec:
35+
serviceAccountName: {{ template "cortex.serviceAccountName" . }}
36+
{{- if .Values.parquet_converter.priorityClassName }}
37+
priorityClassName: {{ .Values.parquet_converter.priorityClassName }}
38+
{{- end }}
39+
{{- if .Values.parquet_converter.securityContext.enabled }}
40+
securityContext: {{- omit .Values.parquet_converter.securityContext "enabled" | toYaml | nindent 8 }}
41+
{{- end }}
42+
initContainers:
43+
{{- toYaml .Values.parquet_converter.initContainers | nindent 8 }}
44+
{{- if .Values.image.pullSecrets }}
45+
imagePullSecrets:
46+
{{- range .Values.image.pullSecrets }}
47+
- name: {{ . }}
48+
{{- end }}
49+
{{- end }}
50+
containers:
51+
- name: parquet-converter
52+
image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}"
53+
imagePullPolicy: {{ .Values.image.pullPolicy }}
54+
args:
55+
- "-target=parquet-converter"
56+
- "-config.file=/etc/cortex/cortex.yaml"
57+
{{- range $key, $value := .Values.parquet_converter.extraArgs }}
58+
- "-{{ $key }}={{ $value }}"
59+
{{- end }}
60+
volumeMounts:
61+
{{- if .Values.parquet_converter.extraVolumeMounts }}
62+
{{- toYaml .Values.parquet_converter.extraVolumeMounts | nindent 12 }}
63+
{{- end }}
64+
- name: config
65+
mountPath: /etc/cortex
66+
- name: runtime-config
67+
mountPath: /etc/cortex-runtime-config
68+
ports:
69+
- name: http-metrics
70+
containerPort: {{ .Values.config.server.http_listen_port }}
71+
protocol: TCP
72+
startupProbe:
73+
{{- toYaml .Values.parquet_converter.startupProbe | nindent 12 }}
74+
livenessProbe:
75+
{{- toYaml .Values.parquet_converter.livenessProbe | nindent 12 }}
76+
readinessProbe:
77+
{{- toYaml .Values.parquet_converter.readinessProbe | nindent 12 }}
78+
resources:
79+
{{- toYaml .Values.parquet_converter.resources | nindent 12 }}
80+
{{- if .Values.parquet_converter.containerSecurityContext.enabled }}
81+
securityContext: {{- omit .Values.parquet_converter.containerSecurityContext "enabled" | toYaml | nindent 12 }}
82+
{{- end }}
83+
{{- if .Values.parquet_converter.env }}
84+
env:
85+
{{- toYaml .Values.parquet_converter.env | nindent 12 }}
86+
{{- end }}
87+
{{- with .Values.parquet_converter.lifecycle }}
88+
lifecycle:
89+
{{- toYaml . | nindent 12 }}
90+
{{- end }}
91+
{{- if .Values.parquet_converter.extraContainers }}
92+
{{- toYaml .Values.parquet_converter.extraContainers | nindent 8 }}
93+
{{- end }}
94+
nodeSelector:
95+
{{- toYaml .Values.parquet_converter.nodeSelector | nindent 8 }}
96+
{{- if .Values.parquet_converter.topologySpreadConstraints }}
97+
topologySpreadConstraints:
98+
{{- toYaml .Values.parquet_converter.topologySpreadConstraints | nindent 8}}
99+
{{- end }}
100+
affinity:
101+
{{- toYaml .Values.parquet_converter.affinity | nindent 8 }}
102+
tolerations:
103+
{{- toYaml .Values.parquet_converter.tolerations | nindent 8 }}
104+
terminationGracePeriodSeconds: {{ .Values.parquet_converter.terminationGracePeriodSeconds }}
105+
volumes:
106+
{{- include "cortex.configVolume" . | nindent 8 }}
107+
- name: runtime-config
108+
configMap:
109+
name: {{ template "cortex.fullname" . }}-runtime-config
110+
{{- if .Values.parquet_converter.extraVolumes }}
111+
{{- toYaml .Values.parquet_converter.extraVolumes | nindent 8 }}
112+
{{- end }}
113+
{{- end }}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{{- if and .Values.parquet_converter.enabled .Values.parquet_converter.serviceMonitor.enabled }}
2+
apiVersion: monitoring.coreos.com/v1
3+
kind: ServiceMonitor
4+
metadata:
5+
name: {{ include "cortex.parquetConverterFullname" . }}
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
{{- include "cortex.parquetConverterLabels" . | nindent 4 }}
9+
{{- if .Values.parquet_converter.serviceMonitor.additionalLabels }}
10+
{{ toYaml .Values.parquet_converter.serviceMonitor.additionalLabels | indent 4 }}
11+
{{- end }}
12+
{{- if .Values.parquet_converter.serviceMonitor.annotations }}
13+
annotations:
14+
{{ toYaml .Values.parquet_converter.serviceMonitor.annotations | indent 4 }}
15+
{{- end }}
16+
spec:
17+
selector:
18+
matchLabels:
19+
{{- include "cortex.parquetConverterSelectorLabels" . | nindent 6 }}
20+
namespaceSelector:
21+
matchNames:
22+
- {{ .Release.Namespace | quote }}
23+
{{- if .Values.parquet_converter.serviceMonitor.podTargetLabels }}
24+
podTargetLabels:
25+
{{- range .Values.parquet_converter.serviceMonitor.podTargetLabels }}
26+
- {{ . }}
27+
{{- end }}
28+
{{- end }}
29+
endpoints:
30+
- port: http-metrics
31+
{{- if .Values.parquet_converter.serviceMonitor.interval }}
32+
interval: {{ .Values.parquet_converter.serviceMonitor.interval }}
33+
{{- end }}
34+
{{- if .Values.parquet_converter.serviceMonitor.scrapeTimeout }}
35+
scrapeTimeout: {{ .Values.parquet_converter.serviceMonitor.scrapeTimeout }}
36+
{{- end }}
37+
{{- if .Values.parquet_converter.serviceMonitor.relabelings }}
38+
relabelings:
39+
{{- toYaml .Values.parquet_converter.serviceMonitor.relabelings | nindent 4 }}
40+
{{- end }}
41+
{{- if .Values.parquet_converter.serviceMonitor.metricRelabelings }}
42+
metricRelabelings:
43+
{{- toYaml .Values.parquet_converter.serviceMonitor.metricRelabelings | nindent 4 }}
44+
{{- end }}
45+
{{- with .Values.parquet_converter.serviceMonitor.extraEndpointSpec }}
46+
{{- toYaml . | nindent 4 }}
47+
{{- end }}
48+
{{- end }}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{{- if .Values.parquet_converter.enabled }}
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: {{ include "cortex.parquetConverterFullname" . }}
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
{{- include "cortex.parquetConverterLabels" . | nindent 4 }}
9+
{{- with .Values.parquet_converter.service.labels }}
10+
{{- toYaml . | nindent 4 }}
11+
{{- end }}
12+
annotations:
13+
{{- toYaml .Values.parquet_converter.service.annotations | nindent 4 }}
14+
spec:
15+
type: ClusterIP
16+
ports:
17+
- port: {{ .Values.config.server.http_listen_port }}
18+
protocol: TCP
19+
name: http-metrics
20+
targetPort: http-metrics
21+
selector:
22+
{{- include "cortex.parquetConverterSelectorLabels" . | nindent 4 }}
23+
{{- end }}

values.yaml

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,6 +1114,91 @@ overrides_exporter:
11141114
env: []
11151115
lifecycle: {}
11161116

1117+
parquet_converter:
1118+
# -- https://cortexmetrics.io/docs/guides/parquet-mode/
1119+
enabled: false
1120+
replicas: 1
1121+
1122+
service:
1123+
annotations: {}
1124+
labels: {}
1125+
1126+
serviceMonitor:
1127+
enabled: false
1128+
additionalLabels: {}
1129+
relabelings: []
1130+
metricRelabelings: []
1131+
# -- Additional endpoint configuration https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#endpoint
1132+
extraEndpointSpec: {}
1133+
podTargetLabels: []
1134+
1135+
resources: {}
1136+
1137+
# -- Additional Cortex container arguments, e.g. log.level (debug, info, warn, error)
1138+
extraArgs: {}
1139+
1140+
# -- Pod Labels
1141+
podLabels: {}
1142+
1143+
# -- Pod Annotations
1144+
podAnnotations:
1145+
prometheus.io/scrape: 'true'
1146+
prometheus.io/port: 'http-metrics'
1147+
1148+
nodeSelector: {}
1149+
topologySpreadConstraints: []
1150+
affinity:
1151+
podAntiAffinity:
1152+
preferredDuringSchedulingIgnoredDuringExecution:
1153+
- weight: 100
1154+
podAffinityTerm:
1155+
labelSelector:
1156+
matchExpressions:
1157+
- key: app.kubernetes.io/component
1158+
operator: In
1159+
values:
1160+
- parquet-converter
1161+
topologyKey: 'kubernetes.io/hostname'
1162+
1163+
annotations: {}
1164+
1165+
startupProbe:
1166+
httpGet:
1167+
path: /ready
1168+
port: http-metrics
1169+
failureThreshold: 10
1170+
livenessProbe:
1171+
httpGet:
1172+
path: /ready
1173+
port: http-metrics
1174+
readinessProbe:
1175+
httpGet:
1176+
path: /ready
1177+
port: http-metrics
1178+
1179+
securityContext: {}
1180+
containerSecurityContext:
1181+
enabled: true
1182+
readOnlyRootFilesystem: true
1183+
1184+
strategy:
1185+
type: RollingUpdate
1186+
rollingUpdate:
1187+
maxSurge: 0
1188+
maxUnavailable: 1
1189+
1190+
terminationGracePeriodSeconds: 180
1191+
1192+
tolerations: []
1193+
1194+
initContainers: []
1195+
extraContainers: []
1196+
extraVolumes: []
1197+
extraVolumeMounts: []
1198+
extraPorts: []
1199+
env: []
1200+
lifecycle: {}
1201+
11171202
purger:
11181203
enabled: false
11191204
replicas: 1

0 commit comments

Comments
 (0)