[bitnami/grafana-tempo] Add chart (#6766)

* [bitnami/grafana-tempo] Add chart

* New changes

* undo

* mem

* Add names

* servicemonitor

* [bitnami/grafana-tempo] Update components versions

Signed-off-by: Bitnami Containers <containers@bitnami.com>

Co-authored-by: Bitnami Containers <containers@bitnami.com>
This commit is contained in:
Javier J. Salmerón-García
2021-07-02 18:01:14 +02:00
committed by GitHub
co-authored by Bitnami Containers
parent eaf474947c
commit e4da06aa3d
32 changed files with 4665 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj
+9
View File
@@ -0,0 +1,9 @@
dependencies:
- name: common
repository: https://charts.bitnami.com/bitnami
version: 1.7.0
- name: memcached
repository: https://charts.bitnami.com/bitnami
version: 5.13.1
digest: sha256:eb748e9862d4e53cf5572bb1a2fd460abf58c0b257bd65e183110a2b587eaf6b
generated: "2021-07-02T15:32:20.686275209Z"
+30
View File
@@ -0,0 +1,30 @@
annotations:
category: Infrastructure
apiVersion: v2
appVersion: 1.0.1
dependencies:
- name: common
repository: https://charts.bitnami.com/bitnami
tags:
- bitnami-common
version: 1.x.x
- name: memcached
repository: https://charts.bitnami.com/bitnami
version: 5.x.x
description: Grafana Tempo is an open source, easy-to-use and high-scale distributed tracing backend.
engine: gotpl
home: https://github.com/grafana/tempo/
icon: https://bitnami.com/assets/stacks/grafana-tempo/img/grafana-tempo-stack-220x234.png
keywords:
- grafana
- tracing
- metrics
- infrastructure
maintainers:
- email: containers@bitnami.com
name: Bitnami
name: grafana-tempo
sources:
- https://github.com/bitnami/bitnami-docker-grafana-tempo
- https://github.com/grafana/tempo/
version: 0.1.0
+680
View File
@@ -0,0 +1,680 @@
# grafana-tempo
[Grafana Tempo](https://github.com/grafana/tempo) is a an open source high-scale distributed tracing backend. It only requires object storage and supports integration with Grafana, Prometheus and Loki.
## TL;DR
```console
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install my-release bitnami/grafana-tempo
```
## Introduction
Bitnami charts for Helm are carefully engineered, actively maintained and are the quickest and easiest way to deploy containers on a Kubernetes cluster that are ready to handle production workloads.
This chart bootstraps a [Grafana Tempo](https://github.com/grafana/tempo) Deployment in a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
Bitnami charts can be used with [Kubeapps](https://kubeapps.com/) for deployment and management of Helm Charts in clusters. This Helm chart has been tested on top of [Bitnami Kubernetes Production Runtime](https://kubeprod.io/) (BKPR). Deploy BKPR to get automated TLS certificates, logging and monitoring for your applications.
[Learn more about the default configuration of the chart](https://docs.bitnami.com/kubernetes/infrastructure/grafana-tempo/get-started/understand-default-configuration/).
## Prerequisites
- Kubernetes 1.12+
- Helm 3.1.0
- PV provisioner support in the underlying infrastructure
## Installing the Chart
To install the chart with the release name `my-release`:
```console
helm install my-release bitnami/grafana-tempo
```
The command deploys grafana-tempo on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation.
> **Tip**: List all releases using `helm list`
## Uninstalling the Chart
To uninstall/delete the `my-release` deployment:
```console
helm delete my-release
```
The command removes all the Kubernetes components associated with the chart and deletes the release.
## Parameters
### Global parameters
| Name | Description | Value |
|---------------------------|-------------------------------------------------|-------|
| `global.imageRegistry` | Global Docker image registry | `nil` |
| `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` |
| `global.storageClass` | Global StorageClass for Persistent Volume(s) | `nil` |
### Common parameters
| Name | Description | Value |
|---------------------|----------------------------------------------------|-----------------|
| `kubeVersion` | Override Kubernetes version | `nil` |
| `nameOverride` | String to partially override common.names.fullname | `nil` |
| `fullnameOverride` | String to fully override common.names.fullname | `nil` |
| `commonLabels` | Labels to add to all deployed objects | `{}` |
| `commonAnnotations` | Annotations to add to all deployed objects | `{}` |
| `clusterDomain` | Kubernetes cluster domain name | `cluster.local` |
| `extraDeploy` | Array of extra objects to deploy with the release | `[]` |
### Common Grafana Tempo Parameters
| Name | Description | Value |
|----------------------------------------|------------------------------------------------------------|-------------------------------|
| `tempo.image.registry` | Grafana Tempo image registry | `docker.io` |
| `tempo.image.repository` | Grafana Tempo image repository | `grafana/tempo` |
| `tempo.image.tag` | Grafana Tempo image tag (immutable tags are recommended) | `latest` |
| `tempo.image.pullPolicy` | Grafana Tempo image pull policy | `IfNotPresent` |
| `tempo.image.pullSecrets` | Grafana Tempo image pull secrets | `[]` |
| `tempo.containerPort` | Tempo components web port | `3100` |
| `tempo.grpcContainerPort` | Tempo components GRPC port | `9095` |
| `tempo.memBallastSizeMbs` | Tempo components memory ballast size in MB | `1024` |
| `tempo.dataDir` | Tempo components data directory | `/bitnami/tempo-grafana/data` |
| `tempo.traces.jaeger.grpc` | Enable Tempo to ingest Jaeger GRPC traces | `true` |
| `tempo.traces.jaeger.thriftBinary` | Enable Tempo to ingest Jaeger Thrift Binary traces | `false` |
| `tempo.traces.jaeger.thriftCompact` | Enable Tempo to ingest Jaeger Thrift Compact traces | `false` |
| `tempo.traces.jaeger.thriftHttp` | Enable Tempo to ingest Jaeger Thrift HTTP traces | `true` |
| `tempo.traces.zipkin` | Enable Tempo to ingest Zipkin traces | `false` |
| `tempo.traces.otlp.http` | Enable Tempo to ingest Open Telementry HTTP traces | `false` |
| `tempo.traces.otlp.grpc` | Enable Tempo to ingest Open Telementry GRPC traces | `false` |
| `tempo.traces.opencensus` | Enable Tempo to ingest Open Census traces | `false` |
| `tempo.gossipRing.containerPort` | gossip service HTTP port | `7946` |
| `tempo.gossipRing.service.port` | gossip headless service HTTP port | `7946` |
| `tempo.gossipRing.service.annotations` | Additional custom annotations for gossip headless service | `{}` |
| `tempo.configuration` | Tempo components configuration | `""` |
| `tempo.existingConfigmap` | name of a ConfigMap with the tempo configuration | `nil` |
| `tempo.overridesConfiguration` | Tempo components overrides configuration settings | `""` |
| `tempo.existingOverridesConfigmap` | name of a ConfigMap with the tempo overrides configuration | `nil` |
### Compactor Deployment Parameters
| Name | Description | Value |
|------------------------------------------------|-----------------------------------------------------------------------------------------------------|-----------------|
| `compactor.enabled` | Enable compactor deployment | `true` |
| `compactor.replicaCount` | Number of compactor replicas to deploy | `1` |
| `compactor.livenessProbe.enabled` | Enable livenessProbe on compactor nodes | `true` |
| `compactor.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `compactor.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `compactor.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` |
| `compactor.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `compactor.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `compactor.readinessProbe.enabled` | Enable readinessProbe on compactor nodes | `true` |
| `compactor.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` |
| `compactor.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `compactor.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` |
| `compactor.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` |
| `compactor.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `compactor.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` |
| `compactor.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` |
| `compactor.resources.limits` | The resources limits for the compactor containers | `{}` |
| `compactor.resources.requests` | The requested resources for the compactor containers | `{}` |
| `compactor.podSecurityContext.enabled` | Enabled compactor pods' Security Context | `true` |
| `compactor.podSecurityContext.fsGroup` | Set compactor pod's Security Context fsGroup | `1001` |
| `compactor.containerSecurityContext.enabled` | Enabled compactor containers' Security Context | `true` |
| `compactor.containerSecurityContext.runAsUser` | Set compactor containers' Security Context runAsUser | `1001` |
| `compactor.command` | Override default container command (useful when using custom images) | `[]` |
| `compactor.args` | Override default container args (useful when using custom images) | `[]` |
| `compactor.hostAliases` | compactor pods host aliases | `[]` |
| `compactor.podLabels` | Extra labels for compactor pods | `{}` |
| `compactor.podAnnotations` | Annotations for compactor pods | `{}` |
| `compactor.podAffinityPreset` | Pod affinity preset. Ignored if `compactor.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `compactor.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `compactor.affinity` is set. Allowed values: `soft` or `hard` | `soft` |
| `compactor.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `compactor.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `compactor.nodeAffinityPreset.key` | Node label key to match. Ignored if `compactor.affinity` is set | `""` |
| `compactor.nodeAffinityPreset.values` | Node label values to match. Ignored if `compactor.affinity` is set | `[]` |
| `compactor.affinity` | Affinity for compactor pods assignment | `{}` |
| `compactor.nodeSelector` | Node labels for compactor pods assignment | `{}` |
| `compactor.tolerations` | Tolerations for compactor pods assignment | `[]` |
| `compactor.updateStrategy.type` | compactor statefulset strategy type | `RollingUpdate` |
| `compactor.priorityClassName` | compactor pods' priorityClassName | `""` |
| `compactor.lifecycleHooks` | for the compactor container(s) to automate configuration before or after startup | `{}` |
| `compactor.extraEnvVars` | Array with extra environment variables to add to compactor nodes | `[]` |
| `compactor.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for compactor nodes | `nil` |
| `compactor.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for compactor nodes | `nil` |
| `compactor.extraVolumes` | Optionally specify extra list of additional volumes for the compactor pod(s) | `[]` |
| `compactor.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the compactor container(s) | `[]` |
| `compactor.sidecars` | Add additional sidecar containers to the compactor pod(s) | `{}` |
| `compactor.initContainers` | Add additional init containers to the compactor pod(s) | `{}` |
### Compactor Traffic Exposure Parameters
| Name | Description | Value |
|----------------------------------------------|-----------------------------------------------------|-------------|
| `compactor.service.type` | compactor service type | `ClusterIP` |
| `compactor.service.port` | compactor service HTTP port | `3100` |
| `compactor.service.nodePorts.http` | Node port for HTTP | `nil` |
| `compactor.service.clusterIP` | compactor service Cluster IP | `nil` |
| `compactor.service.loadBalancerIP` | compactor service Load Balancer IP | `nil` |
| `compactor.service.loadBalancerSourceRanges` | compactor service Load Balancer sources | `[]` |
| `compactor.service.externalTrafficPolicy` | compactor service external traffic policy | `Cluster` |
| `compactor.service.annotations` | Additional custom annotations for compactor service | `{}` |
### Distributor Deployment Parameters
| Name | Description | Value |
|--------------------------------------------------|-------------------------------------------------------------------------------------------------------|-----------------|
| `distributor.replicaCount` | Number of distributor replicas to deploy | `1` |
| `distributor.livenessProbe.enabled` | Enable livenessProbe on distributor nodes | `true` |
| `distributor.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `distributor.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `distributor.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` |
| `distributor.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `distributor.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `distributor.readinessProbe.enabled` | Enable readinessProbe on distributor nodes | `true` |
| `distributor.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` |
| `distributor.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `distributor.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` |
| `distributor.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` |
| `distributor.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `distributor.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` |
| `distributor.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` |
| `distributor.resources.limits` | The resources limits for the distributor containers | `{}` |
| `distributor.resources.requests` | The requested resources for the distributor containers | `{}` |
| `distributor.podSecurityContext.enabled` | Enabled distributor pods' Security Context | `true` |
| `distributor.podSecurityContext.fsGroup` | Set distributor pod's Security Context fsGroup | `1001` |
| `distributor.containerSecurityContext.enabled` | Enabled distributor containers' Security Context | `true` |
| `distributor.containerSecurityContext.runAsUser` | Set distributor containers' Security Context runAsUser | `1001` |
| `distributor.command` | Override default container command (useful when using custom images) | `[]` |
| `distributor.args` | Override default container args (useful when using custom images) | `[]` |
| `distributor.hostAliases` | distributor pods host aliases | `[]` |
| `distributor.podLabels` | Extra labels for distributor pods | `{}` |
| `distributor.podAnnotations` | Annotations for distributor pods | `{}` |
| `distributor.podAffinityPreset` | Pod affinity preset. Ignored if `distributor.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `distributor.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `distributor.affinity` is set. Allowed values: `soft` or `hard` | `soft` |
| `distributor.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `distributor.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `distributor.nodeAffinityPreset.key` | Node label key to match. Ignored if `distributor.affinity` is set | `""` |
| `distributor.nodeAffinityPreset.values` | Node label values to match. Ignored if `distributor.affinity` is set | `[]` |
| `distributor.affinity` | Affinity for distributor pods assignment | `{}` |
| `distributor.nodeSelector` | Node labels for distributor pods assignment | `{}` |
| `distributor.tolerations` | Tolerations for distributor pods assignment | `[]` |
| `distributor.updateStrategy.type` | distributor statefulset strategy type | `RollingUpdate` |
| `distributor.priorityClassName` | distributor pods' priorityClassName | `""` |
| `distributor.lifecycleHooks` | for the distributor container(s) to automate configuration before or after startup | `{}` |
| `distributor.extraEnvVars` | Array with extra environment variables to add to distributor nodes | `[]` |
| `distributor.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for distributor nodes | `nil` |
| `distributor.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for distributor nodes | `nil` |
| `distributor.extraVolumes` | Optionally specify extra list of additional volumes for the distributor pod(s) | `[]` |
| `distributor.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the distributor container(s) | `[]` |
| `distributor.sidecars` | Add additional sidecar containers to the distributor pod(s) | `{}` |
| `distributor.initContainers` | Add additional init containers to the distributor pod(s) | `{}` |
### Distributor Traffic Exposure Parameters
| Name | Description | Value |
|------------------------------------------------|-------------------------------------------------------|-------------|
| `distributor.service.type` | distributor service type | `ClusterIP` |
| `distributor.service.port` | distributor service HTTP port | `3100` |
| `distributor.service.grpcPort` | distributor service HTTP port | `9095` |
| `distributor.service.nodePorts.http` | Node port for HTTP | `nil` |
| `distributor.service.nodePorts.grpc` | Node port for GRPC | `nil` |
| `distributor.service.clusterIP` | distributor service Cluster IP | `nil` |
| `distributor.service.loadBalancerIP` | distributor service Load Balancer IP | `nil` |
| `distributor.service.loadBalancerSourceRanges` | distributor service Load Balancer sources | `[]` |
| `distributor.service.externalTrafficPolicy` | distributor service external traffic policy | `Cluster` |
| `distributor.service.annotations` | Additional custom annotations for distributor service | `{}` |
### Ingester Deployment Parameters
| Name | Description | Value |
|-----------------------------------------------|----------------------------------------------------------------------------------------------------|-----------------|
| `ingester.replicaCount` | Number of ingester replicas to deploy | `1` |
| `ingester.livenessProbe.enabled` | Enable livenessProbe on ingester nodes | `true` |
| `ingester.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `ingester.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `ingester.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` |
| `ingester.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `ingester.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `ingester.readinessProbe.enabled` | Enable readinessProbe on ingester nodes | `true` |
| `ingester.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` |
| `ingester.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `ingester.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` |
| `ingester.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` |
| `ingester.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `ingester.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` |
| `ingester.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` |
| `ingester.resources.limits` | The resources limits for the ingester containers | `{}` |
| `ingester.resources.requests` | The requested resources for the ingester containers | `{}` |
| `ingester.podSecurityContext.enabled` | Enabled ingester pods' Security Context | `true` |
| `ingester.podSecurityContext.fsGroup` | Set ingester pod's Security Context fsGroup | `1001` |
| `ingester.containerSecurityContext.enabled` | Enabled ingester containers' Security Context | `true` |
| `ingester.containerSecurityContext.runAsUser` | Set ingester containers' Security Context runAsUser | `1001` |
| `ingester.command` | Override default container command (useful when using custom images) | `[]` |
| `ingester.args` | Override default container args (useful when using custom images) | `[]` |
| `ingester.hostAliases` | ingester pods host aliases | `[]` |
| `ingester.podLabels` | Extra labels for ingester pods | `{}` |
| `ingester.podAnnotations` | Annotations for ingester pods | `{}` |
| `ingester.podAffinityPreset` | Pod affinity preset. Ignored if `ingester.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `ingester.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `ingester.affinity` is set. Allowed values: `soft` or `hard` | `soft` |
| `ingester.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `ingester.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `ingester.nodeAffinityPreset.key` | Node label key to match. Ignored if `ingester.affinity` is set | `""` |
| `ingester.nodeAffinityPreset.values` | Node label values to match. Ignored if `ingester.affinity` is set | `[]` |
| `ingester.affinity` | Affinity for ingester pods assignment | `{}` |
| `ingester.nodeSelector` | Node labels for ingester pods assignment | `{}` |
| `ingester.tolerations` | Tolerations for ingester pods assignment | `[]` |
| `ingester.updateStrategy.type` | ingester statefulset strategy type | `RollingUpdate` |
| `ingester.priorityClassName` | ingester pods' priorityClassName | `""` |
| `ingester.lifecycleHooks` | for the ingester container(s) to automate configuration before or after startup | `{}` |
| `ingester.extraEnvVars` | Array with extra environment variables to add to ingester nodes | `[]` |
| `ingester.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for ingester nodes | `nil` |
| `ingester.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for ingester nodes | `nil` |
| `ingester.extraVolumes` | Optionally specify extra list of additional volumes for the ingester pod(s) | `[]` |
| `ingester.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the ingester container(s) | `[]` |
| `ingester.sidecars` | Add additional sidecar containers to the ingester pod(s) | `{}` |
| `ingester.initContainers` | Add additional init containers to the ingester pod(s) | `{}` |
### Ingester Persistence Parameters
| Name | Description | Value |
|--------------------------------------------------------|--------------------------------------------|--------|
| `ingester.persistence.enabled` | Enable persistence in ingester instances | `true` |
| `ingester.persistence.storageClass` | Persistent Volumes storage class | `nil` |
| `ingester.persistence.subPath` | The subdirectory of the volume to mount to | `""` |
| `ingester.persistence.accessModes` | Persistent Volumes access modes | `[]` |
| `ingester.persistence.size` | Persistent Volumes size | `8Gi` |
| `ingester.persistence.annotations` | Persistent Volumes annotations | `{}` |
| `ingester.persistence.volumeClaimTemplates.selector` | Persistent Volumes selector | `nil` |
| `ingester.persistence.volumeClaimTemplates.requests` | Persistent Volumes requests | `nil` |
| `ingester.persistence.volumeClaimTemplates.dataSource` | Persistent Volumes data source | `nil` |
### Ingester Traffic Exposure Parameters
| Name | Description | Value |
|---------------------------------------------|----------------------------------------------------|-------------|
| `ingester.service.type` | ingester service type | `ClusterIP` |
| `ingester.service.port` | ingester service HTTP port | `3100` |
| `ingester.service.grpcPort` | ingester service HTTP port | `9095` |
| `ingester.service.nodePorts.http` | Node port for HTTP | `nil` |
| `ingester.service.nodePorts.grpc` | Node port for GRPC | `nil` |
| `ingester.service.clusterIP` | ingester service Cluster IP | `nil` |
| `ingester.service.loadBalancerIP` | ingester service Load Balancer IP | `nil` |
| `ingester.service.loadBalancerSourceRanges` | ingester service Load Balancer sources | `[]` |
| `ingester.service.externalTrafficPolicy` | ingester service external traffic policy | `Cluster` |
| `ingester.service.annotations` | Additional custom annotations for ingester service | `{}` |
### Querier Deployment Parameters
| Name | Description | Value |
|----------------------------------------------|---------------------------------------------------------------------------------------------------|-----------------|
| `querier.replicaCount` | Number of querier replicas to deploy | `1` |
| `querier.livenessProbe.enabled` | Enable livenessProbe on querier nodes | `true` |
| `querier.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `querier.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `querier.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` |
| `querier.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `querier.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `querier.readinessProbe.enabled` | Enable readinessProbe on querier nodes | `true` |
| `querier.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` |
| `querier.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `querier.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` |
| `querier.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` |
| `querier.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `querier.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` |
| `querier.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` |
| `querier.resources.limits` | The resources limits for the querier containers | `{}` |
| `querier.resources.requests` | The requested resources for the querier containers | `{}` |
| `querier.podSecurityContext.enabled` | Enabled querier pods' Security Context | `true` |
| `querier.podSecurityContext.fsGroup` | Set querier pod's Security Context fsGroup | `1001` |
| `querier.containerSecurityContext.enabled` | Enabled querier containers' Security Context | `true` |
| `querier.containerSecurityContext.runAsUser` | Set querier containers' Security Context runAsUser | `1001` |
| `querier.command` | Override default container command (useful when using custom images) | `[]` |
| `querier.args` | Override default container args (useful when using custom images) | `[]` |
| `querier.hostAliases` | querier pods host aliases | `[]` |
| `querier.podLabels` | Extra labels for querier pods | `{}` |
| `querier.podAnnotations` | Annotations for querier pods | `{}` |
| `querier.podAffinityPreset` | Pod affinity preset. Ignored if `querier.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `querier.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `querier.affinity` is set. Allowed values: `soft` or `hard` | `soft` |
| `querier.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `querier.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `querier.nodeAffinityPreset.key` | Node label key to match. Ignored if `querier.affinity` is set | `""` |
| `querier.nodeAffinityPreset.values` | Node label values to match. Ignored if `querier.affinity` is set | `[]` |
| `querier.affinity` | Affinity for querier pods assignment | `{}` |
| `querier.nodeSelector` | Node labels for querier pods assignment | `{}` |
| `querier.tolerations` | Tolerations for querier pods assignment | `[]` |
| `querier.updateStrategy.type` | querier statefulset strategy type | `RollingUpdate` |
| `querier.priorityClassName` | querier pods' priorityClassName | `""` |
| `querier.lifecycleHooks` | for the querier container(s) to automate configuration before or after startup | `{}` |
| `querier.extraEnvVars` | Array with extra environment variables to add to querier nodes | `[]` |
| `querier.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for querier nodes | `nil` |
| `querier.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for querier nodes | `nil` |
| `querier.extraVolumes` | Optionally specify extra list of additional volumes for the querier pod(s) | `[]` |
| `querier.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the querier container(s) | `[]` |
| `querier.sidecars` | Add additional sidecar containers to the querier pod(s) | `{}` |
| `querier.initContainers` | Add additional init containers to the querier pod(s) | `{}` |
### Querier Traffic Exposure Parameters
| Name | Description | Value |
|--------------------------------------------|---------------------------------------------------|-------------|
| `querier.service.type` | querier service type | `ClusterIP` |
| `querier.service.port` | querier service HTTP port | `3100` |
| `querier.service.grpcPort` | querier service HTTP port | `9095` |
| `querier.service.nodePorts.http` | Node port for HTTP | `nil` |
| `querier.service.nodePorts.grpc` | Node port for GRPC | `nil` |
| `querier.service.clusterIP` | querier service Cluster IP | `nil` |
| `querier.service.loadBalancerIP` | querier service Load Balancer IP | `nil` |
| `querier.service.loadBalancerSourceRanges` | querier service Load Balancer sources | `[]` |
| `querier.service.externalTrafficPolicy` | querier service external traffic policy | `Cluster` |
| `querier.service.annotations` | Additional custom annotations for querier service | `{}` |
### Query Frontend Deployment Parameters
| Name | Description | Value |
|----------------------------------------------------------|---------------------------------------------------------------------------------------------------------|-----------------------|
| `queryFrontend.replicaCount` | Number of queryFrontend replicas to deploy | `1` |
| `queryFrontend.livenessProbe.enabled` | Enable livenessProbe on queryFrontend nodes | `true` |
| `queryFrontend.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `queryFrontend.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `queryFrontend.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` |
| `queryFrontend.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `queryFrontend.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `queryFrontend.readinessProbe.enabled` | Enable readinessProbe on queryFrontend nodes | `true` |
| `queryFrontend.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` |
| `queryFrontend.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `queryFrontend.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` |
| `queryFrontend.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` |
| `queryFrontend.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `queryFrontend.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` |
| `queryFrontend.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` |
| `queryFrontend.resources.limits` | The resources limits for the queryFrontend containers | `{}` |
| `queryFrontend.resources.requests` | The requested resources for the queryFrontend containers | `{}` |
| `queryFrontend.podSecurityContext.enabled` | Enabled queryFrontend pods' Security Context | `true` |
| `queryFrontend.podSecurityContext.fsGroup` | Set queryFrontend pod's Security Context fsGroup | `1001` |
| `queryFrontend.containerSecurityContext.enabled` | Enabled queryFrontend containers' Security Context | `true` |
| `queryFrontend.containerSecurityContext.runAsUser` | Set queryFrontend containers' Security Context runAsUser | `1001` |
| `queryFrontend.command` | Override default container command (useful when using custom images) | `[]` |
| `queryFrontend.args` | Override default container args (useful when using custom images) | `[]` |
| `queryFrontend.hostAliases` | queryFrontend pods host aliases | `[]` |
| `queryFrontend.podLabels` | Extra labels for queryFrontend pods | `{}` |
| `queryFrontend.podAnnotations` | Annotations for queryFrontend pods | `{}` |
| `queryFrontend.podAffinityPreset` | Pod affinity preset. Ignored if `queryFrontend.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `queryFrontend.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `queryFrontend.affinity` is set. Allowed values: `soft` or `hard` | `soft` |
| `queryFrontend.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `queryFrontend.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `queryFrontend.nodeAffinityPreset.key` | Node label key to match. Ignored if `queryFrontend.affinity` is set | `""` |
| `queryFrontend.nodeAffinityPreset.values` | Node label values to match. Ignored if `queryFrontend.affinity` is set | `[]` |
| `queryFrontend.affinity` | Affinity for queryFrontend pods assignment | `{}` |
| `queryFrontend.nodeSelector` | Node labels for queryFrontend pods assignment | `{}` |
| `queryFrontend.tolerations` | Tolerations for queryFrontend pods assignment | `[]` |
| `queryFrontend.updateStrategy.type` | queryFrontend statefulset strategy type | `RollingUpdate` |
| `queryFrontend.priorityClassName` | queryFrontend pods' priorityClassName | `""` |
| `queryFrontend.lifecycleHooks` | for the queryFrontend container(s) to automate configuration before or after startup | `{}` |
| `queryFrontend.extraEnvVars` | Array with extra environment variables to add to queryFrontend nodes | `[]` |
| `queryFrontend.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for queryFrontend nodes | `nil` |
| `queryFrontend.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for queryFrontend nodes | `nil` |
| `queryFrontend.extraVolumes` | Optionally specify extra list of additional volumes for the queryFrontend pod(s) | `[]` |
| `queryFrontend.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the queryFrontend container(s) | `[]` |
| `queryFrontend.sidecars` | Add additional sidecar containers to the queryFrontend pod(s) | `{}` |
| `queryFrontend.initContainers` | Add additional init containers to the queryFrontend pod(s) | `{}` |
| `queryFrontend.query.image.registry` | Grafana Tempo Query image registry | `docker.io` |
| `queryFrontend.query.image.repository` | Grafana Tempo Query image repository | `grafana/tempo-query` |
| `queryFrontend.query.image.tag` | Grafana Tempo Query image tag (immutable tags are recommended) | `latest` |
| `queryFrontend.query.image.pullPolicy` | Grafana Tempo Query image pull policy | `IfNotPresent` |
| `queryFrontend.query.image.pullSecrets` | Grafana Tempo Query image pull secrets | `[]` |
| `queryFrontend.query.command` | Override default container command (useful when using custom images) | `[]` |
| `queryFrontend.query.args` | Override default container args (useful when using custom images) | `[]` |
| `queryFrontend.query.configuration` | Query sidecar configuration | `""` |
| `queryFrontend.query.jaegerMetricsContainerPort` | Jaeger metrics container port | `16687` |
| `queryFrontend.query.jaegerUIContainerPort` | Jaeger UI container port | `16686` |
| `queryFrontend.query.existingConfigmap` | Name of a configmap with the query configuration | `nil` |
| `queryFrontend.query.livenessProbe.enabled` | Enable livenessProbe on query sidecar nodes | `true` |
| `queryFrontend.query.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `queryFrontend.query.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `queryFrontend.query.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` |
| `queryFrontend.query.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `queryFrontend.query.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `queryFrontend.query.readinessProbe.enabled` | Enable readinessProbe on query sidecar nodes | `true` |
| `queryFrontend.query.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` |
| `queryFrontend.query.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `queryFrontend.query.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` |
| `queryFrontend.query.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` |
| `queryFrontend.query.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `queryFrontend.query.resources.limits` | The resources limits for the query sidecar containers | `{}` |
| `queryFrontend.query.resources.requests` | The requested resources for the query sidecar containers | `{}` |
| `queryFrontend.query.lifecycleHooks` | for the query sidecar container(s) to automate configuration before or after startup | `{}` |
| `queryFrontend.query.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` |
| `queryFrontend.query.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` |
| `queryFrontend.query.extraEnvVars` | Array with extra environment variables to add to queryFrontend nodes | `[]` |
| `queryFrontend.query.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for queryFrontend nodes | `nil` |
| `queryFrontend.query.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for queryFrontend nodes | `nil` |
| `queryFrontend.query.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the queryFrontend container(s) | `[]` |
| `queryFrontend.query.containerSecurityContext.enabled` | Enabled query-frontend query sidecar containers' Security Context | `true` |
| `queryFrontend.query.containerSecurityContext.runAsUser` | Set query-frontend query sidecar containers' Security Context runAsUser | `1001` |
### Query Frontend Traffic Exposure Parameters
| Name | Description | Value |
|--------------------------------------------------|---------------------------------------------------------|-------------|
| `queryFrontend.service.type` | queryFrontend service type | `ClusterIP` |
| `queryFrontend.service.port` | queryFrontend service HTTP port | `3100` |
| `queryFrontend.service.grpcPort` | queryFrontend service HTTP port | `9095` |
| `queryFrontend.service.nodePorts.http` | Node port for HTTP | `nil` |
| `queryFrontend.service.nodePorts.grpc` | Node port for GRPC | `nil` |
| `queryFrontend.service.clusterIP` | queryFrontend service Cluster IP | `nil` |
| `queryFrontend.service.loadBalancerIP` | queryFrontend service Load Balancer IP | `nil` |
| `queryFrontend.service.loadBalancerSourceRanges` | queryFrontend service Load Balancer sources | `[]` |
| `queryFrontend.service.externalTrafficPolicy` | queryFrontend service external traffic policy | `Cluster` |
| `queryFrontend.service.annotations` | Additional custom annotations for queryFrontend service | `{}` |
### Vulture Deployment Parameters
| Name | Description | Value |
|----------------------------------------------|---------------------------------------------------------------------------------------------------|-------------------------|
| `vulture.enabled` | Enable vulture deployment | `true` |
| `vulture.image.registry` | Grafana Vulture image registry | `docker.io` |
| `vulture.image.repository` | Grafana Vulture image repository | `grafana/tempo-vulture` |
| `vulture.image.tag` | Grafana Vulture image tag (immutable tags are recommended) | `latest` |
| `vulture.image.pullPolicy` | Grafana Vulture image pull policy | `IfNotPresent` |
| `vulture.image.pullSecrets` | Grafana Vulture image pull secrets | `[]` |
| `vulture.replicaCount` | Number of vulture replicas to deploy | `1` |
| `vulture.livenessProbe.enabled` | Enable livenessProbe on vulture nodes | `true` |
| `vulture.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` |
| `vulture.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` |
| `vulture.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` |
| `vulture.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` |
| `vulture.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` |
| `vulture.readinessProbe.enabled` | Enable readinessProbe on vulture nodes | `true` |
| `vulture.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` |
| `vulture.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` |
| `vulture.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` |
| `vulture.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` |
| `vulture.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` |
| `vulture.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` |
| `vulture.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` |
| `vulture.resources.limits` | The resources limits for the vulture containers | `{}` |
| `vulture.resources.requests` | The requested resources for the vulture containers | `{}` |
| `vulture.podSecurityContext.enabled` | Enabled vulture pods' Security Context | `true` |
| `vulture.podSecurityContext.fsGroup` | Set vulture pod's Security Context fsGroup | `1001` |
| `vulture.containerSecurityContext.enabled` | Enabled vulture containers' Security Context | `true` |
| `vulture.containerSecurityContext.runAsUser` | Set vulture containers' Security Context runAsUser | `1001` |
| `vulture.command` | Override default container command (useful when using custom images) | `[]` |
| `vulture.args` | Override default container args (useful when using custom images) | `[]` |
| `vulture.hostAliases` | vulture pods host aliases | `[]` |
| `vulture.podLabels` | Extra labels for vulture pods | `{}` |
| `vulture.podAnnotations` | Annotations for vulture pods | `{}` |
| `vulture.podAffinityPreset` | Pod affinity preset. Ignored if `vulture.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `vulture.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `vulture.affinity` is set. Allowed values: `soft` or `hard` | `soft` |
| `vulture.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `vulture.affinity` is set. Allowed values: `soft` or `hard` | `""` |
| `vulture.nodeAffinityPreset.key` | Node label key to match. Ignored if `vulture.affinity` is set | `""` |
| `vulture.nodeAffinityPreset.values` | Node label values to match. Ignored if `vulture.affinity` is set | `[]` |
| `vulture.containerPort` | Vulture container port | `8080` |
| `vulture.affinity` | Affinity for vulture pods assignment | `{}` |
| `vulture.nodeSelector` | Node labels for vulture pods assignment | `{}` |
| `vulture.tolerations` | Tolerations for vulture pods assignment | `[]` |
| `vulture.updateStrategy.type` | vulture statefulset strategy type | `RollingUpdate` |
| `vulture.priorityClassName` | vulture pods' priorityClassName | `""` |
| `vulture.lifecycleHooks` | for the vulture container(s) to automate configuration before or after startup | `{}` |
| `vulture.extraEnvVars` | Array with extra environment variables to add to vulture nodes | `[]` |
| `vulture.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for vulture nodes | `nil` |
| `vulture.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for vulture nodes | `nil` |
| `vulture.extraVolumes` | Optionally specify extra list of additional volumes for the vulture pod(s) | `[]` |
| `vulture.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the vulture container(s) | `[]` |
| `vulture.sidecars` | Add additional sidecar containers to the vulture pod(s) | `{}` |
| `vulture.initContainers` | Add additional init containers to the vulture pod(s) | `{}` |
### Vulture Traffic Exposure Parameters
| Name | Description | Value |
|--------------------------------------------|---------------------------------------------------|-------------|
| `vulture.service.type` | vulture service type | `ClusterIP` |
| `vulture.service.port` | vulture service HTTP port | `3100` |
| `vulture.service.nodePorts.http` | Node port for HTTP | `nil` |
| `vulture.service.clusterIP` | vulture service Cluster IP | `nil` |
| `vulture.service.loadBalancerIP` | vulture service Load Balancer IP | `nil` |
| `vulture.service.loadBalancerSourceRanges` | vulture service Load Balancer sources | `[]` |
| `vulture.service.externalTrafficPolicy` | vulture service external traffic policy | `Cluster` |
| `vulture.service.annotations` | Additional custom annotations for vulture service | `{}` |
### Init Container Parameters
| Name | Description | Value |
|--------------------------------------------------------|-------------------------------------------------------------------------------------------------|-------------------------|
| `volumePermissions.enabled` | Enable init container that changes the owner/group of the PV mount point to `runAsUser:fsGroup` | `false` |
| `volumePermissions.image.registry` | Bitnami Shell image registry | `docker.io` |
| `volumePermissions.image.repository` | Bitnami Shell image repository | `bitnami/bitnami-shell` |
| `volumePermissions.image.tag` | Bitnami Shell image tag (immutable tags are recommended) | `10` |
| `volumePermissions.image.pullPolicy` | Bitnami Shell image pull policy | `Always` |
| `volumePermissions.image.pullSecrets` | Bitnami Shell image pull secrets | `[]` |
| `volumePermissions.resources.limits` | The resources limits for the init container | `{}` |
| `volumePermissions.resources.requests` | The requested resources for the init container | `{}` |
| `volumePermissions.containerSecurityContext.runAsUser` | Set init container's Security Context runAsUser | `0` |
### Other Parameters
| Name | Description | Value |
|-------------------------|------------------------------------------------------|--------|
| `serviceAccount.create` | Specifies whether a ServiceAccount should be created | `true` |
| `serviceAccount.name` | The name of the ServiceAccount to use. | `""` |
### Metrics Parameters
| Name | Description | Value |
|----------------------------------------|---------------------------------------------------------------------------------|---------|
| `metrics.enabled` | Enable metrics | `false` |
| `metrics.serviceMonitor.enabled` | Create ServiceMonitor resource(s) for scraping metrics using PrometheusOperator | `false` |
| `metrics.serviceMonitor.namespace` | The namespace in which the ServiceMonitor will be created | `nil` |
| `metrics.serviceMonitor.interval` | The interval at which metrics should be scraped | `30s` |
| `metrics.serviceMonitor.scrapeTimeout` | The timeout after which the scrape is ended | `nil` |
| `metrics.serviceMonitor.selector` | Scrape selector | `nil` |
### External Memcached Parameters
| Name | Description | Value |
|--------------------------|-----------------------------------------------|---------|
| `externalMemcached.host` | Host of a running external memcached instance | `nil` |
| `externalMemcached.port` | Port of a running external memcached instance | `11211` |
### Memcached Sub-chart Parameters
| Name | Description | Value |
|--------------------------|----------------------------|---------|
| `memcached.enabled` | Deploy memcached sub-chart | `true` |
| `memcached.service.port` | Memcached service port | `11211` |
See https://github.com/bitnami-labs/readme-generator-for-helm to create the table
The above parameters map to the env variables defined in [bitnami/grafana-tempo](http://github.com/bitnami/bitnami-docker-grafana-tempo). For more information please refer to the [bitnami/grafana-tempo](http://github.com/bitnami/bitnami-docker-grafana-tempo) image documentation.
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
```console
helm install my-release \
--set tempo.traces.jaeger.grpc=true \
bitnami/grafana-tempo
```
The above command enables the Jaeger GRPC traces.
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
```console
helm install my-release -f values.yaml bitnami/grafana-tempo
```
> **Tip**: You can use the default [values.yaml](values.yaml)
## Configuration and installation details
### [Rolling VS Immutable tags](https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/)
It is strongly recommended to use immutable tags in a production environment. This ensures your deployment does not change automatically if the same tag is updated with a different image.
Bitnami will release a new chart updating its containers if a new version of the main container, significant changes, or critical vulnerabilities exist.
### Tempo configuration
The tempo configuration file `tempo.yaml` is shared across the different components: `distributor`, `compactor`, `ingester`, `querier` and `queryFrontend`. This is set in the `tempo.configuration` value. Check the official [Tempo Grafana documentation](https://grafana.com/docs/tempo/latest/configuration/) for the list of possible configurations.
## Persistence
The [Bitnami grafana-tempo](https://github.com/bitnami/bitnami-docker-grafana-tempo) image stores the grafana-tempo `ingester` data at the `/bitnami` path of the container. Persistent Volume Claims are used to keep the data across deployments. [Learn more about persistence in the chart documentation](https://docs.bitnami.com/kubernetes/apps/grafana-tempo/configuration/chart-persistence/).
### Additional environment variables
In case you want to add extra environment variables (useful for advanced operations like custom init scripts), you can use the `extraEnvVars` property inside each of the subsections: `distributor`, `compactor`, `ingester`, `querier`, `queryFrontend` and `vulture`.
```yaml
compactor:
extraEnvVars:
- name: LOG_LEVEL
value: error
distributor:
extraEnvVars:
- name: LOG_LEVEL
value: error
ingester:
extraEnvVars:
- name: LOG_LEVEL
value: error
querier:
extraEnvVars:
- name: LOG_LEVEL
value: error
queryFrontend:
extraEnvVars:
- name: LOG_LEVEL
value: error
vulture:
extraEnvVars:
- name: LOG_LEVEL
value: error
```
Alternatively, you can use a ConfigMap or a Secret with the environment variables. To do so, use the `extraEnvVarsCM` or the `extraEnvVarsSecret` values.
### Sidecars
If additional containers are needed in the same pod as grafana-tempo (such as additional metrics or logging exporters), they can be defined using the `sidecars` parameter inside each of the subsections: `distributor`, `compactor`, `ingester`, `querier`, `queryFrontend` and `vulture` . If these sidecars export extra ports, extra port definitions can be added using the `service.extraPorts` parameter. [Learn more about configuring and using sidecar containers](https://docs.bitnami.com/kubernetes/apps/grafana-tempo/administration/configure-use-sidecars/).
### Pod affinity
This chart allows you to set your custom affinity using the `affinity` parameter. Find more information about Pod affinity in the [kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity).
As an alternative, use one of the preset configurations for pod affinity, pod anti-affinity, and node affinity available at the [bitnami/common](https://github.com/bitnami/charts/tree/master/bitnami/common#affinities) chart. To do so, set the `podAffinityPreset`, `podAntiAffinityPreset`, or `nodeAffinityPreset` parameters inside each of the subsections: `distributor`, `compactor`, `ingester`, `querier`, `queryFrontend` and `vulture`.
### External cache support
You may want to have Grafana Tempo connect to an external Memcached rather than installing one inside your cluster. Typical reasons for this are to use a managed cache service, or to share a common cache server for all your applications. To achieve this, the chart allows you to specify credentials for an external database with the [`externalMemcached` parameter](#parameters). You should also disable the Memcached installation with the `memcached.enabled` option. Here is an example:
```console
memcached.enabled=false
externalMemcached.host=myexternalhost
externalMemcached.port=11211
```
## Troubleshooting
Find more information about how to deal with common errors related to Bitnami's Helm charts in [this troubleshooting guide](https://docs.bitnami.com/general/how-to/troubleshoot-helm-chart-issues).
+33
View File
@@ -0,0 +1,33 @@
** Please be patient while the chart is being deployed **
Installed components:
* ingester
* distributor
* querier
* query-frontend
* compactor
{{- if .Values.vulture.enabled }}
* vulture
{{- end }}
1. Get the query-frontend URL by running these commands:
{{- if contains "NodePort" .Values.queryFrontend.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "grafana-tempo.query-frontend.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.queryFrontend.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ template "common.names.fullname" . }}
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "common.names.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo http://$SERVICE_IP:{{ .Values.queryFrontend.service.port }}
{{- else if contains "ClusterIP" .Values.queryFrontend.service.type }}
echo "The Query Frontend is available at http://127.0.0.1:{{ .Values.queryFrontend.service.port }}"
kubectl port-forward svc/{{ template "grafana-tempo.query-frontend.fullname" . }} {{ .Values.queryFrontend.service.port }}:{{ .Values.queryFrontend.service.port }} &
{{- end }}
{{- include "common.warnings.rollingTag" .Values.tempo.image }}
{{- include "common.warnings.rollingTag" .Values.queryFrontend.query.image }}
{{- include "common.warnings.rollingTag" .Values.vulture.image }}
{{- include "grafana-tempo.validateValues" . }}
@@ -0,0 +1,196 @@
{{/*
Return the proper Grafana Tempo image name
*/}}
{{- define "grafana-tempo.image" -}}
{{ include "common.images.image" (dict "imageRoot" .Values.tempo.image "global" .Values.global) }}
{{- end -}}
{{/*
Return the proper Grafana Tempo compactor fullname
*/}}
{{- define "grafana-tempo.compactor.fullname" -}}
{{- printf "%s-%s" (include "common.names.fullname" .) "compactor" -}}
{{- end -}}
{{/*
Return the proper Grafana Tempo distributor fullname
*/}}
{{- define "grafana-tempo.distributor.fullname" -}}
{{- printf "%s-%s" (include "common.names.fullname" .) "distributor" -}}
{{- end -}}
{{/*
Return the proper Grafana Tempo ingester fullname
*/}}
{{- define "grafana-tempo.ingester.fullname" -}}
{{- printf "%s-%s" (include "common.names.fullname" .) "ingester" -}}
{{- end -}}
{{/*
Return the proper Grafana Tempo querier fullname
*/}}
{{- define "grafana-tempo.querier.fullname" -}}
{{- printf "%s-%s" (include "common.names.fullname" .) "querier" -}}
{{- end -}}
{{/*
Return the proper Grafana Tempo query-frontend fullname
*/}}
{{- define "grafana-tempo.query-frontend.fullname" -}}
{{- printf "%s-%s" (include "common.names.fullname" .) "query-frontend" -}}
{{- end -}}
{{/*
Return the proper Grafana Tempo vulture fullname
*/}}
{{- define "grafana-tempo.vulture.fullname" -}}
{{- printf "%s-%s" (include "common.names.fullname" .) "vulture" -}}
{{- end -}}
{{/*
Return the proper Grafana Tempo gossip-ring fullname
*/}}
{{- define "grafana-tempo.gossip-ring.fullname" -}}
{{- printf "%s-%s" (include "common.names.fullname" .) "gossip-ring" -}}
{{- end -}}
{{/*
Return the proper Grafana Tempo image name
*/}}
{{- define "grafana-tempo.queryImage" -}}
{{ include "common.images.image" (dict "imageRoot" .Values.queryFrontend.query.image "global" .Values.global) }}
{{- end -}}
{{/*
Return the proper Grafana Tempo image name
*/}}
{{- define "grafana-tempo.volumePermissions.image" -}}
{{ include "common.images.image" (dict "imageRoot" .Values.volumePermissions.image "global" .Values.global) }}
{{- end -}}
{{/*
Return the proper Grafana Tempo image name
*/}}
{{- define "grafana-tempo.vultureImage" -}}
{{ include "common.images.image" (dict "imageRoot" .Values.vulture.image "global" .Values.global) }}
{{- end -}}
{{/*
Return the proper Docker Image Registry Secret Names
*/}}
{{- define "grafana-tempo.imagePullSecrets" -}}
{{- include "common.images.pullSecrets" (dict "images" (list .Values.tempo.image .Values.vulture.image .Values.queryFrontend.query.image .Values.volumePermissions.image) "global" .Values.global) -}}
{{- end -}}
{{/*
Create the name of the service account to use
*/}}
{{- define "grafana-tempo.serviceAccountName" -}}
{{- if .Values.serviceAccount.create -}}
{{ default (printf "%s" (include "common.names.fullname" .)) .Values.serviceAccount.name }}
{{- else -}}
{{ default "default" .Values.serviceAccount.name }}
{{- end -}}
{{- end -}}
{{/*
Get the Tempo configuration configmap.
*/}}
{{- define "grafana-tempo.tempoConfigmapName" -}}
{{- if .Values.tempo.existingConfigmap -}}
{{- .Values.tempo.existingConfigmap -}}
{{- else }}
{{- printf "%s-tempo" (include "common.names.fullname" . ) -}}
{{- end -}}
{{- end -}}
{{/*
Get the Tempo overrides configmap.
*/}}
{{- define "grafana-tempo.overridesConfigmapName" -}}
{{- if .Values.tempo.existingOverridesConfigmap -}}
{{- .Values.tempo.existingOverridesConfigmap -}}
{{- else }}
{{- printf "%s-overrides" (include "common.names.fullname" . ) -}}
{{- end -}}
{{- end -}}
{{/*
Get the Tempo overrides configmap.
*/}}
{{- define "grafana-tempo.queryConfigmapName" -}}
{{- if .Values.queryFrontend.query.existingConfigmap -}}
{{- .Values.queryFrontend.query.existingConfigmap -}}
{{- else }}
{{- include "grafana-tempo.query-frontend.fullname" . -}}
{{- end -}}
{{- end -}}
{{/*
Create a default fully qualified memcached name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "grafana-tempo.memcached.fullname" -}}
{{- $name := default "memcached" .Values.memcached.nameOverride -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified memcached name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "grafana-tempo.memcached.url" -}}
{{- $port := "" -}}
{{- if .Values.externalMemcached.host -}}
{{- $servicePortString := printf "%v" .Values.externalMemcached.port -}}
{{- if (not (eq $servicePortString "11211")) -}}
{{- $port = printf ":%s" $servicePortString -}}
{{- end -}}
{{- printf "%s%s" .Values.externalMemcached.host $port }}
{{- else -}}
{{- $servicePortString := printf "%v" .Values.memcached.service.port -}}
{{- if (not (eq $servicePortString "11211")) -}}
{{- $port = printf ":%s" $servicePortString -}}
{{- end -}}
{{- printf "%s%s" (include "grafana-tempo.memcached.fullname" .) $port }}
{{- end -}}
{{- end -}}
{{/*
Compile all warnings into a single message.
*/}}
{{- define "grafana-tempo.validateValues" -}}
{{- $messages := list -}}
{{- $messages := append $messages (include "grafana-tempo.validateValues.vulture" .) -}}
{{- $messages := append $messages (include "grafana-tempo.validateValues.memcached" .) -}}
{{- $messages := without $messages "" -}}
{{- $message := join "\n" $messages -}}
{{- if $message -}}
{{- printf "\nVALUES VALIDATION:\n%s" $message -}}
{{- end -}}
{{- end -}}
{{/* Validate values of Grafana Tempo - Memcached */}}
{{- define "grafana-tempo.validateValues.vulture" -}}
{{- if not (and .Values.vulture.enabled .Values.tempo.traces.jaeger.grpc) -}}
grafana-tempo: Vulture and GRPC
In order to use Vulture, Jaeger GRPC traces must be enabled. Please set tempo.traces.jaeger.grpc=true when installing the chart.
{{- end -}}
{{- end -}}
{{/* Validate values of Grafana Tempo - Memcached */}}
{{- define "grafana-tempo.validateValues.memcached" -}}
{{- if and .Values.memcached.enabled .Values.externalMemcached.host -}}
jupyherhub: Memcached
You can only use one database.
Please choose installing a Memcached chart (--set memcached.enabled=true) or
using an external database (--set externalMemcached.host)
{{- end -}}
{{- if and (not .Values.memcached.enabled) (not .Values.externalMemcached.host) -}}
jupyherhub: NoMemcached
You did not set any cache.
Please choose installing a Memcached chart (--set memcached.enabled=true) or
using an external instance (--set externalMemcached.host)
{{- end -}}
{{- end -}}
@@ -0,0 +1,159 @@
{{- if .Values.compactor.enabled }}
apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }}
kind: Deployment
metadata:
name: {{ template "grafana-tempo.compactor.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: compactor
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
replicas: {{ .Values.compactor.replicaCount }}
{{- if .Values.compactor.updateStrategy }}
strategy: {{- toYaml .Values.compactor.updateStrategy | nindent 4 }}
{{- end }}
selector:
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: compactor
template:
metadata:
{{- if .Values.compactor.podAnnotations }}
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.compactor.podAnnotations "context" $) | nindent 8 }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
app.kubernetes.io/component: compactor
tempo-gossip-member: "true"
{{- if .Values.compactor.podLabels }}
{{- include "common.tplvalues.render" (dict "value" .Values.compactor.podLabels "context" $) | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ template "grafana-tempo.serviceAccountName" . }}
{{- include "grafana-tempo.imagePullSecrets" . | nindent 6 }}
{{- if .Values.compactor.hostAliases }}
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.compactor.hostAliases "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.compactor.affinity }}
affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.compactor.affinity "context" $) | nindent 8 }}
{{- else }}
affinity:
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.compactor.podAffinityPreset "component" "compactor" "context" $) | nindent 10 }}
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.compactor.podAntiAffinityPreset "component" "compactor" "context" $) | nindent 10 }}
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.compactor.nodeAffinityPreset.type "key" .Values.compactor.nodeAffinityPreset.key "values" .Values.compactor.nodeAffinityPreset.values) | nindent 10 }}
{{- end }}
{{- if .Values.compactor.nodeSelector }}
nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.compactor.nodeSelector "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.compactor.tolerations }}
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.compactor.tolerations "context" .) | nindent 8 }}
{{- end }}
{{- if .Values.compactor.priorityClassName }}
priorityClassName: {{ .Values.compactor.priorityClassName | quote }}
{{- end }}
{{- if .Values.compactor.podSecurityContext.enabled }}
securityContext: {{- omit .Values.compactor.podSecurityContext "enabled" | toYaml | nindent 8 }}
{{- end }}
initContainers:
{{- if .Values.compactor.initContainers }}
{{- include "common.tplvalues.render" (dict "value" .Values.compactor.initContainers "context" $) | nindent 8 }}
{{- end }}
containers:
- name: grafana-tempo-compactor
image: {{ template "grafana-tempo.image" . }}
imagePullPolicy: {{ .Values.tempo.image.pullPolicy }}
{{- if .Values.compactor.lifecycleHooks }}
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.compactor.lifecycleHooks "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.compactor.containerSecurityContext.enabled }}
securityContext: {{- omit .Values.compactor.containerSecurityContext "enabled" | toYaml | nindent 12 }}
{{- end }}
{{- if .Values.compactor.command }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.compactor.command "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.compactor.args }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.compactor.args "context" $) | nindent 12 }}
{{- else }}
args:
- -target=compactor
- -config.file=/bitnami/grafana-tempo/conf/tempo.yaml
- -mem-ballast-size-mbs={{ .Values.tempo.memBallastSizeMbs }}
{{- end }}
{{- if .Values.compactor.extraEnvVars }}
env: {{- include "common.tplvalues.render" (dict "value" .Values.compactor.extraEnvVars "context" $) | nindent 12 }}
{{- end }}
envFrom:
{{- if .Values.compactor.extraEnvVarsCM }}
- configMapRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.compactor.extraEnvVarsCM "context" $) }}
{{- end }}
{{- if .Values.compactor.extraEnvVarsSecret }}
- secretRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.compactor.extraEnvVarsSecret "context" $) }}
{{- end }}
ports:
- containerPort: {{ .Values.tempo.containerPort }}
name: http
- containerPort: {{ .Values.tempo.gossipRing.containerPort }}
name: http-memberlist
{{- if .Values.compactor.resources }}
resources: {{- toYaml .Values.compactor.resources | nindent 12 }}
{{- end }}
{{- if .Values.compactor.livenessProbe.enabled }}
livenessProbe:
httpGet:
path: /ready
port: http
initialDelaySeconds: {{ .Values.compactor.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.compactor.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.compactor.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.compactor.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.compactor.livenessProbe.failureThreshold }}
{{- else if .Values.compactor.customLivenessProbe }}
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.compactor.customLivenessProbe "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.compactor.readinessProbe.enabled }}
readinessProbe:
httpGet:
path: /ready
port: http
initialDelaySeconds: {{ .Values.compactor.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.compactor.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.compactor.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.compactor.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.compactor.readinessProbe.failureThreshold }}
{{- else if .Values.compactor.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.compactor.customReadinessProbe "context" $) | nindent 12 }}
{{- end }}
volumeMounts:
- name: tempo-config
mountPath: /bitnami/grafana-tempo/conf/tempo.yaml
subPath: tempo.yaml
- name: overrides-config
mountPath: /bitnami/grafana-tempo/conf/overrides.yaml
subPath: overrides.yaml
- name: data
mountPath: {{ .Values.tempo.dataDir }}
{{- if .Values.compactor.extraVolumeMounts }}
{{- include "common.tplvalues.render" (dict "value" .Values.compactor.extraVolumeMounts "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.compactor.sidecars }}
{{- include "common.tplvalues.render" ( dict "value" .Values.compactor.sidecars "context" $) | nindent 8 }}
{{- end }}
volumes:
# NOTE: The upstream chart does not create a PVC for this, we assume that it is just for tmp data
- name: data
emptyDir: {}
- name: tempo-config
configMap:
name: {{ template "grafana-tempo.tempoConfigmapName" . }}
- name: overrides-config
configMap:
name: {{ template "grafana-tempo.overridesConfigmapName" . }}
{{- if .Values.compactor.extraVolumes }}
{{- include "common.tplvalues.render" (dict "value" .Values.compactor.extraVolumes "context" $) | nindent 8 }}
{{- end }}
{{- end }}
@@ -0,0 +1,47 @@
{{- if .Values.compactor.enabled }}
apiVersion: v1
kind: Service
metadata:
name: {{ template "grafana-tempo.compactor.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: compactor
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if or .Values.commonAnnotations .Values.compactor.service.annotations }}
annotations:
{{- if .Values.compactor.service.annotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.compactor.service.annotations "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
{{- end }}
spec:
type: {{ .Values.compactor.service.type }}
{{- if .Values.compactor.service.clusterIP }}
clusterIP: {{ .Values.compactor.service.clusterIP }}
{{- end }}
{{- if (or (eq .Values.compactor.service.type "LoadBalancer") (eq .Values.compactor.service.type "NodePort")) }}
externalTrafficPolicy: {{ .Values.compactor.service.externalTrafficPolicy | quote }}
{{- end }}
{{ if eq .Values.compactor.service.type "LoadBalancer" }}
loadBalancerSourceRanges: {{ .Values.compactor.service.loadBalancerSourceRanges }}
{{ end }}
{{- if (and (eq .Values.compactor.service.type "LoadBalancer") (not (empty .Values.compactor.service.loadBalancerIP))) }}
loadBalancerIP: {{ .Values.compactor.service.loadBalancerIP }}
{{- end }}
ports:
- name: http
port: {{ .Values.compactor.service.port }}
targetPort: http
protocol: TCP
{{- if (and (or (eq .Values.compactor.service.type "NodePort") (eq .Values.compactor.service.type "LoadBalancer")) (not (empty .Values.compactor.service.nodePorts.http))) }}
nodePort: {{ .Values.compactor.service.nodePorts.http }}
{{- else if eq .Values.compactor.service.type "ClusterIP" }}
nodePort: null
{{- end }}
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
app.kubernetes.io/component: compactor
{{- end }}
@@ -0,0 +1,37 @@
{{- if and .Values.compactor.enabled .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ template "grafana-tempo.compactor.fullname" . }}
{{- if .Values.metrics.serviceMonitor.namespace }}
namespace: {{ .Values.metrics.serviceMonitor.namespace }}
{{- else }}
namespace: {{ .Release.Namespace }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: compactor
{{- if .Values.metrics.serviceMonitor.selector }}
{{- include "common.tplvalues.render" (dict "value" .Values.metrics.serviceMonitor.selector "context" $) | nindent 4 }}
{{- end }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: compactor
endpoints:
- port: http
{{- if .Values.metrics.serviceMonitor.interval }}
interval: {{ .Values.metrics.serviceMonitor.interval }}
{{- end }}
{{- if .Values.metrics.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
{{- end }}
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
{{- end }}
@@ -0,0 +1,194 @@
apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }}
kind: Deployment
metadata:
name: {{ template "grafana-tempo.distributor.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: distributor
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
replicas: {{ .Values.distributor.replicaCount }}
{{- if .Values.distributor.updateStrategy }}
strategy: {{- toYaml .Values.distributor.updateStrategy | nindent 4 }}
{{- end }}
selector:
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: distributor
template:
metadata:
{{- if .Values.distributor.podAnnotations }}
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.distributor.podAnnotations "context" $) | nindent 8 }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
app.kubernetes.io/component: distributor
tempo-gossip-member: "true"
{{- if .Values.distributor.podLabels }}
{{- include "common.tplvalues.render" (dict "value" .Values.distributor.podLabels "context" $) | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ template "grafana-tempo.serviceAccountName" . }}
{{- include "grafana-tempo.imagePullSecrets" . | nindent 6 }}
{{- if .Values.distributor.hostAliases }}
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.distributor.hostAliases "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.distributor.affinity }}
affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.distributor.affinity "context" $) | nindent 8 }}
{{- else }}
affinity:
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.distributor.podAffinityPreset "component" "distributor" "context" $) | nindent 10 }}
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.distributor.podAntiAffinityPreset "component" "distributor" "context" $) | nindent 10 }}
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.distributor.nodeAffinityPreset.type "key" .Values.distributor.nodeAffinityPreset.key "values" .Values.distributor.nodeAffinityPreset.values) | nindent 10 }}
{{- end }}
{{- if .Values.distributor.nodeSelector }}
nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.distributor.nodeSelector "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.distributor.tolerations }}
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.distributor.tolerations "context" .) | nindent 8 }}
{{- end }}
{{- if .Values.distributor.priorityClassName }}
priorityClassName: {{ .Values.distributor.priorityClassName | quote }}
{{- end }}
{{- if .Values.distributor.podSecurityContext.enabled }}
securityContext: {{- omit .Values.distributor.podSecurityContext "enabled" | toYaml | nindent 8 }}
{{- end }}
initContainers:
{{- if .Values.distributor.initContainers }}
{{- include "common.tplvalues.render" (dict "value" .Values.distributor.initContainers "context" $) | nindent 8 }}
{{- end }}
containers:
- name: grafana-tempo-distributor
image: {{ template "grafana-tempo.image" . }}
imagePullPolicy: {{ .Values.tempo.image.pullPolicy }}
{{- if .Values.distributor.lifecycleHooks }}
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.distributor.lifecycleHooks "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.distributor.containerSecurityContext.enabled }}
securityContext: {{- omit .Values.distributor.containerSecurityContext "enabled" | toYaml | nindent 12 }}
{{- end }}
{{- if .Values.distributor.command }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.distributor.command "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.distributor.args }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.distributor.args "context" $) | nindent 12 }}
{{- else }}
args:
- -target=distributor
- -config.file=/bitnami/grafana-tempo/conf/tempo.yaml
- -mem-ballast-size-mbs={{ .Values.tempo.memBallastSizeMbs }}
{{- end }}
{{- if .Values.distributor.extraEnvVars }}
env: {{- include "common.tplvalues.render" (dict "value" .Values.distributor.extraEnvVars "context" $) | nindent 12 }}
{{- end }}
envFrom:
{{- if .Values.distributor.extraEnvVarsCM }}
- configMapRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.distributor.extraEnvVarsCM "context" $) }}
{{- end }}
{{- if .Values.distributor.extraEnvVarsSecret }}
- secretRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.distributor.extraEnvVarsSecret "context" $) }}
{{- end }}
ports:
- containerPort: {{ .Values.tempo.containerPort }}
name: http
- containerPort: {{ .Values.tempo.gossipRing.containerPort }}
name: http-memberlist
- containerPort: {{ .Values.tempo.grpcContainerPort }}
name: grpc
{{- if .Values.tempo.traces.jaeger.thriftCompact }}
- containerPort: 6831
name: jaeger-compact
protocol: UDP
{{- end }}
{{- if .Values.tempo.traces.jaeger.thriftBinary }}
- containerPort: 6832
name: jaeger-binary
protocol: UDP
{{- end }}
{{- if .Values.tempo.traces.jaeger.thriftHttp }}
- containerPort: 14268
name: jaeger-http
protocol: TCP
{{- end }}
{{- if .Values.tempo.traces.jaeger.grpc }}
- containerPort: 14250
name: jaeger-grpc
protocol: TCP
{{- end }}
{{- if .Values.tempo.traces.zipkin }}
- containerPort: 9411
name: zipkin
protocol: TCP
{{- end }}
{{- if .Values.tempo.traces.otlp.http }}
- containerPort: 55681
name: otlp-http
protocol: TCP
{{- end }}
{{- if .Values.tempo.traces.otlp.grpc }}
- containerPort: 4317
name: otlp-grpc
protocol: TCP
{{- end }}
{{- if .Values.tempo.traces.opencensus }}
- containerPort: 55678
name: opencensus
protocol: TCP
{{- end }}
{{- if .Values.distributor.resources }}
resources: {{- toYaml .Values.distributor.resources | nindent 12 }}
{{- end }}
{{- if .Values.distributor.livenessProbe.enabled }}
livenessProbe:
httpGet:
path: /ready
port: http
initialDelaySeconds: {{ .Values.distributor.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.distributor.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.distributor.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.distributor.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.distributor.livenessProbe.failureThreshold }}
{{- else if .Values.distributor.customLivenessProbe }}
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.distributor.customLivenessProbe "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.distributor.readinessProbe.enabled }}
readinessProbe:
httpGet:
path: /ready
port: http
initialDelaySeconds: {{ .Values.distributor.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.distributor.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.distributor.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.distributor.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.distributor.readinessProbe.failureThreshold }}
{{- else if .Values.distributor.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.distributor.customReadinessProbe "context" $) | nindent 12 }}
{{- end }}
volumeMounts:
- name: tempo-config
mountPath: /bitnami/grafana-tempo/conf/tempo.yaml
subPath: tempo.yaml
- name: overrides-config
mountPath: /bitnami/grafana-tempo/conf/overrides.yaml
subPath: overrides.yaml
{{- if .Values.distributor.extraVolumeMounts }}
{{- include "common.tplvalues.render" (dict "value" .Values.distributor.extraVolumeMounts "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.distributor.sidecars }}
{{- include "common.tplvalues.render" ( dict "value" .Values.distributor.sidecars "context" $) | nindent 8 }}
{{- end }}
volumes:
- name: tempo-config
configMap:
name: {{ template "grafana-tempo.tempoConfigmapName" . }}
- name: overrides-config
configMap:
name: {{ template "grafana-tempo.overridesConfigmapName" . }}
{{- if .Values.distributor.extraVolumes }}
{{- include "common.tplvalues.render" (dict "value" .Values.distributor.extraVolumes "context" $) | nindent 8 }}
{{- end }}
@@ -0,0 +1,107 @@
apiVersion: v1
kind: Service
metadata:
name: {{ template "grafana-tempo.distributor.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: distributor
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if or .Values.commonAnnotations .Values.distributor.service.annotations }}
annotations:
{{- if .Values.distributor.service.annotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.distributor.service.annotations "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
{{- end }}
spec:
type: {{ .Values.distributor.service.type }}
{{- if .Values.distributor.service.clusterIP }}
clusterIP: {{ .Values.distributor.service.clusterIP }}
{{- end }}
{{- if (or (eq .Values.distributor.service.type "LoadBalancer") (eq .Values.distributor.service.type "NodePort")) }}
externalTrafficPolicy: {{ .Values.distributor.service.externalTrafficPolicy | quote }}
{{- end }}
{{ if eq .Values.distributor.service.type "LoadBalancer" }}
loadBalancerSourceRanges: {{ .Values.distributor.service.loadBalancerSourceRanges }}
{{ end }}
{{- if (and (eq .Values.distributor.service.type "LoadBalancer") (not (empty .Values.distributor.service.loadBalancerIP))) }}
loadBalancerIP: {{ .Values.distributor.service.loadBalancerIP }}
{{- end }}
ports:
- name: http
port: {{ .Values.distributor.service.port }}
targetPort: http
protocol: TCP
{{- if (and (or (eq .Values.distributor.service.type "NodePort") (eq .Values.distributor.service.type "LoadBalancer")) (not (empty .Values.distributor.service.nodePorts.http))) }}
nodePort: {{ .Values.distributor.service.nodePorts.http }}
{{- else if eq .Values.distributor.service.type "ClusterIP" }}
nodePort: null
{{- end }}
- name: grpc
port: {{ .Values.distributor.service.grpcPort }}
protocol: TCP
targetPort: grpc
{{- if (and (or (eq .Values.distributor.service.type "NodePort") (eq .Values.distributor.service.type "LoadBalancer")) (not (empty .Values.distributor.service.nodePorts.grpc))) }}
nodePort: {{ .Values.distributor.service.nodePorts.grpc }}
{{- else if eq .Values.distributor.service.type "ClusterIP" }}
nodePort: null
{{- end }}
## From here we use non-configurable, standard ports
{{- if .Values.tempo.traces.jaeger.thriftCompact }}
- name: distributor-jaeger-thrift-compact
port: 6831
protocol: UDP
targetPort: jaeger-compact
{{- end }}
{{- if .Values.tempo.traces.jaeger.thriftBinary }}
- name: distributor-jaeger-thrift-binary
port: 6832
protocol: UDP
targetPort: jaeger-binary
{{- end }}
{{- if .Values.tempo.traces.jaeger.thriftHttp }}
- name: distributor-jaeger-thrift-http
port: 14268
protocol: TCP
targetPort: jaeger-http
{{- end }}
{{- if .Values.tempo.traces.jaeger.grpc }}
- name: distributor-jaeger-grpc
port: 14250
protocol: TCP
targetPort: jaeger-grpc
{{- end }}
{{- if .Values.tempo.traces.zipkin }}
- name: distributor-zipkin
port: 9411
protocol: TCP
targetPort: zipkin
{{- end }}
{{- if .Values.tempo.traces.otlp.http }}
- name: distributor-otlp-http
port: 55681
protocol: TCP
targetPort: otlp-http
{{- end }}
{{- if .Values.tempo.traces.otlp.grpc }}
- name: distributor-otlp-grpc
port: 4317
protocol: TCP
targetPort: otlp-grpc
- name: distributor-otlp-legacy
port: 55680
protocol: TCP
targetPort: otlp-grpc
{{- end }}
{{- if .Values.tempo.traces.opencensus }}
- name: distributor-opencensus
port: 55678
protocol: TCP
targetPort: opencensus
{{- end }}
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
app.kubernetes.io/component: distributor
@@ -0,0 +1,37 @@
{{- if and .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ template "grafana-tempo.distributor.fullname" . }}
{{- if .Values.metrics.serviceMonitor.namespace }}
namespace: {{ .Values.metrics.serviceMonitor.namespace }}
{{- else }}
namespace: {{ .Release.Namespace }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: distributor
{{- if .Values.metrics.serviceMonitor.selector }}
{{- include "common.tplvalues.render" (dict "value" .Values.metrics.serviceMonitor.selector "context" $) | nindent 4 }}
{{- end }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: distributor
endpoints:
- port: http
{{- if .Values.metrics.serviceMonitor.interval }}
interval: {{ .Values.metrics.serviceMonitor.interval }}
{{- end }}
{{- if .Values.metrics.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
{{- end }}
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
{{- end }}
@@ -0,0 +1,4 @@
{{- range .Values.extraDeploy }}
---
{{ include "common.tplvalues.render" (dict "value" . "context" $) }}
{{- end }}
@@ -0,0 +1,30 @@
apiVersion: v1
kind: Service
metadata:
name: {{ template "grafana-tempo.gossip-ring.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: tempo
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if or .Values.commonAnnotations .Values.tempo.gossipRing.service.annotations }}
annotations:
{{- if .Values.tempo.gossipRing.service.annotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.tempo.gossipRing.service.annotations "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
{{- end }}
spec:
type: ClusterIP
publishNotReadyAddresses: true
clusterIP: None
ports:
- name: http
port: {{ .Values.tempo.gossipRing.service.port }}
targetPort: http-memberlist
protocol: TCP
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
tempo-gossip-member: "true"
@@ -0,0 +1,54 @@
apiVersion: v1
kind: Service
metadata:
name: {{ template "grafana-tempo.ingester.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: ingester
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if or .Values.commonAnnotations .Values.ingester.service.annotations }}
annotations:
{{- if .Values.ingester.service.annotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.ingester.service.annotations "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
{{- end }}
spec:
type: {{ .Values.ingester.service.type }}
{{- if .Values.ingester.service.clusterIP }}
clusterIP: {{ .Values.ingester.service.clusterIP }}
{{- end }}
{{- if (or (eq .Values.ingester.service.type "LoadBalancer") (eq .Values.ingester.service.type "NodePort")) }}
externalTrafficPolicy: {{ .Values.ingester.service.externalTrafficPolicy | quote }}
{{- end }}
{{ if eq .Values.ingester.service.type "LoadBalancer" }}
loadBalancerSourceRanges: {{ .Values.ingester.service.loadBalancerSourceRanges }}
{{ end }}
{{- if (and (eq .Values.ingester.service.type "LoadBalancer") (not (empty .Values.ingester.service.loadBalancerIP))) }}
loadBalancerIP: {{ .Values.ingester.service.loadBalancerIP }}
{{- end }}
ports:
- name: http
port: {{ .Values.ingester.service.port }}
targetPort: http
protocol: TCP
{{- if (and (or (eq .Values.ingester.service.type "NodePort") (eq .Values.ingester.service.type "LoadBalancer")) (not (empty .Values.ingester.service.nodePorts.http))) }}
nodePort: {{ .Values.ingester.service.nodePorts.http }}
{{- else if eq .Values.ingester.service.type "ClusterIP" }}
nodePort: null
{{- end }}
- name: grpc
port: {{ .Values.ingester.service.grpcPort }}
targetPort: grpc
protocol: TCP
{{- if (and (or (eq .Values.ingester.service.type "NodePort") (eq .Values.ingester.service.type "LoadBalancer")) (not (empty .Values.ingester.service.nodePorts.grpc))) }}
nodePort: {{ .Values.ingester.service.nodePorts.grpc }}
{{- else if eq .Values.ingester.service.type "ClusterIP" }}
nodePort: null
{{- end }}
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
app.kubernetes.io/component: ingester
@@ -0,0 +1,37 @@
{{- if and .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ template "grafana-tempo.ingester.fullname" . }}
{{- if .Values.metrics.serviceMonitor.namespace }}
namespace: {{ .Values.metrics.serviceMonitor.namespace }}
{{- else }}
namespace: {{ .Release.Namespace }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: ingester
{{- if .Values.metrics.serviceMonitor.selector }}
{{- include "common.tplvalues.render" (dict "value" .Values.metrics.serviceMonitor.selector "context" $) | nindent 4 }}
{{- end }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: ingester
endpoints:
- port: http
{{- if .Values.metrics.serviceMonitor.interval }}
interval: {{ .Values.metrics.serviceMonitor.interval }}
{{- end }}
{{- if .Values.metrics.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
{{- end }}
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
{{- end }}
@@ -0,0 +1,209 @@
apiVersion: {{ include "common.capabilities.statefulset.apiVersion" . }}
kind: StatefulSet
metadata:
name: {{ template "grafana-tempo.ingester.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: ingester
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
replicas: {{ .Values.ingester.replicaCount }}
{{- if .Values.ingester.updateStrategy }}
updateStrategy: {{- toYaml .Values.ingester.updateStrategy | nindent 4 }}
{{- end }}
selector:
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: ingester
serviceName: {{ template "grafana-tempo.ingester.fullname" . }}
template:
metadata:
{{- if .Values.ingester.podAnnotations }}
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.podAnnotations "context" $) | nindent 8 }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
app.kubernetes.io/component: ingester
tempo-gossip-member: "true"
{{- if .Values.ingester.podLabels }}
{{- include "common.tplvalues.render" (dict "value" .Values.ingester.podLabels "context" $) | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ template "grafana-tempo.serviceAccountName" . }}
{{- include "grafana-tempo.imagePullSecrets" . | nindent 6 }}
{{- if .Values.ingester.hostAliases }}
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.hostAliases "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.ingester.affinity }}
affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.ingester.affinity "context" $) | nindent 8 }}
{{- else }}
affinity:
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.ingester.podAffinityPreset "component" "ingester" "context" $) | nindent 10 }}
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.ingester.podAntiAffinityPreset "component" "ingester" "context" $) | nindent 10 }}
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.ingester.nodeAffinityPreset.type "key" .Values.ingester.nodeAffinityPreset.key "values" .Values.ingester.nodeAffinityPreset.values) | nindent 10 }}
{{- end }}
{{- if .Values.ingester.nodeSelector }}
nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.ingester.nodeSelector "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.ingester.tolerations }}
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.tolerations "context" .) | nindent 8 }}
{{- end }}
{{- if .Values.ingester.priorityClassName }}
priorityClassName: {{ .Values.ingester.priorityClassName | quote }}
{{- end }}
{{- if .Values.ingester.podSecurityContext.enabled }}
securityContext: {{- omit .Values.ingester.podSecurityContext "enabled" | toYaml | nindent 8 }}
{{- end }}
initContainers:
{{- if .Values.ingester.initContainers }}
{{- include "common.tplvalues.render" (dict "value" .Values.ingester.initContainers "context" $) | nindent 8 }}
{{- end }}
{{- if and .Values.volumePermissions.enabled .Values.ingester.persistence.enabled }}
- name: volume-permissions
image: {{ include "grafana-tempo.volumePermissions.image" . }}
imagePullPolicy: {{ .Values.volumePermissions.image.pullPolicy | quote }}
command:
- /bin/bash
- -ec
args:
- |
mkdir -p {{ .Values.tempo.dataDir }}{{- if .Values.ingester.persistence.subPath }}/{{ .Values.ingester.persistence.subPath }}{{- end }}
{{- if and .Values.podSecurityContext.enabled .Values.containerSecurityContext.enabled }}
chown -R "{{ .Values.containerSecurityContext.runAsUser }}:{{ .Values.podSecurityContext.fsGroup }}" "{{ .Values.tempo.dataDir }}{{- if .Values.ingester.persistence.subPath }}/{{ .Values.ingester.persistence.subPath }}{{- end }}"
{{- end }}
{{- if eq ( toString ( .Values.volumePermissions.containerSecurityContext.runAsUser )) "auto" }}
securityContext: {{- omit .Values.volumePermissions.containerSecurityContext "runAsUser" | toYaml | nindent 12 }}
{{- else }}
securityContext: {{- .Values.volumePermissions.containerSecurityContext | toYaml | nindent 12 }}
{{- end }}
{{- if .Values.volumePermissions.resources }}
resources: {{- toYaml .Values.volumePermissions.resources | nindent 12 }}
{{- end }}
volumeMounts:
- name: data
mountPath: {{ .Values.tempo.dataDir }}
{{- end }}
containers:
- name: grafana-tempo-ingester
image: {{ template "grafana-tempo.image" . }}
imagePullPolicy: {{ .Values.tempo.image.pullPolicy }}
{{- if .Values.ingester.lifecycleHooks }}
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.lifecycleHooks "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.ingester.containerSecurityContext.enabled }}
securityContext: {{- omit .Values.ingester.containerSecurityContext "enabled" | toYaml | nindent 12 }}
{{- end }}
{{- if .Values.ingester.command }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.command "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.ingester.args }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.args "context" $) | nindent 12 }}
{{- else }}
args:
- -target=ingester
- -config.file=/bitnami/grafana-tempo/conf/tempo.yaml
- -mem-ballast-size-mbs={{ .Values.tempo.memBallastSizeMbs }}
{{- end }}
{{- if .Values.ingester.extraEnvVars }}
env: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.extraEnvVars "context" $) | nindent 12 }}
{{- end }}
envFrom:
{{- if .Values.ingester.extraEnvVarsCM }}
- configMapRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.ingester.extraEnvVarsCM "context" $) }}
{{- end }}
{{- if .Values.ingester.extraEnvVarsSecret }}
- secretRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.ingester.extraEnvVarsSecret "context" $) }}
{{- end }}
ports:
- containerPort: {{ .Values.tempo.containerPort }}
name: http
- containerPort: {{ .Values.tempo.gossipRing.containerPort }}
name: http-memberlist
- containerPort: {{ .Values.tempo.grpcContainerPort }}
name: grpc
{{- if .Values.ingester.resources }}
resources: {{- toYaml .Values.ingester.resources | nindent 12 }}
{{- end }}
{{- if .Values.ingester.livenessProbe.enabled }}
livenessProbe:
tcpSocket:
port: http
initialDelaySeconds: {{ .Values.ingester.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.ingester.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.ingester.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.ingester.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.ingester.livenessProbe.failureThreshold }}
{{- else if .Values.ingester.customLivenessProbe }}
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.customLivenessProbe "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.ingester.readinessProbe.enabled }}
readinessProbe:
tcpSocket:
port: http
initialDelaySeconds: {{ .Values.ingester.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.ingester.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.ingester.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.ingester.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.ingester.readinessProbe.failureThreshold }}
{{- else if .Values.ingester.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.customReadinessProbe "context" $) | nindent 12 }}
{{- end }}
volumeMounts:
- name: tempo-config
mountPath: /bitnami/grafana-tempo/conf/tempo.yaml
subPath: tempo.yaml
- name: overrides-config
mountPath: /bitnami/grafana-tempo/conf/overrides.yaml
subPath: overrides.yaml
- name: data
mountPath: {{ .Values.tempo.dataDir }}
{{- if .Values.ingester.extraVolumeMounts }}
{{- include "common.tplvalues.render" (dict "value" .Values.ingester.extraVolumeMounts "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.ingester.sidecars }}
{{- include "common.tplvalues.render" ( dict "value" .Values.ingester.sidecars "context" $) | nindent 8 }}
{{- end }}
volumes:
- name: tempo-config
configMap:
name: {{ template "grafana-tempo.tempoConfigmapName" . }}
- name: overrides-config
configMap:
name: {{ template "grafana-tempo.overridesConfigmapName" . }}
{{- if .Values.ingester.extraVolumes }}
{{- include "common.tplvalues.render" (dict "value" .Values.ingester.extraVolumes "context" $) | nindent 8 }}
{{- end }}
{{- if not .Values.ingester.persistence.enabled }}
- name: data
emptyDir: {}
{{- else }}
volumeClaimTemplates:
- metadata:
name: data
{{- if .Values.ingester.persistence.annotations }}
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.persistence.annotations "context" $) | nindent 10 }}
{{- end }}
spec:
accessModes:
{{- range .Values.ingester.persistence.accessModes }}
- {{ . | quote }}
{{- end }}
resources:
requests:
storage: {{ .Values.ingester.persistence.size | quote }}
{{- if .Values.ingester.persistence.volumeClaimTemplates.requests }}
{{- include "common.tplvalues.render" (dict "value" .Values.ingester.persistence.volumeClaimTemplates.requests "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.ingester.persistence.volumeClaimTemplates.dataSource }}
dataSource: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.persistence.volumeClaimTemplates.dataSource "context" $) | nindent 10 }}
{{- end }}
{{- if .Values.ingester.persistence.volumeClaimTemplates.selector }}
selector: {{- include "common.tplvalues.render" (dict "value" .Values.ingester.persistence.volumeClaimTemplates.selector "context" $) | nindent 10 }}
{{- end }}
{{ include "common.storage.class" (dict "persistence" .Values.ingester.persistence "global" .Values.global) }}
{{- end }}
@@ -0,0 +1,16 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "common.names.fullname" . }}-overrides
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: tempo
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
data:
overrides.yaml: |-
{{- include "common.tplvalues.render" (dict "value" .Values.tempo.overridesConfiguration "context" $) | nindent 4 }}
@@ -0,0 +1,159 @@
apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }}
kind: Deployment
metadata:
name: {{ template "grafana-tempo.querier.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: querier
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
replicas: {{ .Values.querier.replicaCount }}
{{- if .Values.querier.updateStrategy }}
strategy: {{- toYaml .Values.querier.updateStrategy | nindent 4 }}
{{- end }}
selector:
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: querier
template:
metadata:
{{- if .Values.querier.podAnnotations }}
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.querier.podAnnotations "context" $) | nindent 8 }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
app.kubernetes.io/component: querier
tempo-gossip-member: "true"
{{- if .Values.querier.podLabels }}
{{- include "common.tplvalues.render" (dict "value" .Values.querier.podLabels "context" $) | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ template "grafana-tempo.serviceAccountName" . }}
{{- include "grafana-tempo.imagePullSecrets" . | nindent 6 }}
{{- if .Values.querier.hostAliases }}
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.querier.hostAliases "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.querier.affinity }}
affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.querier.affinity "context" $) | nindent 8 }}
{{- else }}
affinity:
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.querier.podAffinityPreset "component" "querier" "context" $) | nindent 10 }}
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.querier.podAntiAffinityPreset "component" "querier" "context" $) | nindent 10 }}
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.querier.nodeAffinityPreset.type "key" .Values.querier.nodeAffinityPreset.key "values" .Values.querier.nodeAffinityPreset.values) | nindent 10 }}
{{- end }}
{{- if .Values.querier.nodeSelector }}
nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.querier.nodeSelector "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.querier.tolerations }}
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.querier.tolerations "context" .) | nindent 8 }}
{{- end }}
{{- if .Values.querier.priorityClassName }}
priorityClassName: {{ .Values.querier.priorityClassName | quote }}
{{- end }}
{{- if .Values.querier.podSecurityContext.enabled }}
securityContext: {{- omit .Values.querier.podSecurityContext "enabled" | toYaml | nindent 8 }}
{{- end }}
initContainers:
{{- if .Values.querier.initContainers }}
{{- include "common.tplvalues.render" (dict "value" .Values.querier.initContainers "context" $) | nindent 8 }}
{{- end }}
containers:
- name: grafana-tempo-querier
image: {{ template "grafana-tempo.image" . }}
imagePullPolicy: {{ .Values.tempo.image.pullPolicy }}
{{- if .Values.querier.lifecycleHooks }}
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.querier.lifecycleHooks "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.querier.containerSecurityContext.enabled }}
securityContext: {{- omit .Values.querier.containerSecurityContext "enabled" | toYaml | nindent 12 }}
{{- end }}
{{- if .Values.querier.command }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.querier.command "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.querier.args }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.querier.args "context" $) | nindent 12 }}
{{- else }}
args:
- -target=querier
- -config.file=/bitnami/grafana-tempo/conf/tempo.yaml
- -mem-ballast-size-mbs={{ .Values.tempo.memBallastSizeMbs }}
{{- end }}
{{- if .Values.querier.extraEnvVars }}
env: {{- include "common.tplvalues.render" (dict "value" .Values.querier.extraEnvVars "context" $) | nindent 12 }}
{{- end }}
envFrom:
{{- if .Values.querier.extraEnvVarsCM }}
- configMapRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.querier.extraEnvVarsCM "context" $) }}
{{- end }}
{{- if .Values.querier.extraEnvVarsSecret }}
- secretRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.querier.extraEnvVarsSecret "context" $) }}
{{- end }}
ports:
- containerPort: {{ .Values.tempo.containerPort }}
name: http
- containerPort: {{ .Values.tempo.gossipRing.containerPort }}
name: http-memberlist
- containerPort: {{ .Values.tempo.grpcContainerPort }}
name: grpc
{{- if .Values.querier.resources }}
resources: {{- toYaml .Values.querier.resources | nindent 12 }}
{{- end }}
{{- if .Values.querier.livenessProbe.enabled }}
livenessProbe:
httpGet:
path: /ready
port: http
initialDelaySeconds: {{ .Values.querier.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.querier.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.querier.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.querier.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.querier.livenessProbe.failureThreshold }}
{{- else if .Values.querier.customLivenessProbe }}
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.querier.customLivenessProbe "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.querier.readinessProbe.enabled }}
readinessProbe:
httpGet:
path: /ready
port: http
initialDelaySeconds: {{ .Values.querier.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.querier.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.querier.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.querier.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.querier.readinessProbe.failureThreshold }}
{{- else if .Values.querier.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.querier.customReadinessProbe "context" $) | nindent 12 }}
{{- end }}
volumeMounts:
- name: tempo-config
mountPath: /bitnami/grafana-tempo/conf/tempo.yaml
subPath: tempo.yaml
- name: overrides-config
mountPath: /bitnami/grafana-tempo/conf/overrides.yaml
subPath: overrides.yaml
- name: data
mountPath: {{ .Values.tempo.dataDir }}
{{- if .Values.querier.extraVolumeMounts }}
{{- include "common.tplvalues.render" (dict "value" .Values.querier.extraVolumeMounts "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.querier.sidecars }}
{{- include "common.tplvalues.render" ( dict "value" .Values.querier.sidecars "context" $) | nindent 8 }}
{{- end }}
volumes:
# NOTE: The upstream chart does not create a PVC for this, we assume that it is just for tmp data
- name: data
emptyDir: {}
- name: tempo-config
configMap:
name: {{ template "grafana-tempo.tempoConfigmapName" . }}
- name: overrides-config
configMap:
name: {{ template "grafana-tempo.overridesConfigmapName" . }}
{{- if .Values.querier.extraVolumes }}
{{- include "common.tplvalues.render" (dict "value" .Values.querier.extraVolumes "context" $) | nindent 8 }}
{{- end }}
@@ -0,0 +1,54 @@
apiVersion: v1
kind: Service
metadata:
name: {{ template "grafana-tempo.querier.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: querier
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if or .Values.commonAnnotations .Values.querier.service.annotations }}
annotations:
{{- if .Values.querier.service.annotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.querier.service.annotations "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
{{- end }}
spec:
type: {{ .Values.querier.service.type }}
{{- if .Values.querier.service.clusterIP }}
clusterIP: {{ .Values.querier.service.clusterIP }}
{{- end }}
{{- if (or (eq .Values.querier.service.type "LoadBalancer") (eq .Values.querier.service.type "NodePort")) }}
externalTrafficPolicy: {{ .Values.querier.service.externalTrafficPolicy | quote }}
{{- end }}
{{ if eq .Values.querier.service.type "LoadBalancer" }}
loadBalancerSourceRanges: {{ .Values.querier.service.loadBalancerSourceRanges }}
{{ end }}
{{- if (and (eq .Values.querier.service.type "LoadBalancer") (not (empty .Values.querier.service.loadBalancerIP))) }}
loadBalancerIP: {{ .Values.querier.service.loadBalancerIP }}
{{- end }}
ports:
- name: http
port: {{ .Values.querier.service.port }}
targetPort: http
protocol: TCP
{{- if (and (or (eq .Values.querier.service.type "NodePort") (eq .Values.querier.service.type "LoadBalancer")) (not (empty .Values.querier.service.nodePorts.http))) }}
nodePort: {{ .Values.querier.service.nodePorts.http }}
{{- else if eq .Values.querier.service.type "ClusterIP" }}
nodePort: null
{{- end }}
- name: grpc
port: {{ .Values.querier.service.grpcPort }}
targetPort: grpc
protocol: TCP
{{- if (and (or (eq .Values.querier.service.type "NodePort") (eq .Values.querier.service.type "LoadBalancer")) (not (empty .Values.querier.service.nodePorts.grpc))) }}
nodePort: {{ .Values.querier.service.nodePorts.grpc }}
{{- else if eq .Values.querier.service.type "ClusterIP" }}
nodePort: null
{{- end }}
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
app.kubernetes.io/component: querier
@@ -0,0 +1,37 @@
{{- if and .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ template "grafana-tempo.querier.fullname" . }}
{{- if .Values.metrics.serviceMonitor.namespace }}
namespace: {{ .Values.metrics.serviceMonitor.namespace }}
{{- else }}
namespace: {{ .Release.Namespace }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: querier
{{- if .Values.metrics.serviceMonitor.selector }}
{{- include "common.tplvalues.render" (dict "value" .Values.metrics.serviceMonitor.selector "context" $) | nindent 4 }}
{{- end }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: querier
endpoints:
- port: http
{{- if .Values.metrics.serviceMonitor.interval }}
interval: {{ .Values.metrics.serviceMonitor.interval }}
{{- end }}
{{- if .Values.metrics.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
{{- end }}
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
{{- end }}
@@ -0,0 +1,227 @@
apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }}
kind: Deployment
metadata:
name: {{ template "grafana-tempo.query-frontend.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: query-frontend
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
replicas: {{ .Values.queryFrontend.replicaCount }}
{{- if .Values.queryFrontend.updateStrategy }}
strategy: {{- toYaml .Values.queryFrontend.updateStrategy | nindent 4 }}
{{- end }}
selector:
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: query-frontend
template:
metadata:
{{- if .Values.queryFrontend.podAnnotations }}
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.podAnnotations "context" $) | nindent 8 }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
app.kubernetes.io/component: query-frontend
tempo-gossip-member: "true"
{{- if .Values.queryFrontend.podLabels }}
{{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.podLabels "context" $) | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ template "grafana-tempo.serviceAccountName" . }}
{{- include "grafana-tempo.imagePullSecrets" . | nindent 6 }}
{{- if .Values.queryFrontend.hostAliases }}
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.hostAliases "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.queryFrontend.affinity }}
affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.queryFrontend.affinity "context" $) | nindent 8 }}
{{- else }}
affinity:
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.queryFrontend.podAffinityPreset "component" "query-frontend" "context" $) | nindent 10 }}
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.queryFrontend.podAntiAffinityPreset "component" "query-frontend" "context" $) | nindent 10 }}
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.queryFrontend.nodeAffinityPreset.type "key" .Values.queryFrontend.nodeAffinityPreset.key "values" .Values.queryFrontend.nodeAffinityPreset.values) | nindent 10 }}
{{- end }}
{{- if .Values.queryFrontend.nodeSelector }}
nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.queryFrontend.nodeSelector "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.queryFrontend.tolerations }}
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.tolerations "context" .) | nindent 8 }}
{{- end }}
{{- if .Values.queryFrontend.priorityClassName }}
priorityClassName: {{ .Values.queryFrontend.priorityClassName | quote }}
{{- end }}
{{- if .Values.queryFrontend.podSecurityContext.enabled }}
securityContext: {{- omit .Values.queryFrontend.podSecurityContext "enabled" | toYaml | nindent 8 }}
{{- end }}
initContainers:
{{- if .Values.queryFrontend.initContainers }}
{{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.initContainers "context" $) | nindent 8 }}
{{- end }}
containers:
- name: grafana-tempo-query-frontend
image: {{ template "grafana-tempo.image" . }}
imagePullPolicy: {{ .Values.tempo.image.pullPolicy }}
{{- if .Values.queryFrontend.lifecycleHooks }}
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.lifecycleHooks "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.containerSecurityContext.enabled }}
securityContext: {{- omit .Values.queryFrontend.containerSecurityContext "enabled" | toYaml | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.command }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.command "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.args }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.args "context" $) | nindent 12 }}
{{- else }}
args:
- -target=query-frontend
- -config.file=/bitnami/grafana-tempo/conf/tempo.yaml
- -mem-ballast-size-mbs={{ .Values.tempo.memBallastSizeMbs }}
{{- end }}
{{- if .Values.queryFrontend.extraEnvVars }}
env: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.extraEnvVars "context" $) | nindent 12 }}
{{- end }}
envFrom:
{{- if .Values.queryFrontend.extraEnvVarsCM }}
- configMapRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.queryFrontend.extraEnvVarsCM "context" $) }}
{{- end }}
{{- if .Values.queryFrontend.extraEnvVarsSecret }}
- secretRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.queryFrontend.extraEnvVarsSecret "context" $) }}
{{- end }}
ports:
- containerPort: {{ .Values.tempo.containerPort }}
name: http
- containerPort: {{ .Values.tempo.gossipRing.containerPort }}
name: http-memberlist
- containerPort: {{ .Values.tempo.grpcContainerPort }}
name: grpc
{{- if .Values.queryFrontend.resources }}
resources: {{- toYaml .Values.queryFrontend.resources | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.livenessProbe.enabled }}
livenessProbe:
httpGet:
path: /ready
port: http
initialDelaySeconds: {{ .Values.queryFrontend.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.queryFrontend.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.queryFrontend.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.queryFrontend.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.queryFrontend.livenessProbe.failureThreshold }}
{{- else if .Values.queryFrontend.customLivenessProbe }}
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.customLivenessProbe "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.readinessProbe.enabled }}
readinessProbe:
httpGet:
path: /ready
port: http
initialDelaySeconds: {{ .Values.queryFrontend.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.queryFrontend.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.queryFrontend.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.queryFrontend.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.queryFrontend.readinessProbe.failureThreshold }}
{{- else if .Values.queryFrontend.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.customReadinessProbe "context" $) | nindent 12 }}
{{- end }}
volumeMounts:
- name: tempo-config
mountPath: /bitnami/grafana-tempo/conf/tempo.yaml
subPath: tempo.yaml
- name: overrides-config
mountPath: /bitnami/grafana-tempo/conf/overrides.yaml
subPath: overrides.yaml
{{- if .Values.queryFrontend.extraVolumeMounts }}
{{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.extraVolumeMounts "context" $) | nindent 12 }}
{{- end }}
- name: grafana-tempo-query
image: {{ template "grafana-tempo.queryImage" . }}
imagePullPolicy: {{ .Values.queryFrontend.query.image.pullPolicy }}
{{- if .Values.queryFrontend.query.lifecycleHooks }}
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.lifecycleHooks "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.query.containerSecurityContext.enabled }}
securityContext: {{- omit .Values.queryFrontend.query.containerSecurityContext "enabled" | toYaml | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.query.command }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.command "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.query.args }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.args "context" $) | nindent 12 }}
{{- else }}
args:
- --query.base-path=/
- --grpc-storage-plugin.configuration-file=/bitnami/grafana-tempo/conf/tempo-query.yaml
- --query.bearer-token-propagation=true
{{- end }}
{{- if .Values.queryFrontend.query.extraEnvVars }}
env: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.extraEnvVars "context" $) | nindent 12 }}
{{- end }}
envFrom:
{{- if .Values.queryFrontend.query.extraEnvVarsCM }}
- configMapRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.extraEnvVarsCM "context" $) }}
{{- end }}
{{- if .Values.queryFrontend.query.extraEnvVarsSecret }}
- secretRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.extraEnvVarsSecret "context" $) }}
{{- end }}
ports:
- containerPort: {{ .Values.queryFrontend.query.jaegerUIContainerPort }}
name: jaeger-ui
- containerPort: {{ .Values.queryFrontend.query.jaegerMetricsContainerPort }}
name: jaeger-metrics
{{- if .Values.queryFrontend.query.resources }}
resources: {{- toYaml .Values.queryFrontend.query.resources | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.query.livenessProbe.enabled }}
livenessProbe:
tcpSocket:
port: jaeger-ui
initialDelaySeconds: {{ .Values.queryFrontend.query.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.queryFrontend.query.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.queryFrontend.query.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.queryFrontend.query.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.queryFrontend.query.livenessProbe.failureThreshold }}
{{- else if .Values.queryFrontend.query.customLivenessProbe }}
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.customLivenessProbe "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.query.readinessProbe.enabled }}
readinessProbe:
tcpSocket:
port: jaeger-ui
initialDelaySeconds: {{ .Values.queryFrontend.query.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.queryFrontend.query.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.queryFrontend.query.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.queryFrontend.query.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.queryFrontend.query.readinessProbe.failureThreshold }}
{{- else if .Values.queryFrontend.query.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.customReadinessProbe "context" $) | nindent 12 }}
{{- end }}
volumeMounts:
- name: tempo-query-config
mountPath: /bitnami/grafana-tempo/conf
{{- if .Values.queryFrontend.query.extraVolumeMounts }}
{{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.extraVolumeMounts "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.queryFrontend.sidecars }}
{{- include "common.tplvalues.render" ( dict "value" .Values.queryFrontend.sidecars "context" $) | nindent 8 }}
{{- end }}
volumes:
- name: tempo-config
configMap:
name: {{ template "grafana-tempo.tempoConfigmapName" . }}
- name: overrides-config
configMap:
name: {{ template "grafana-tempo.overridesConfigmapName" . }}
- name: tempo-query-config
configMap:
name: {{ template "grafana-tempo.queryConfigmapName" . }}
{{- if .Values.queryFrontend.extraVolumes }}
{{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.extraVolumes "context" $) | nindent 8 }}
{{- end }}
@@ -0,0 +1,29 @@
apiVersion: v1
kind: Service
metadata:
name: {{ template "grafana-tempo.query-frontend.fullname" . }}-headless
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: query-frontend
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
# NOTE: this is based on this https://github.com/grafana/helm-charts/pull/451. Should be reviewed if it is actually necessary in the future
publishNotReadyAddresses: true
type: ClusterIP
clusterIP: None
ports:
- name: http
port: {{ .Values.queryFrontend.service.port }}
targetPort: http
protocol: TCP
- name: grpc
port: {{ .Values.queryFrontend.service.grpcPort }}
targetPort: grpc
protocol: TCP
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
app.kubernetes.io/component: query-frontend
@@ -0,0 +1,16 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "grafana-tempo.query-frontend.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: query
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
data:
tempo-query.yaml: |-
{{- include "common.tplvalues.render" (dict "value" .Values.queryFrontend.query.configuration "context" $) | nindent 4 }}
@@ -0,0 +1,50 @@
apiVersion: v1
kind: Service
metadata:
name: {{ template "grafana-tempo.query-frontend.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: query-frontend
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if or .Values.commonAnnotations .Values.queryFrontend.service.annotations }}
annotations:
{{- if .Values.queryFrontend.service.annotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.queryFrontend.service.annotations "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
{{- end }}
spec:
type: {{ .Values.queryFrontend.service.type }}
{{- if .Values.queryFrontend.service.clusterIP }}
clusterIP: {{ .Values.queryFrontend.service.clusterIP }}
{{- end }}
{{- if (or (eq .Values.queryFrontend.service.type "LoadBalancer") (eq .Values.queryFrontend.service.type "NodePort")) }}
externalTrafficPolicy: {{ .Values.queryFrontend.service.externalTrafficPolicy | quote }}
{{- end }}
{{ if eq .Values.queryFrontend.service.type "LoadBalancer" }}
loadBalancerSourceRanges: {{ .Values.queryFrontend.service.loadBalancerSourceRanges }}
{{ end }}
{{- if (and (eq .Values.queryFrontend.service.type "LoadBalancer") (not (empty .Values.queryFrontend.service.loadBalancerIP))) }}
loadBalancerIP: {{ .Values.queryFrontend.service.loadBalancerIP }}
{{- end }}
publishNotReadyAddresses: true
ports:
- name: http
port: {{ .Values.queryFrontend.service.port }}
targetPort: http
protocol: TCP
{{- if (and (or (eq .Values.queryFrontend.service.type "NodePort") (eq .Values.queryFrontend.service.type "LoadBalancer")) (not (empty .Values.queryFrontend.service.nodePorts.http))) }}
nodePort: {{ .Values.queryFrontend.service.nodePorts.http }}
{{- else if eq .Values.queryFrontend.service.type "ClusterIP" }}
nodePort: null
{{- end }}
- name: grpc
port: {{ .Values.queryFrontend.service.grpcPort }}
targetPort: grpc
protocol: TCP
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
app.kubernetes.io/component: query-frontend
@@ -0,0 +1,37 @@
{{- if and .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ template "grafana-tempo.query-frontend.fullname" . }}
{{- if .Values.metrics.serviceMonitor.namespace }}
namespace: {{ .Values.metrics.serviceMonitor.namespace }}
{{- else }}
namespace: {{ .Release.Namespace }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: query-frontend
{{- if .Values.metrics.serviceMonitor.selector }}
{{- include "common.tplvalues.render" (dict "value" .Values.metrics.serviceMonitor.selector "context" $) | nindent 4 }}
{{- end }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: query-frontend
endpoints:
- port: http
{{- if .Values.metrics.serviceMonitor.interval }}
interval: {{ .Values.metrics.serviceMonitor.interval }}
{{- end }}
{{- if .Values.metrics.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
{{- end }}
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
{{- end }}
@@ -0,0 +1,15 @@
{{- if .Values.serviceAccount.create }}
apiVersion: v1
kind: ServiceAccount
metadata:
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: tempo
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
name: {{ template "grafana-tempo.serviceAccountName" . }}
namespace: {{ .Release.Namespace | quote }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
{{- end }}
@@ -0,0 +1,16 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "common.names.fullname" . }}-tempo
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: tempo
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
data:
tempo.yaml: |-
{{- include "common.tplvalues.render" (dict "value" .Values.tempo.configuration "context" $) | nindent 4 }}
@@ -0,0 +1,144 @@
{{- if .Values.vulture.enabled }}
apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }}
kind: Deployment
metadata:
name: {{ template "grafana-tempo.vulture.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: vulture
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
replicas: {{ .Values.vulture.replicaCount }}
{{- if .Values.vulture.updateStrategy }}
strategy: {{- toYaml .Values.vulture.updateStrategy | nindent 4 }}
{{- end }}
selector:
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: vulture
template:
metadata:
{{- if .Values.vulture.podAnnotations }}
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.vulture.podAnnotations "context" $) | nindent 8 }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
app.kubernetes.io/component: vulture
{{- if .Values.vulture.podLabels }}
{{- include "common.tplvalues.render" (dict "value" .Values.vulture.podLabels "context" $) | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ template "grafana-tempo.serviceAccountName" . }}
{{- include "grafana-tempo.imagePullSecrets" . | nindent 6 }}
{{- if .Values.vulture.hostAliases }}
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.vulture.hostAliases "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.vulture.affinity }}
affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.vulture.affinity "context" $) | nindent 8 }}
{{- else }}
affinity:
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.vulture.podAffinityPreset "component" "vulture" "context" $) | nindent 10 }}
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.vulture.podAntiAffinityPreset "component" "vulture" "context" $) | nindent 10 }}
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.vulture.nodeAffinityPreset.type "key" .Values.vulture.nodeAffinityPreset.key "values" .Values.vulture.nodeAffinityPreset.values) | nindent 10 }}
{{- end }}
{{- if .Values.vulture.nodeSelector }}
nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.vulture.nodeSelector "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.vulture.tolerations }}
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.vulture.tolerations "context" .) | nindent 8 }}
{{- end }}
{{- if .Values.vulture.priorityClassName }}
priorityClassName: {{ .Values.vulture.priorityClassName | quote }}
{{- end }}
{{- if .Values.vulture.podSecurityContext.enabled }}
securityContext: {{- omit .Values.vulture.podSecurityContext "enabled" | toYaml | nindent 8 }}
{{- end }}
initContainers:
{{- if .Values.vulture.initContainers }}
{{- include "common.tplvalues.render" (dict "value" .Values.vulture.initContainers "context" $) | nindent 8 }}
{{- end }}
containers:
- name: grafana-tempo-vulture
image: {{ template "grafana-tempo.vultureImage" . }}
imagePullPolicy: {{ .Values.vulture.image.pullPolicy }}
{{- if .Values.vulture.lifecycleHooks }}
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.vulture.lifecycleHooks "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.vulture.containerSecurityContext.enabled }}
securityContext: {{- omit .Values.vulture.containerSecurityContext "enabled" | toYaml | nindent 12 }}
{{- end }}
{{- if .Values.vulture.command }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.vulture.command "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.vulture.args }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.vulture.args "context" $) | nindent 12 }}
{{- else }}
args:
- -prometheus-listen-address=0.0.0.0:{{ .Values.vulture.containerPort }}
- -tempo-push-url=http://{{ template "grafana-tempo.distributor.fullname" . }}
- -tempo-query-url=http://{{ template "grafana-tempo.query-frontend.fullname" . }}:{{ .Values.queryFrontend.service.port }}
{{- end }}
{{- if .Values.vulture.extraEnvVars }}
env: {{- include "common.tplvalues.render" (dict "value" .Values.vulture.extraEnvVars "context" $) | nindent 12 }}
{{- end }}
envFrom:
{{- if .Values.vulture.extraEnvVarsCM }}
- configMapRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.vulture.extraEnvVarsCM "context" $) }}
{{- end }}
{{- if .Values.vulture.extraEnvVarsSecret }}
- secretRef:
name: {{ include "common.tplvalues.render" (dict "value" .Values.vulture.extraEnvVarsSecret "context" $) }}
{{- end }}
ports:
- containerPort: {{ .Values.vulture.containerPort }}
name: http
{{- if .Values.vulture.resources }}
resources: {{- toYaml .Values.vulture.resources | nindent 12 }}
{{- end }}
{{- if .Values.vulture.livenessProbe.enabled }}
livenessProbe:
httpGet:
path: /metrics
port: http
initialDelaySeconds: {{ .Values.vulture.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.vulture.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.vulture.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.vulture.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.vulture.livenessProbe.failureThreshold }}
{{- else if .Values.vulture.customLivenessProbe }}
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.vulture.customLivenessProbe "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.vulture.readinessProbe.enabled }}
readinessProbe:
httpGet:
path: /metrics
port: http
initialDelaySeconds: {{ .Values.vulture.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.vulture.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.vulture.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.vulture.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.vulture.readinessProbe.failureThreshold }}
{{- else if .Values.vulture.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.vulture.customReadinessProbe "context" $) | nindent 12 }}
{{- end }}
volumeMounts:
- name: tempo-config
mountPath: /bitnami/grafana-tempo/conf
{{- if .Values.vulture.extraVolumeMounts }}
{{- include "common.tplvalues.render" (dict "value" .Values.vulture.extraVolumeMounts "context" $) | nindent 12 }}
{{- end }}
{{- if .Values.vulture.sidecars }}
{{- include "common.tplvalues.render" ( dict "value" .Values.vulture.sidecars "context" $) | nindent 8 }}
{{- end }}
volumes:
- name: tempo-config
configMap:
name: {{ template "grafana-tempo.tempoConfigmapName" . }}
{{- if .Values.vulture.extraVolumes }}
{{- include "common.tplvalues.render" (dict "value" .Values.vulture.extraVolumes "context" $) | nindent 8 }}
{{- end }}
{{- end }}
@@ -0,0 +1,47 @@
{{- if .Values.vulture.enabled }}
apiVersion: v1
kind: Service
metadata:
name: {{ template "grafana-tempo.vulture.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: vulture
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if or .Values.commonAnnotations .Values.vulture.service.annotations }}
annotations:
{{- if .Values.vulture.service.annotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.vulture.service.annotations "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
{{- end }}
spec:
type: {{ .Values.vulture.service.type }}
{{- if .Values.vulture.service.clusterIP }}
clusterIP: {{ .Values.vulture.service.clusterIP }}
{{- end }}
{{- if (or (eq .Values.vulture.service.type "LoadBalancer") (eq .Values.vulture.service.type "NodePort")) }}
externalTrafficPolicy: {{ .Values.vulture.service.externalTrafficPolicy | quote }}
{{- end }}
{{ if eq .Values.vulture.service.type "LoadBalancer" }}
loadBalancerSourceRanges: {{ .Values.vulture.service.loadBalancerSourceRanges }}
{{ end }}
{{- if (and (eq .Values.vulture.service.type "LoadBalancer") (not (empty .Values.vulture.service.loadBalancerIP))) }}
loadBalancerIP: {{ .Values.vulture.service.loadBalancerIP }}
{{- end }}
ports:
- name: prom-metrics
port: {{ .Values.vulture.service.port }}
targetPort: prom-metrics
protocol: TCP
{{- if (and (or (eq .Values.vulture.service.type "NodePort") (eq .Values.vulture.service.type "LoadBalancer")) (not (empty .Values.vulture.service.nodePorts.http))) }}
nodePort: {{ .Values.vulture.service.nodePorts.http }}
{{- else if eq .Values.vulture.service.type "ClusterIP" }}
nodePort: null
{{- end }}
selector: {{- include "common.labels.matchLabels" . | nindent 4 }}
app.kubernetes.io/component: vulture
{{- end }}
@@ -0,0 +1,37 @@
{{- if and .Values.vulture.enabled .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ template "grafana-tempo.vulture.fullname" . }}
{{- if .Values.metrics.serviceMonitor.namespace }}
namespace: {{ .Values.metrics.serviceMonitor.namespace }}
{{- else }}
namespace: {{ .Release.Namespace }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
app.kubernetes.io/component: vulture
{{- if .Values.metrics.serviceMonitor.selector }}
{{- include "common.tplvalues.render" (dict "value" .Values.metrics.serviceMonitor.selector "context" $) | nindent 4 }}
{{- end }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: vulture
endpoints:
- port: http
{{- if .Values.metrics.serviceMonitor.interval }}
interval: {{ .Values.metrics.serviceMonitor.interval }}
{{- end }}
{{- if .Values.metrics.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
{{- end }}
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
{{- end }}
File diff suppressed because it is too large Load Diff