326 lines
14 KiB
YAML
326 lines
14 KiB
YAML
{{- $global := . }}
|
|
{{- $components := (fromYaml (include "pyroscope.components" .)) }}
|
|
{{- $hasV1 := $global.Values.architecture.storage.v1 }}
|
|
{{- $hasV2 := $global.Values.architecture.storage.v2 }}
|
|
{{- $hasMetastore := hasKey $components "metastore" }}
|
|
{{- $hasQueryBackend := hasKey $components "query-backend" }}
|
|
{{- range $component, $cfg := $components }}
|
|
{{- with $global }}
|
|
{{- $values := mustMergeOverwrite (deepCopy .Values.pyroscope ) ($cfg | default dict)}}
|
|
{{- $extraArgs := mustMergeOverwrite (deepCopy .Values.pyroscope.extraArgs ) ($cfg.extraArgs | default dict)}}
|
|
{{- $isMetastore := or (and (eq $component "all") ($hasV2)) (eq $component "metastore") }}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: {{ $cfg.kind }}
|
|
metadata:
|
|
name: {{ $cfg.name }}
|
|
namespace: {{ .Release.Namespace }}
|
|
labels:
|
|
{{- include "pyroscope.labels" . | nindent 4 }}
|
|
app.kubernetes.io/component: {{ $component | quote }}
|
|
spec:
|
|
{{- if eq $values.kind "StatefulSet" }}
|
|
serviceName: {{ $values.name }}-headless
|
|
podManagementPolicy: Parallel
|
|
{{- end }}
|
|
{{- if and (hasKey $values "replicaCount") (not ($values.autoscaling).enabled) }}
|
|
replicas: {{ $values.replicaCount }}
|
|
{{- end }}
|
|
selector:
|
|
matchLabels:
|
|
{{- include "pyroscope.selectorLabels" . | nindent 6 }}
|
|
app.kubernetes.io/component: {{ $component | quote }}
|
|
template:
|
|
metadata:
|
|
annotations:
|
|
{{- if not (hasKey $values.podAnnotations "checksum/config") }}
|
|
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
|
|
{{- end }}
|
|
{{- if not (hasKey $values.podAnnotations "profiles.grafana.com/service_repository") }}
|
|
profiles.grafana.com/service_repository: "https://github.com/grafana/pyroscope"
|
|
{{- end }}
|
|
{{- if not (hasKey $values.podAnnotations "profiles.grafana.com/service_git_ref") }}
|
|
profiles.grafana.com/service_git_ref: "v{{ .Chart.AppVersion }}"
|
|
{{- end }}
|
|
{{- with $values.podAnnotations }}
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
labels:
|
|
{{- include "pyroscope.templateLabels" . | nindent 8 }}
|
|
app.kubernetes.io/component: {{ $component | quote }}
|
|
name: {{ if eq $component "all" }}"pyroscope"{{ else }}"{{ $component }}"{{ end }}
|
|
spec:
|
|
{{- with $values.imagePullSecrets }}
|
|
imagePullSecrets:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
serviceAccountName: {{ include "pyroscope.serviceAccountName" . }}
|
|
securityContext:
|
|
{{- toYaml $values.podSecurityContext | nindent 8 }}
|
|
{{- if hasKey $values "hostNetwork" }}
|
|
hostNetwork: {{ $values.hostNetwork }}
|
|
{{- end }}
|
|
{{- if hasKey $values "dnsPolicy" }}
|
|
dnsPolicy: {{ $values.dnsPolicy }}
|
|
{{- end }}
|
|
{{- with $values.initContainers }}
|
|
initContainers:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
containers:
|
|
- name: {{ if eq $component "all" }}"pyroscope"{{ else }}"{{ $component }}"{{ end }}
|
|
securityContext:
|
|
{{- toYaml $values.securityContext | nindent 12 }}
|
|
{{- $registry := $global.Values.global.imageRegistry | default $values.image.registry }}
|
|
image: "{{ if $registry }}{{ $registry }}/{{ end }}{{ $values.image.repository }}:{{ $values.image.tag | default .Chart.AppVersion }}"
|
|
imagePullPolicy: {{ $values.image.pullPolicy }}
|
|
args:
|
|
- "-target={{ $component }}"
|
|
- "-self-profiling.disable-push={{ .Values.pyroscope.disableSelfProfile }}"
|
|
- "-server.http-listen-port={{ $values.service.port }}"
|
|
- "-memberlist.cluster-label={{ .Release.Namespace }}-{{ include "pyroscope.fullname" .}}{{if $global.Values.architecture.microservices.enabled}}{{$global.Values.architecture.microservices.clusterLabelSuffix}}{{end}}"
|
|
- "-memberlist.join=dns+{{ include "pyroscope.fullname" .}}-memberlist.{{ .Release.Namespace }}.svc{{ .Values.pyroscope.cluster_domain }}:{{ .Values.pyroscope.memberlist.port }}"
|
|
- "-config.file=/etc/pyroscope/config.yaml"
|
|
- "-runtime-config.file=/etc/pyroscope/overrides/overrides.yaml"
|
|
{{- range $key, $value := $extraArgs }}
|
|
- "-{{ $key }}={{ $value }}"
|
|
{{- end }}
|
|
{{- /* When v2 and single binary is used we need to explicitly configure "filesystem" (TODO: This should be the default in v2) */}}
|
|
{{- if and $hasV2 (eq $component "all") }}
|
|
{{- if (not (hasKey $extraArgs "storage.backend")) }}
|
|
- "-storage.backend=filesystem"
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- /* v2 specific options for all components */}}
|
|
{{- if $hasV2 }}
|
|
{{- if (not (hasKey $extraArgs "query-backend.address")) }}
|
|
- "-query-backend.address=dns:///_grpc._tcp.{{ include "pyroscope.fullname" . }}{{ if $hasQueryBackend }}-query-backend{{ end }}-headless.$(NAMESPACE_FQDN):{{ .Values.pyroscope.grpc.port }}"
|
|
{{- end }}
|
|
{{- if (not (hasKey $extraArgs "metastore.address")) }}
|
|
- "-metastore.address=kubernetes:///{{ include "pyroscope.fullname" . }}{{ if $hasMetastore }}-metastore{{ end }}-headless.$(NAMESPACE_FQDN):{{ .Values.pyroscope.grpc.port }}"
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- /* metastore specific v2 migration config */}}
|
|
{{- if $isMetastore }}
|
|
{{- if (not (hasKey $extraArgs "metastore.raft.server-id")) }}
|
|
- "-metastore.raft.bind-address=:{{ .Values.pyroscope.metastore.port }}"
|
|
{{- end }}
|
|
{{- if (not (hasKey $extraArgs "metastore.raft.server-id")) }}
|
|
- "-metastore.raft.server-id=$(POD_NAME).$(PYROSCOPE_METASTORE_SERVICE)"
|
|
{{- end }}
|
|
{{- if (not (hasKey $extraArgs "metastore.raft.advertise-address")) }}
|
|
- "-metastore.raft.advertise-address=$(POD_NAME).$(PYROSCOPE_METASTORE_SERVICE)"
|
|
{{- end }}
|
|
{{- if (not (hasKey $extraArgs "metastore.raft.server-id")) }}
|
|
- "-metastore.raft.bootstrap-peers=dnssrvnoa+_raft._tcp.$(PYROSCOPE_METASTORE_SERVICE)"
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- /* distributor specific v1/v2 migration config */}}
|
|
{{- if or (eq $component "all") (eq $component "distributor") }}
|
|
{{- if and $hasV2 (not (hasKey $extraArgs "write-path")) }}
|
|
{{- if $hasV1 }}
|
|
- "-write-path=combined"
|
|
{{- if not (hasKey $extraArgs "write-path.segment-writer-weight") }}
|
|
- "-write-path.segment-writer-weight=1"
|
|
{{- end }}
|
|
{{- else }}
|
|
- "-write-path=segment-writer"
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- /* query-frontend specific v1/v2 migration config */}}
|
|
{{- if or (eq $component "all") (eq $component "query-frontend") }}
|
|
{{- if and $hasV2 (not (hasKey $extraArgs "enable-query-backend")) }}
|
|
{{- if and $hasV1 $global.Values.architecture.storage.migration.queryBackend }}
|
|
- "-enable-query-backend=true"
|
|
{{- if and (not (hasKey $extraArgs "enable-query-backend-from")) $global.Values.architecture.storage.migration.queryBackendFrom }}
|
|
- "-enable-query-backend-from={{$global.Values.architecture.storage.migration.queryBackendFrom}}"
|
|
{{- end }}
|
|
{{- else }}
|
|
- "-enable-query-backend=true"
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end }}
|
|
env:
|
|
- name: POD_NAME
|
|
valueFrom:
|
|
fieldRef:
|
|
fieldPath: metadata.name
|
|
- name: NAMESPACE_FQDN
|
|
value: "{{ .Release.Namespace }}.svc{{ .Values.pyroscope.cluster_domain }}"
|
|
{{- if and $hasV2 (not (hasKey $values.extraEnvVars "PYROSCOPE_V2_EXPERIMENT")) }}
|
|
- name: PYROSCOPE_V2_EXPERIMENT
|
|
value: "1"
|
|
{{- end }}
|
|
{{- if and $hasV2 (not (hasKey $values.extraEnvVars "PYROSCOPE_METASTORE_SERVICE")) }}
|
|
- name: PYROSCOPE_METASTORE_SERVICE
|
|
value: "{{ include "pyroscope.fullname" .}}{{ if $hasMetastore }}-metastore{{ end }}-headless.{{ .Release.Namespace }}.svc{{ .Values.pyroscope.cluster_domain }}:{{ .Values.pyroscope.metastore.port }}"
|
|
{{- end }}
|
|
{{- with $values.extraEnvVars }}
|
|
{{- range $key, $value := . }}
|
|
- name: {{ $key }}
|
|
{{- if kindIs "map" $value }}
|
|
{{- toYaml $value | nindent 14 }}
|
|
{{- else }}
|
|
value: {{ $value | quote }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- with $values.extraCustomEnvVars }}
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
{{- with $values.extraEnvFrom }}
|
|
envFrom:
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
ports:
|
|
- name: {{ $values.service.port_name }}
|
|
containerPort: {{ $values.service.port }}
|
|
protocol: TCP
|
|
- name: {{ $values.memberlist.port_name }}
|
|
containerPort: {{ $values.memberlist.port }}
|
|
protocol: TCP
|
|
{{- if $hasV2 }}
|
|
- name: {{ $values.grpc.port_name }}
|
|
containerPort: {{ $values.grpc.port }}
|
|
protocol: TCP
|
|
{{- end }}
|
|
{{- if $isMetastore }}
|
|
- name: {{ $values.metastore.port_name }}
|
|
containerPort: {{ $values.metastore.port }}
|
|
protocol: TCP
|
|
{{- end }}
|
|
readinessProbe:
|
|
httpGet:
|
|
path: /ready
|
|
port: {{ $values.service.port_name }}
|
|
scheme: {{ $values.service.scheme }}
|
|
{{- if ($values.readinessProbe).initialDelaySeconds }}
|
|
initialDelaySeconds: {{ $values.readinessProbe.initialDelaySeconds }}
|
|
{{- end }}
|
|
volumeMounts:
|
|
- name: config
|
|
mountPath: /etc/pyroscope/config.yaml
|
|
subPath: config.yaml
|
|
- name: overrides-config
|
|
mountPath: /etc/pyroscope/overrides/
|
|
- name: data
|
|
mountPath: /data
|
|
{{- if eq $component "compactor" }}
|
|
subPath: default
|
|
- name: data
|
|
mountPath: /data-compactor
|
|
subPath: compactor
|
|
{{- end }}
|
|
{{- if (and $hasV2 $values.persistence.shared.enabled) }}
|
|
- name: data
|
|
mountPath: /data-shared
|
|
subPath: {{ $values.persistence.shared.subPath }}
|
|
{{- end }}
|
|
{{- if $isMetastore }}
|
|
- name: data
|
|
mountPath: /data-metastore
|
|
subPath: {{ $values.persistence.metastore.subPath }}
|
|
{{- end }}
|
|
{{- with $values.extraVolumeMounts }}
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
resources:
|
|
{{- if $global.Values.architecture.overwriteResources }}
|
|
{{- toYaml $global.Values.architecture.overwriteResources | nindent 12 }}
|
|
{{- else }}
|
|
{{- toYaml $values.resources | nindent 12 }}
|
|
{{- end }}
|
|
{{- with $values.extraContainers }}
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
{{- with $values.nodeSelector }}
|
|
nodeSelector:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
{{- with $values.topologySpreadConstraints }}
|
|
topologySpreadConstraints:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
{{- with $values.affinity }}
|
|
affinity:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
{{- with $values.tolerations }}
|
|
tolerations:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
{{- if hasKey $values "priorityClassName" }}
|
|
priorityClassName: {{ $values.priorityClassName | quote }}
|
|
{{- end }}
|
|
{{- if $values.terminationGracePeriodSeconds }}
|
|
terminationGracePeriodSeconds: {{ $values.terminationGracePeriodSeconds }}
|
|
{{- end }}
|
|
volumes:
|
|
{{- with $values.extraVolumes }}
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
- name: config
|
|
configMap:
|
|
name: {{ include "pyroscope.fullname" . }}-config
|
|
- name: overrides-config
|
|
configMap:
|
|
name: {{ include "pyroscope.fullname" . }}-overrides-config
|
|
{{- $persistence := $values.persistence }}
|
|
{{- if not $persistence.enabled }}
|
|
- name: data
|
|
emptyDir: {}
|
|
{{- else if $persistence.existingClaim}}
|
|
- name: data
|
|
persistentVolumeClaim:
|
|
claimName: {{ $persistence.existingClaim }}
|
|
{{- else if ne $cfg.kind "StatefulSet"}}
|
|
- name: data
|
|
persistentVolumeClaim:
|
|
claimName: {{ $cfg.name }}-data
|
|
{{- else }}
|
|
volumeClaimTemplates:
|
|
- metadata:
|
|
name: data
|
|
annotations:
|
|
{{- toYaml $persistence.annotations | nindent 8 }}
|
|
spec:
|
|
accessModes:
|
|
{{- toYaml $persistence.accessModes | nindent 8 }}
|
|
resources:
|
|
requests:
|
|
storage: {{ $persistence.size | quote }}
|
|
storageClassName: {{ $persistence.storageClassName }}
|
|
{{- if $persistence.selector }}
|
|
selector:
|
|
{{- toYaml $persistence.selector | nindent 8 }}
|
|
{{- end }}
|
|
{{- with $persistence.extraVolumeClaimTemplates }}
|
|
{{- toYaml . | nindent 2 }}
|
|
{{- end }}
|
|
{{- end }}
|
|
---
|
|
{{- $pdb := $values.podDisruptionBudget }}
|
|
{{- if $pdb.enabled }}
|
|
apiVersion: policy/v1
|
|
kind: PodDisruptionBudget
|
|
metadata:
|
|
name: {{ $cfg.name }}
|
|
namespace: {{ .Release.Namespace }}
|
|
labels:
|
|
{{- include "pyroscope.labels" . | nindent 4 }}
|
|
app.kubernetes.io/component: {{ $component | quote }}
|
|
spec:
|
|
{{- if hasKey $pdb "minAvailable" }}
|
|
minAvailable: {{ $pdb.minAvailable }}
|
|
{{- else }}
|
|
maxUnavailable: {{ $pdb.maxUnavailable }}
|
|
{{- end }}
|
|
selector:
|
|
matchLabels:
|
|
{{- include "pyroscope.selectorLabels" . | nindent 6 }}
|
|
app.kubernetes.io/component: {{ $component | quote }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end }}
|