Helm: Add Table Manager support to Loki helm chart (#8098)

The Table Manager is a Loki component which takes care of creating a
periodic table before its time period begins, and deleting it once its
data time range exceeds the retention period.
This PR is to add Table Manager support to the loki helm chart
deployment as the current chart is based on the deprecated
loki-simple-scalable chart that did not support Table Manager.

Fixes #<6830>
pull/8200/head
openbob 3 years ago committed by GitHub
parent b6004050a6
commit af93f4a11e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 180
      docs/sources/installation/helm/reference.md
  2. 32
      production/helm/loki/templates/table-manager/_helpers-table-manager.tpl
  3. 112
      production/helm/loki/templates/table-manager/deployment-table-manager.yaml
  4. 30
      production/helm/loki/templates/table-manager/service-table-manager.yaml
  5. 57
      production/helm/loki/templates/table-manager/servicemonitor-table-manager.yaml
  6. 62
      production/helm/loki/values.yaml

@ -3145,6 +3145,186 @@ null
<td><pre lang="json">
[]
</pre>
</td>
</tr>
<tr>
<td>tableManager.affinity</td>
<td>string</td>
<td>Affinity for table-manager pods. Passed through `tpl` and, thus, to be configured as string</td>
<td><pre lang="">
Hard node and soft zone anti-affinity
</pre>
</td>
</tr>
<tr>
<td>tableManager.command</td>
<td>string</td>
<td>Command to execute instead of defined in Docker image</td>
<td><pre lang="json">
null
</pre>
</td>
</tr>
<tr>
<td>tableManager.enabled</td>
<td>bool</td>
<td>Specifies whether the table-manager should be enabled</td>
<td><pre lang="json">
false
</pre>
</td>
</tr>
<tr>
<td>tableManager.extraArgs</td>
<td>list</td>
<td>Additional CLI args for the table-manager</td>
<td><pre lang="json">
[]
</pre>
</td>
</tr>
<tr>
<td>tableManager.extraContainers</td>
<td>list</td>
<td>Containers to add to the table-manager pods</td>
<td><pre lang="json">
[]
</pre>
</td>
</tr>
<tr>
<td>tableManager.extraEnv</td>
<td>list</td>
<td>Environment variables to add to the table-manager pods</td>
<td><pre lang="json">
[]
</pre>
</td>
</tr>
<tr>
<td>tableManager.extraEnvFrom</td>
<td>list</td>
<td>Environment variables from secrets or configmaps to add to the table-manager pods</td>
<td><pre lang="json">
[]
</pre>
</td>
</tr>
<tr>
<td>tableManager.extraVolumeMounts</td>
<td>list</td>
<td>Volume mounts to add to the table-manager pods</td>
<td><pre lang="json">
[]
</pre>
</td>
</tr>
<tr>
<td>tableManager.extraVolumes</td>
<td>list</td>
<td>Volumes to add to the table-manager pods</td>
<td><pre lang="json">
[]
</pre>
</td>
</tr>
<tr>
<td>tableManager.image.registry</td>
<td>string</td>
<td>The Docker registry for the table-manager image. Overrides `loki.image.registry`</td>
<td><pre lang="json">
null
</pre>
</td>
</tr>
<tr>
<td>tableManager.image.repository</td>
<td>string</td>
<td>Docker image repository for the table-manager image. Overrides `loki.image.repository`</td>
<td><pre lang="json">
null
</pre>
</td>
</tr>
<tr>
<td>tableManager.image.tag</td>
<td>string</td>
<td>Docker image tag for the table-manager image. Overrides `loki.image.tag`</td>
<td><pre lang="json">
null
</pre>
</td>
</tr>
<tr>
<td>tableManager.nodeSelector</td>
<td>object</td>
<td>Node selector for table-manager pods</td>
<td><pre lang="json">
{}
</pre>
</td>
</tr>
<tr>
<td>tableManager.podAnnotations</td>
<td>object</td>
<td>Annotations for table-manager pods</td>
<td><pre lang="json">
{}
</pre>
</td>
</tr>
<tr>
<td>tableManager.podLabels</td>
<td>object</td>
<td>Labels for table-manager pods</td>
<td><pre lang="json">
{}
</pre>
</td>
</tr>
<tr>
<td>tableManager.priorityClassName</td>
<td>string</td>
<td>The name of the PriorityClass for table-manager pods</td>
<td><pre lang="json">
null
</pre>
</td>
</tr>
<tr>
<td>tableManager.resources</td>
<td>object</td>
<td>Resource requests and limits for the table-manager</td>
<td><pre lang="json">
{}
</pre>
</td>
</tr>
<tr>
<td>tableManager.serviceLabels</td>
<td>object</td>
<td>Labels for table-manager service</td>
<td><pre lang="json">
{}
</pre>
</td>
</tr>
<tr>
<td>tableManager.terminationGracePeriodSeconds</td>
<td>int</td>
<td>Grace period to allow the table-manager to shutdown before it is killed</td>
<td><pre lang="json">
30
</pre>
</td>
</tr>
<tr>
<td>tableManager.tolerations</td>
<td>list</td>
<td>Tolerations for table-manager pods</td>
<td><pre lang="json">
[]
</pre>
</td>
</tr>
<tr>

@ -0,0 +1,32 @@
{{/*
table-manager fullname
*/}}
{{- define "loki.tableManagerFullname" -}}
{{ include "loki.fullname" . }}-table-manager
{{- end }}
{{/*
table-manager common labels
*/}}
{{- define "loki.tableManagerLabels" -}}
{{ include "loki.labels" . }}
app.kubernetes.io/component: table-manager
{{- end }}
{{/*
table-manager selector labels
*/}}
{{- define "loki.tableManagerSelectorLabels" -}}
{{ include "loki.selectorLabels" . }}
app.kubernetes.io/component: table-manager
{{- end }}
{{/*
table-manager priority class name
*/}}
{{- define "loki.tableManagerPriorityClassName" -}}
{{- $pcn := coalesce .Values.global.priorityClassName .Values.tableManager.priorityClassName -}}
{{- if $pcn }}
priorityClassName: {{ $pcn }}
{{- end }}
{{- end }}

@ -0,0 +1,112 @@
{{- if .Values.tableManager.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "loki.tableManagerFullname" . }}
labels:
{{- include "loki.tableManagerLabels" . | nindent 4 }}
{{- with .Values.loki.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
replicas: 1
revisionHistoryLimit: {{ .Values.loki.revisionHistoryLimit }}
selector:
matchLabels:
{{- include "loki.tableManagerSelectorLabels" . | nindent 6 }}
template:
metadata:
annotations:
checksum/config: {{ include (print .Template.BasePath "/configmap.yaml") . | sha256sum }}
{{- with .Values.loki.podAnnotations }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tableManager.podAnnotations }}
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "loki.tableManagerSelectorLabels" . | nindent 8 }}
{{- with .Values.loki.podLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tableManager.podLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ include "loki.serviceAccountName" . }}
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- include "loki.tableManagerPriorityClassName" . | nindent 6 }}
securityContext:
{{- toYaml .Values.loki.podSecurityContext | nindent 8 }}
terminationGracePeriodSeconds: {{ .Values.tableManager.terminationGracePeriodSeconds }}
containers:
- name: table-manager
image: {{ include "loki.image" . }}
imagePullPolicy: {{ .Values.loki.image.pullPolicy }}
args:
- -config.file=/etc/loki/config/config.yaml
- -target=table-manager
{{- with .Values.tableManager.extraArgs }}
{{- toYaml . | nindent 12 }}
{{- end }}
ports:
- name: http-metrics
containerPort: 3100
protocol: TCP
- name: grpc
containerPort: 9095
protocol: TCP
{{- with .Values.tableManager.extraEnv }}
env:
{{- toYaml . | nindent 12 }}
{{- end }}
{{- with .Values.tableManager.extraEnvFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
securityContext:
{{- toYaml .Values.loki.containerSecurityContext | nindent 12 }}
readinessProbe:
{{- toYaml .Values.loki.readinessProbe | nindent 12 }}
livenessProbe:
{{- toYaml .Values.loki.livenessProbe | nindent 12 }}
volumeMounts:
- name: config
mountPath: /etc/loki/config
{{- with .Values.tableManager.extraVolumeMounts }}
{{- toYaml . | nindent 12 }}
{{- end }}
resources:
{{- toYaml .Values.tableManager.resources | nindent 12 }}
{{- if .Values.tableManager.extraContainers }}
{{- toYaml .Values.tableManager.extraContainers | nindent 8}}
{{- end }}
{{- with .Values.tableManager.affinity }}
affinity:
{{- tpl . $ | nindent 8 }}
{{- end }}
{{- with .Values.tableManager.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tableManager.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
volumes:
- name: config
{{- if .Values.loki.existingSecretForConfig }}
secret:
secretName: {{ .Values.loki.existingSecretForConfig }}
{{- else }}
configMap:
name: {{ include "loki.fullname" . }}
{{- end }}
{{- with .Values.tableManager.extraVolumes }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- end }}

@ -0,0 +1,30 @@
{{- if .Values.tableManager.enabled }}
apiVersion: v1
kind: Service
metadata:
name: {{ include "loki.fullname" . }}-table-manager
labels:
{{- include "loki.labels" . | nindent 4 }}
{{- with .Values.tableManager.serviceLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
app.kubernetes.io/component: table-manager
{{- with .Values.loki.serviceAnnotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
type: ClusterIP
ports:
- name: http-metrics
port: 3100
targetPort: http-metrics
protocol: TCP
- name: grpc
port: 9095
targetPort: grpc
protocol: TCP
selector:
{{- include "loki.selectorLabels" . | nindent 4 }}
app.kubernetes.io/component: table-manager
{{- end }}

@ -0,0 +1,57 @@
{{- if .Values.tableManager.enabled }}
{{- with .Values.serviceMonitor }}
{{- if .enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ include "loki.tableManagerFullname" $ }}
{{- with .namespace }}
namespace: {{ . }}
{{- end }}
{{- with .annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
labels:
{{- include "loki.tableManagerLabels" $ | nindent 4 }}
{{- with .labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .namespaceSelector }}
namespaceSelector:
{{- toYaml . | nindent 4 }}
{{- end }}
selector:
matchLabels:
{{- include "loki.tableManagerSelectorLabels" $ | nindent 6 }}
endpoints:
- port: http-metrics
{{- with .interval }}
interval: {{ . }}
{{- end }}
{{- with .scrapeTimeout }}
scrapeTimeout: {{ . }}
{{- end }}
{{- with .relabelings }}
relabelings:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .metricRelabelings }}
metricRelabelings:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .scheme }}
scheme: {{ . }}
{{- end }}
{{- with .tlsConfig }}
tlsConfig:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .targetLabels }}
targetLabels:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

@ -141,6 +141,10 @@ loki:
{{ include "loki.rulerConfig" . }}
table_manager:
retention_deletes_enabled: false
retention_period: 0
{{- with .Values.loki.memcached.results_cache }}
query_range:
align_queries_with_step: true
@ -689,6 +693,64 @@ write:
# -- Selector for persistent disk
selector: null
# Configuration for the table-manager
tableManager:
# -- Specifies whether the table-manager should be enabled
enabled: false
image:
# -- The Docker registry for the table-manager image. Overrides `loki.image.registry`
registry: null
# -- Docker image repository for the table-manager image. Overrides `loki.image.repository`
repository: null
# -- Docker image tag for the table-manager image. Overrides `loki.image.tag`
tag: null
# -- Command to execute instead of defined in Docker image
command: null
# -- The name of the PriorityClass for table-manager pods
priorityClassName: null
# -- Labels for table-manager pods
podLabels: {}
# -- Annotations for table-manager pods
podAnnotations: {}
# -- Labels for table-manager service
serviceLabels: {}
# -- Additional CLI args for the table-manager
extraArgs: []
# -- Environment variables to add to the table-manager pods
extraEnv: []
# -- Environment variables from secrets or configmaps to add to the table-manager pods
extraEnvFrom: []
# -- Volume mounts to add to the table-manager pods
extraVolumeMounts: []
# -- Volumes to add to the table-manager pods
extraVolumes: []
# -- Resource requests and limits for the table-manager
resources: {}
# -- Containers to add to the table-manager pods
extraContainers: []
# -- Grace period to allow the table-manager to shutdown before it is killed
terminationGracePeriodSeconds: 30
# -- Affinity for table-manager pods. Passed through `tpl` and, thus, to be configured as string
# @default -- Hard node and soft zone anti-affinity
affinity: |
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
{{- include "loki.tableManagerSelectorLabels" . | nindent 10 }}
topologyKey: kubernetes.io/hostname
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
{{- include "loki.tableManagerSelectorLabels" . | nindent 12 }}
topologyKey: failure-domain.beta.kubernetes.io/zone
# -- Node selector for table-manager pods
nodeSelector: {}
# -- Tolerations for table-manager pods
tolerations: []
# Configuration for the read pod(s)
read:
# -- Number of replicas for the read

Loading…
Cancel
Save