added repo
This commit is contained in:
@@ -0,0 +1,702 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "mimir.name" -}}
|
||||
{{- default ( include "mimir.infixName" . ) .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "mimir.fullname" -}}
|
||||
{{- if .Values.fullnameOverride -}}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default ( include "mimir.infixName" . ) .Values.nameOverride -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Calculate the infix for naming
|
||||
*/}}
|
||||
{{- define "mimir.infixName" -}}
|
||||
{{- if and .Values.enterprise.enabled .Values.enterprise.legacyLabels -}}enterprise-metrics{{- else -}}mimir{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Calculate the gateway url
|
||||
*/}}
|
||||
{{- define "mimir.gatewayUrl" -}}
|
||||
{{- if eq (include "mimir.gateway.isEnabled" . ) "true" -}}
|
||||
http://{{ include "mimir.gateway.service.name" . }}.{{ .Release.Namespace }}.svc:{{ .Values.gateway.service.port | default (include "mimir.serverHttpListenPort" . ) }}
|
||||
{{- else -}}
|
||||
http://{{ template "mimir.fullname" . }}-nginx.{{ .Release.Namespace }}.svc:{{ .Values.nginx.service.port }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "mimir.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Calculate image name based on whether enterprise features are requested
|
||||
*/}}
|
||||
{{- define "mimir.imageReference" -}}
|
||||
{{- if .Values.enterprise.enabled -}}{{ .Values.enterprise.image.repository }}:{{ .Values.enterprise.image.tag }}{{- else -}}{{ .Values.image.repository }}:{{ .Values.image.tag }}{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
For compatibility and to support upgrade from enterprise-metrics chart calculate minio bucket name
|
||||
*/}}
|
||||
{{- define "mimir.minioBucketPrefix" -}}
|
||||
{{- if .Values.enterprise.legacyLabels -}}enterprise-metrics{{- else -}}mimir{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the general service account
|
||||
*/}}
|
||||
{{- define "mimir.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create -}}
|
||||
{{ default (include "mimir.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else -}}
|
||||
{{ default "default" .Values.serviceAccount.name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the ruler service account
|
||||
*/}}
|
||||
{{- define "mimir.ruler.serviceAccountName" -}}
|
||||
{{- if and .Values.ruler.serviceAccount.create (eq .Values.ruler.serviceAccount.name "") -}}
|
||||
{{- $sa := default (include "mimir.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- printf "%s-%s" $sa "ruler" }}
|
||||
{{- else if and .Values.ruler.serviceAccount.create (not (eq .Values.ruler.serviceAccount.name "")) -}}
|
||||
{{- .Values.ruler.serviceAccount.name -}}
|
||||
{{- else -}}
|
||||
{{- include "mimir.serviceAccountName" . -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the app name for clients. Defaults to the same logic as "mimir.fullname", and default client expects "prometheus".
|
||||
*/}}
|
||||
{{- define "client.name" -}}
|
||||
{{- if .Values.client.name -}}
|
||||
{{- .Values.client.name -}}
|
||||
{{- else if .Values.client.fullnameOverride -}}
|
||||
{{- .Values.client.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default "prometheus" .Values.client.nameOverride -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Calculate the config from structured and unstructured text input
|
||||
*/}}
|
||||
{{- define "mimir.calculatedConfig" -}}
|
||||
{{ tpl (mergeOverwrite (include "mimir.unstructuredConfig" . | fromYaml) .Values.mimir.structuredConfig | toYaml) . }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Calculate the config from the unstructured text input
|
||||
*/}}
|
||||
{{- define "mimir.unstructuredConfig" -}}
|
||||
{{ include (print $.Template.BasePath "/_config-render.tpl") . }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
The volume to mount for mimir configuration
|
||||
*/}}
|
||||
{{- define "mimir.configVolume" -}}
|
||||
{{- if eq .Values.configStorageType "Secret" -}}
|
||||
secret:
|
||||
secretName: {{ tpl .Values.externalConfigSecretName . }}
|
||||
{{- else if eq .Values.configStorageType "ConfigMap" -}}
|
||||
configMap:
|
||||
name: {{ tpl .Values.externalConfigSecretName . }}
|
||||
items:
|
||||
- key: "mimir.yaml"
|
||||
path: "mimir.yaml"
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Internal servers http listen port - derived from Mimir default
|
||||
*/}}
|
||||
{{- define "mimir.serverHttpListenPort" -}}
|
||||
{{ (((.Values.mimir).structuredConfig).server).http_listen_port | default "8080" }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Internal servers grpc listen port - derived from Mimir default
|
||||
*/}}
|
||||
{{- define "mimir.serverGrpcListenPort" -}}
|
||||
{{ (((.Values.mimir).structuredConfig).server).grpc_listen_port | default "9095" }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Alertmanager cluster bind address
|
||||
*/}}
|
||||
{{- define "mimir.alertmanagerClusterBindAddress" -}}
|
||||
{{- if (include "mimir.calculatedConfig" . | fromYaml).alertmanager -}}
|
||||
{{ (include "mimir.calculatedConfig" . | fromYaml).alertmanager.cluster_bind_address | default "" }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "mimir.chunksCacheAddress" -}}
|
||||
dns+{{ template "mimir.fullname" . }}-chunks-cache.{{ .Release.Namespace }}.svc:{{ (index .Values "chunks-cache").port }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "mimir.indexCacheAddress" -}}
|
||||
dns+{{ template "mimir.fullname" . }}-index-cache.{{ .Release.Namespace }}.svc:{{ (index .Values "index-cache").port }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "mimir.metadataCacheAddress" -}}
|
||||
dns+{{ template "mimir.fullname" . }}-metadata-cache.{{ .Release.Namespace }}.svc:{{ (index .Values "metadata-cache").port }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "mimir.resultsCacheAddress" -}}
|
||||
dns+{{ template "mimir.fullname" . }}-results-cache.{{ .Release.Namespace }}.svc:{{ (index .Values "results-cache").port }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "mimir.adminCacheAddress" -}}
|
||||
dns+{{ template "mimir.fullname" . }}-admin-cache.{{ .Release.Namespace }}.svc:{{ (index .Values "admin-cache").port }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Memberlist bind port
|
||||
*/}}
|
||||
{{- define "mimir.memberlistBindPort" -}}
|
||||
{{ (((.Values.mimir).structuredConfig).memberlist).bind_port | default "7946" }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Resource name template
|
||||
Params:
|
||||
ctx = . context
|
||||
component = component name (optional)
|
||||
rolloutZoneName = rollout zone name (optional)
|
||||
*/}}
|
||||
{{- define "mimir.resourceName" -}}
|
||||
{{- $resourceName := include "mimir.fullname" .ctx -}}
|
||||
{{- if .component -}}{{- $resourceName = printf "%s-%s" $resourceName .component -}}{{- end -}}
|
||||
{{- if and (not .component) .rolloutZoneName -}}{{- printf "Component name cannot be empty if rolloutZoneName (%s) is set" .rolloutZoneName | fail -}}{{- end -}}
|
||||
{{- if .rolloutZoneName -}}{{- $resourceName = printf "%s-%s" $resourceName .rolloutZoneName -}}{{- end -}}
|
||||
{{- if gt (len $resourceName) 253 -}}{{- printf "Resource name (%s) exceeds kubernetes limit of 253 character. To fix: shorten release name if this will be a fresh install or shorten zone names (e.g. \"a\" instead of \"zone-a\") if using zone-awareness." $resourceName | fail -}}{{- end -}}
|
||||
{{- $resourceName -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Resource labels
|
||||
Params:
|
||||
ctx = . context
|
||||
component = component name (optional)
|
||||
rolloutZoneName = rollout zone name (optional)
|
||||
*/}}
|
||||
{{- define "mimir.labels" -}}
|
||||
{{- if .ctx.Values.enterprise.legacyLabels }}
|
||||
{{- if .component -}}
|
||||
app: {{ include "mimir.name" .ctx }}-{{ .component }}
|
||||
{{- else -}}
|
||||
app: {{ include "mimir.name" .ctx }}
|
||||
{{- end }}
|
||||
chart: {{ template "mimir.chart" .ctx }}
|
||||
heritage: {{ .ctx.Release.Service }}
|
||||
release: {{ .ctx.Release.Name }}
|
||||
|
||||
{{- else -}}
|
||||
|
||||
helm.sh/chart: {{ include "mimir.chart" .ctx }}
|
||||
app.kubernetes.io/name: {{ include "mimir.name" .ctx }}
|
||||
app.kubernetes.io/instance: {{ .ctx.Release.Name }}
|
||||
{{- if .component }}
|
||||
app.kubernetes.io/component: {{ .component }}
|
||||
{{- end }}
|
||||
{{- if .memberlist }}
|
||||
app.kubernetes.io/part-of: memberlist
|
||||
{{- end }}
|
||||
{{- if .ctx.Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .ctx.Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .ctx.Release.Service }}
|
||||
{{- end }}
|
||||
{{- if .rolloutZoneName }}
|
||||
{{- if not .component }}
|
||||
{{- printf "Component name cannot be empty if rolloutZoneName (%s) is set" .rolloutZoneName | fail }}
|
||||
{{- end }}
|
||||
name: "{{ .component }}-{{ .rolloutZoneName }}" {{- /* Currently required for rollout-operator. https://github.com/grafana/rollout-operator/issues/15 */}}
|
||||
rollout-group: {{ .component }}
|
||||
zone: {{ .rolloutZoneName }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
POD labels
|
||||
Params:
|
||||
ctx = . context
|
||||
component = name of the component
|
||||
memberlist = true if part of memberlist gossip ring
|
||||
rolloutZoneName = rollout zone name (optional)
|
||||
*/}}
|
||||
{{- define "mimir.podLabels" -}}
|
||||
{{ with .ctx.Values.global.podLabels -}}
|
||||
{{ toYaml . }}
|
||||
{{ end }}
|
||||
{{- if .ctx.Values.enterprise.legacyLabels }}
|
||||
{{- if .component -}}
|
||||
app: {{ include "mimir.name" .ctx }}-{{ .component }}
|
||||
{{- if not .rolloutZoneName }}
|
||||
name: {{ .component }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .memberlist }}
|
||||
gossip_ring_member: "true"
|
||||
{{- end -}}
|
||||
{{- if .component }}
|
||||
target: {{ .component }}
|
||||
release: {{ .ctx.Release.Name }}
|
||||
{{- end }}
|
||||
{{- else -}}
|
||||
helm.sh/chart: {{ include "mimir.chart" .ctx }}
|
||||
app.kubernetes.io/name: {{ include "mimir.name" .ctx }}
|
||||
app.kubernetes.io/instance: {{ .ctx.Release.Name }}
|
||||
app.kubernetes.io/version: {{ .ctx.Chart.AppVersion | quote }}
|
||||
app.kubernetes.io/managed-by: {{ .ctx.Release.Service }}
|
||||
{{- if .component }}
|
||||
app.kubernetes.io/component: {{ .component }}
|
||||
{{- end }}
|
||||
{{- if .memberlist }}
|
||||
app.kubernetes.io/part-of: memberlist
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- $componentSection := include "mimir.componentSectionFromName" . | fromYaml }}
|
||||
{{- with ($componentSection).podLabels }}
|
||||
{{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- if .rolloutZoneName }}
|
||||
{{- if not .component }}
|
||||
{{- printf "Component name cannot be empty if rolloutZoneName (%s) is set" .rolloutZoneName | fail }}
|
||||
{{- end }}
|
||||
name: "{{ .component }}-{{ .rolloutZoneName }}" {{- /* Currently required for rollout-operator. https://github.com/grafana/rollout-operator/issues/15 */}}
|
||||
rollout-group: {{ .component }}
|
||||
zone: {{ .rolloutZoneName }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
POD annotations
|
||||
Params:
|
||||
ctx = . context
|
||||
component = name of the component
|
||||
*/}}
|
||||
{{- define "mimir.podAnnotations" -}}
|
||||
{{- if .ctx.Values.useExternalConfig }}
|
||||
checksum/config: {{ .ctx.Values.externalConfigVersion | quote }}
|
||||
{{- else -}}
|
||||
checksum/config: {{ include (print .ctx.Template.BasePath "/mimir-config.yaml") .ctx | sha256sum }}
|
||||
{{- end }}
|
||||
{{- with .ctx.Values.global.podAnnotations }}
|
||||
{{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- if .component }}
|
||||
{{- if .ctx.Values.vaultAgent.enabled }}
|
||||
{{- include "mimir.vaultAgent.annotations" (dict "ctx" .ctx "component" .component) }}
|
||||
{{- end }}
|
||||
{{- $componentSection := include "mimir.componentSectionFromName" . | fromYaml }}
|
||||
{{- with ($componentSection).podAnnotations }}
|
||||
{{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Service selector labels
|
||||
Params:
|
||||
ctx = . context
|
||||
component = name of the component
|
||||
rolloutZoneName = rollout zone name (optional)
|
||||
*/}}
|
||||
{{- define "mimir.selectorLabels" -}}
|
||||
{{- if .ctx.Values.enterprise.legacyLabels }}
|
||||
{{- if .component -}}
|
||||
app: {{ include "mimir.name" .ctx }}-{{ .component }}
|
||||
{{- end }}
|
||||
release: {{ .ctx.Release.Name }}
|
||||
{{- else -}}
|
||||
app.kubernetes.io/name: {{ include "mimir.name" .ctx }}
|
||||
app.kubernetes.io/instance: {{ .ctx.Release.Name }}
|
||||
{{- if .component }}
|
||||
app.kubernetes.io/component: {{ .component }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
{{- if .rolloutZoneName }}
|
||||
{{- if not .component }}
|
||||
{{- printf "Component name cannot be empty if rolloutZoneName (%s) is set" .rolloutZoneName | fail }}
|
||||
{{- end }}
|
||||
rollout-group: {{ .component }}
|
||||
zone: {{ .rolloutZoneName }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
Alertmanager http prefix
|
||||
*/}}
|
||||
{{- define "mimir.alertmanagerHttpPrefix" -}}
|
||||
{{- if (include "mimir.calculatedConfig" . | fromYaml).api }}
|
||||
{{- (include "mimir.calculatedConfig" . | fromYaml).api.alertmanager_http_prefix | default "/alertmanager" -}}
|
||||
{{- else -}}
|
||||
{{- print "/alertmanager" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
Prometheus http prefix
|
||||
*/}}
|
||||
{{- define "mimir.prometheusHttpPrefix" -}}
|
||||
{{- if (include "mimir.calculatedConfig" . | fromYaml).api }}
|
||||
{{- (include "mimir.calculatedConfig" . | fromYaml).api.prometheus_http_prefix | default "/prometheus" -}}
|
||||
{{- else -}}
|
||||
{{- print "/prometheus" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
KEDA Autoscaling Prometheus address
|
||||
*/}}
|
||||
{{- define "mimir.kedaPrometheusAddress" -}}
|
||||
{{- if not .ctx.Values.kedaAutoscaling.prometheusAddress -}}
|
||||
{{ include "mimir.metaMonitoring.metrics.remoteReadUrl" . }}
|
||||
{{- else -}}
|
||||
{{ .ctx.Values.kedaAutoscaling.prometheusAddress }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
Cluster name that shows up in dashboard metrics
|
||||
*/}}
|
||||
{{- define "mimir.clusterName" -}}
|
||||
{{ (include "mimir.calculatedConfig" . | fromYaml).cluster_name | default .Release.Name }}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Allow KubeVersion to be overridden. */}}
|
||||
{{- define "mimir.kubeVersion" -}}
|
||||
{{- default .Capabilities.KubeVersion.Version .Values.kubeVersionOverride -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Get API Versions */}}
|
||||
{{- define "mimir.podDisruptionBudget.apiVersion" -}}
|
||||
{{- if semverCompare ">= 1.21-0" (include "mimir.kubeVersion" .) -}}
|
||||
{{- print "policy/v1" -}}
|
||||
{{- else -}}
|
||||
{{- print "policy/v1beta1" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
mimir.componentSectionFromName returns the sections from the user .Values in YAML
|
||||
that corresponds to the requested component. mimir.componentSectionFromName takes two arguments
|
||||
.ctx = the root context of the chart
|
||||
.component = the name of the component. mimir.componentSectionFromName uses an internal mapping to know
|
||||
which component lives where in the values.yaml
|
||||
Examples:
|
||||
$componentSection := include "mimir.componentSectionFromName" (dict "ctx" . "component" "store-gateway") | fromYaml
|
||||
$componentSection.podLabels ...
|
||||
*/}}
|
||||
{{- define "mimir.componentSectionFromName" -}}
|
||||
{{- $componentsMap := dict
|
||||
"admin-api" "admin_api"
|
||||
"admin-cache" "admin-cache"
|
||||
"alertmanager" "alertmanager"
|
||||
"chunks-cache" "chunks-cache"
|
||||
"compactor" "compactor"
|
||||
"continuous-test" "continuous_test"
|
||||
"distributor" "distributor"
|
||||
"gateway" "gateway"
|
||||
"gr-aggr-cache" "gr-aggr-cache"
|
||||
"gr-metricname-cache" "gr-metricname-cache"
|
||||
"graphite-querier" "graphite.querier"
|
||||
"graphite-write-proxy" "graphite.write_proxy"
|
||||
"index-cache" "index-cache"
|
||||
"ingester" "ingester"
|
||||
"memcached" "memcached"
|
||||
"metadata-cache" "metadata-cache"
|
||||
"nginx" "nginx"
|
||||
"overrides-exporter" "overrides_exporter"
|
||||
"querier" "querier"
|
||||
"query-frontend" "query_frontend"
|
||||
"query-scheduler" "query_scheduler"
|
||||
"results-cache" "results-cache"
|
||||
"ruler" "ruler"
|
||||
"ruler-querier" "ruler_querier"
|
||||
"ruler-query-frontend" "ruler_query_frontend"
|
||||
"ruler-query-scheduler" "ruler_query_scheduler"
|
||||
"smoke-test" "smoke_test"
|
||||
"store-gateway" "store_gateway"
|
||||
"tokengen" "tokengenJob"
|
||||
-}}
|
||||
{{- $componentSection := index $componentsMap .component -}}
|
||||
{{- if not $componentSection -}}{{- printf "No component section mapping for %s not found in values; submit a bug report if you are a user, edit mimir.componentSectionFromName if you are a contributor" .component | fail -}}{{- end -}}
|
||||
{{- $section := .ctx.Values -}}
|
||||
{{- range regexSplit "\\." $componentSection -1 -}}
|
||||
{{- $section = index $section . -}}
|
||||
{{- if not $section -}}{{- printf "Component section %s not found in values; values: %s" . ($.ctx.Values | toJson | abbrev 100) | fail -}}{{- end -}}
|
||||
{{- end -}}
|
||||
{{- $section | toYaml -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the Vault Agent pod annotations if enabled and required by the component
|
||||
mimir.vaultAgent.annotations takes 2 arguments
|
||||
.ctx = the root context of the chart
|
||||
.component = the name of the component
|
||||
*/}}
|
||||
{{- define "mimir.vaultAgent.annotations" -}}
|
||||
{{- $vaultEnabledComponents := dict
|
||||
"admin-api" true
|
||||
"alertmanager" true
|
||||
"compactor" true
|
||||
"distributor" true
|
||||
"gateway" true
|
||||
"ingester" true
|
||||
"overrides-exporter" true
|
||||
"querier" true
|
||||
"query-frontend" true
|
||||
"query-scheduler" true
|
||||
"ruler" true
|
||||
"store-gateway" true
|
||||
-}}
|
||||
{{- if hasKey $vaultEnabledComponents .component }}
|
||||
vault.hashicorp.com/agent-inject: 'true'
|
||||
vault.hashicorp.com/role: '{{ .ctx.Values.vaultAgent.roleName }}'
|
||||
vault.hashicorp.com/agent-inject-secret-client.crt: '{{ .ctx.Values.vaultAgent.clientCertPath }}'
|
||||
vault.hashicorp.com/agent-inject-secret-client.key: '{{ .ctx.Values.vaultAgent.clientKeyPath }}'
|
||||
vault.hashicorp.com/agent-inject-secret-server.crt: '{{ .ctx.Values.vaultAgent.serverCertPath }}'
|
||||
vault.hashicorp.com/agent-inject-secret-server.key: '{{ .ctx.Values.vaultAgent.serverKeyPath }}'
|
||||
vault.hashicorp.com/agent-inject-secret-root.crt: '{{ .ctx.Values.vaultAgent.caCertPath }}'
|
||||
{{- end}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Get the no_auth_tenant from the configuration
|
||||
*/}}
|
||||
{{- define "mimir.noAuthTenant" -}}
|
||||
{{- (include "mimir.calculatedConfig" . | fromYaml).no_auth_tenant | default "anonymous" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return if we should create a PodSecurityPolicy. Takes into account user values and supported kubernetes versions.
|
||||
*/}}
|
||||
{{- define "mimir.rbac.usePodSecurityPolicy" -}}
|
||||
{{- and
|
||||
(
|
||||
or (semverCompare "< 1.24-0" (include "mimir.kubeVersion" .))
|
||||
(and (semverCompare "< 1.25-0" (include "mimir.kubeVersion" .)) .Values.rbac.forcePSPOnKubernetes124)
|
||||
)
|
||||
(and .Values.rbac.create (eq .Values.rbac.type "psp"))
|
||||
-}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return if we should create a SecurityContextConstraints. Takes into account user values and supported openshift versions.
|
||||
*/}}
|
||||
{{- define "mimir.rbac.useSecurityContextConstraints" -}}
|
||||
{{- and .Values.rbac.create (eq .Values.rbac.type "scc") -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "mimir.remoteWriteUrl.inCluster" -}}
|
||||
{{ include "mimir.gatewayUrl" . }}/api/v1/push
|
||||
{{- end -}}
|
||||
|
||||
{{- define "mimir.remoteReadUrl.inCluster" -}}
|
||||
{{ include "mimir.gatewayUrl" . }}{{ include "mimir.prometheusHttpPrefix" . }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Creates dict for zone-aware replication configuration
|
||||
Params:
|
||||
ctx = . context
|
||||
component = component name
|
||||
Return value:
|
||||
{
|
||||
zoneName: {
|
||||
affinity: <affinity>,
|
||||
nodeSelector: <nodeSelector>,
|
||||
replicas: <N>,
|
||||
storageClass: <S>
|
||||
},
|
||||
...
|
||||
}
|
||||
During migration there is a special case where an extra "zone" is generated with zonaName == "" empty string.
|
||||
The empty string evaluates to false in boolean expressions so it is treated as the default (non zone-aware) zone,
|
||||
which allows us to keep generating everything for the default zone.
|
||||
*/}}
|
||||
{{- define "mimir.zoneAwareReplicationMap" -}}
|
||||
{{- $zonesMap := (dict) -}}
|
||||
{{- $componentSection := include "mimir.componentSectionFromName" . | fromYaml -}}
|
||||
{{- $defaultZone := (dict "affinity" $componentSection.affinity "nodeSelector" $componentSection.nodeSelector "replicas" $componentSection.replicas "storageClass" $componentSection.storageClass) -}}
|
||||
|
||||
{{- if $componentSection.zoneAwareReplication.enabled -}}
|
||||
{{- $numberOfZones := len $componentSection.zoneAwareReplication.zones -}}
|
||||
{{- if lt $numberOfZones 3 -}}
|
||||
{{- fail "When zone-awareness is enabled, you must have at least 3 zones defined." -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $requestedReplicas := $componentSection.replicas -}}
|
||||
{{- if and (has .component (list "ingester" "alertmanager")) $componentSection.zoneAwareReplication.migration.enabled (not $componentSection.zoneAwareReplication.migration.writePath) -}}
|
||||
{{- $requestedReplicas = $componentSection.zoneAwareReplication.migration.replicas }}
|
||||
{{- end -}}
|
||||
{{- $replicaPerZone := div (add $requestedReplicas $numberOfZones -1) $numberOfZones -}}
|
||||
|
||||
{{- range $idx, $rolloutZone := $componentSection.zoneAwareReplication.zones -}}
|
||||
{{- $_ := set $zonesMap $rolloutZone.name (dict
|
||||
"affinity" (($rolloutZone.extraAffinity | default (dict)) | mergeOverwrite (include "mimir.zoneAntiAffinity" (dict "component" $.component "rolloutZoneName" $rolloutZone.name "topologyKey" $componentSection.zoneAwareReplication.topologyKey ) | fromYaml ) )
|
||||
"nodeSelector" ($rolloutZone.nodeSelector | default (dict) )
|
||||
"replicas" $replicaPerZone
|
||||
"storageClass" $rolloutZone.storageClass
|
||||
) -}}
|
||||
{{- end -}}
|
||||
{{- if $componentSection.zoneAwareReplication.migration.enabled -}}
|
||||
{{- if $componentSection.zoneAwareReplication.migration.scaleDownDefaultZone -}}
|
||||
{{- $_ := set $defaultZone "replicas" 0 -}}
|
||||
{{- end -}}
|
||||
{{- $_ := set $zonesMap "" $defaultZone -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- else -}}
|
||||
{{- $_ := set $zonesMap "" $defaultZone -}}
|
||||
{{- end -}}
|
||||
{{- $zonesMap | toYaml }}
|
||||
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Calculate anti-affinity for a zone
|
||||
Params:
|
||||
component = component name
|
||||
rolloutZoneName = name of the rollout zone
|
||||
topologyKey = topology key
|
||||
*/}}
|
||||
{{- define "mimir.zoneAntiAffinity" -}}
|
||||
{{- if .topologyKey -}}
|
||||
podAntiAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
- labelSelector:
|
||||
matchExpressions:
|
||||
- key: rollout-group
|
||||
operator: In
|
||||
values:
|
||||
- {{ .component }}
|
||||
- key: zone
|
||||
operator: NotIn
|
||||
values:
|
||||
- {{ .rolloutZoneName }}
|
||||
topologyKey: {{ .topologyKey | quote }}
|
||||
{{- else -}}
|
||||
{}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Calculate annotations with zone-awareness
|
||||
Params:
|
||||
ctx = . context
|
||||
component = component name
|
||||
rolloutZoneName = rollout zone name (optional)
|
||||
*/}}
|
||||
{{- define "mimir.componentAnnotations" -}}
|
||||
{{- $componentSection := include "mimir.componentSectionFromName" . | fromYaml -}}
|
||||
{{- if and (or $componentSection.zoneAwareReplication.enabled $componentSection.zoneAwareReplication.migration.enabled) .rolloutZoneName }}
|
||||
{{- $map := dict "rollout-max-unavailable" ($componentSection.zoneAwareReplication.maxUnavailable | toString) -}}
|
||||
{{- toYaml (deepCopy $map | mergeOverwrite $componentSection.annotations) }}
|
||||
{{- else -}}
|
||||
{{ toYaml $componentSection.annotations }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{- define "mimir.var_dump" -}}
|
||||
{{- . | mustToPrettyJson | printf "\nThe JSON output of the dumped var is: \n%s" | fail }}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
siToBytes is used to convert Kubernetes byte units to bytes.
|
||||
Works for a sub set of SI suffixes: m, k, M, G, T, and their power-of-two equivalents: Ki, Mi, Gi, Ti.
|
||||
|
||||
mimir.siToBytes takes 1 argument
|
||||
.value = the input value with SI unit
|
||||
*/}}
|
||||
{{- define "mimir.siToBytes" -}}
|
||||
{{- if (hasSuffix "Ki" .value) -}}
|
||||
{{- trimSuffix "Ki" .value | float64 | mul 1024 | ceil | int64 -}}
|
||||
{{- else if (hasSuffix "Mi" .value) -}}
|
||||
{{- trimSuffix "Mi" .value | float64 | mul 1048576 | ceil | int64 -}}
|
||||
{{- else if (hasSuffix "Gi" .value) -}}
|
||||
{{- trimSuffix "Gi" .value | float64 | mul 1073741824 | ceil | int64 -}}
|
||||
{{- else if (hasSuffix "Ti" .value) -}}
|
||||
{{- trimSuffix "Ti" .value | float64 | mul 1099511627776 | ceil | int64 -}}
|
||||
{{- else if (hasSuffix "k" .value) -}}
|
||||
{{- trimSuffix "k" .value | float64 | mul 1000 | ceil | int64 -}}
|
||||
{{- else if (hasSuffix "M" .value) -}}
|
||||
{{- trimSuffix "M" .value | float64 | mul 1000000 | ceil | int64 -}}
|
||||
{{- else if (hasSuffix "G" .value) -}}
|
||||
{{- trimSuffix "G" .value | float64 | mul 1000000000 | ceil | int64 -}}
|
||||
{{- else if (hasSuffix "T" .value) -}}
|
||||
{{- trimSuffix "T" .value | float64 | mul 1000000000000 | ceil | int64 -}}
|
||||
{{- else if (hasSuffix "m" .value) -}}
|
||||
{{- trimSuffix "m" .value | float64 | mulf 0.001 | ceil | int64 -}}
|
||||
{{- else -}}
|
||||
{{- .value }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
parseCPU is used to convert Kubernetes CPU units to the corresponding float value of CPU cores.
|
||||
The returned value is a string representation. If you need to do any math on it, please parse the string first.
|
||||
|
||||
mimir.parseCPU takes 1 argument
|
||||
.value = the Kubernetes CPU request value
|
||||
*/}}
|
||||
{{- define "mimir.parseCPU" -}}
|
||||
{{- $value_string := .value | toString -}}
|
||||
{{- if (hasSuffix "m" $value_string) -}}
|
||||
{{ trimSuffix "m" $value_string | float64 | mulf 0.001 -}}
|
||||
{{- else -}}
|
||||
{{- $value_string }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
cpuToMilliCPU is used to convert Kubernetes CPU units to MilliCPU.
|
||||
The returned value is a string representation. If you need to do any math on it, please parse the string first.
|
||||
|
||||
mimir.cpuToMilliCPU takes 1 argument
|
||||
.value = the Kubernetes CPU request value
|
||||
*/}}
|
||||
{{- define "mimir.cpuToMilliCPU" -}}
|
||||
{{- $value_string := .value | toString -}}
|
||||
{{- if (hasSuffix "m" $value_string) -}}
|
||||
{{ trimSuffix "m" $value_string -}}
|
||||
{{- else -}}
|
||||
{{- $value_string | float64 | mulf 1000 | toString }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
Reference in New Issue
Block a user