2 # -- Overrides the Docker registry globally for all images
4 # To help compatibility with other charts which use global.imagePullSecrets.
5 # Allow either an array of {name: pullSecret} maps (k8s-style), or an array of strings (more common helm-style).
19 ## Use an existing ClusterRole/Role (depending on rbac.namespaced false/true)
20 # useExistingRole: name-of-some-role
21 # useExistingClusterRole: name-of-some-clusterRole
29 extraClusterRoleRules: []
37 ## ServiceAccount labels.
39 ## Service account annotations. Can be templated.
41 # eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here
43 ## autoMount is deprecated in favor of automountServiceAccountToken
45 automountServiceAccountToken: false
47## Create a headless service for the deployment
49## Should the service account be auto mounted on the pod
50automountServiceAccountToken: true
51## Create HorizontalPodAutoscaler object for deployment type
60## See `kubectl explain poddisruptionbudget.spec` for more
61## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
62podDisruptionBudget: {}
66# unhealthyPodEvictionPolicy: IfHealthyBudget
68## See `kubectl explain deployment.spec.strategy` for more
69## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
80 initialDelaySeconds: 60
83## Use an alternate scheduler, e.g. "stork".
84## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
86# schedulerName: "default-scheduler"
88 # -- The Docker registry
90 # -- Docker image repository
91 repository: chainguard-private/grafana
92 # Overrides the Grafana image tag whose default is the chart appVersion
94 sha: sha256:d69d96981159150bb3281d334a11aca5681699ff850f2d5c13a1516f5bc29438
95 pullPolicy: IfNotPresent
96 ## Optionally specify an array of imagePullSecrets.
97 ## Secrets must be manually created in the namespace.
98 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
102 # - myRegistrKeySecretName
105 ## The type of Helm hook used to run this test. Defaults to test.
106 ## ref: https://helm.sh/docs/topics/charts_hooks/#the-available-hooks
110 # -- The Docker registry
112 repository: bats/bats
114 imagePullPolicy: IfNotPresent
116 containerSecurityContext: {}
124# dns configuration for pod
140containerSecurityContext:
141 allowPrivilegeEscalation: false
148# Enable creating the grafana configmap
150# Extra configmaps to mount in grafana pods
151# Values are templated.
152extraConfigmapMounts: []
153# - name: certs-configmap
154# mountPath: /etc/grafana/ssl/
155# subPath: certificates.crt # (optional)
156# configMap: certs-configmap
160extraEmptyDirMounts: []
161# - name: provisioning-notifiers
162# mountPath: /etc/grafana/provisioning/notifiers
164# Apply extra labels to common labels.
166## Assign a PriorityClassName to pods if set
168downloadDashboardsImage:
169 # -- The Docker registry
171 repository: chainguard-private/curl
173 sha: sha256:d7a9f5275564869552a6b3f47828802e5c4b1c776cb84387133b2e56ab79815e
174 pullPolicy: IfNotPresent
180 allowPrivilegeEscalation: false
189 # name: configmap-name
194## ConfigMap Annotations
195# configMapAnnotations: {}
196# argocd.argoproj.io/sync-options: Replace=true
201gossipPortName: gossip
202## Deployment annotations
205## Expose the grafana service to be accessed from outside the cluster (LoadBalancer service).
206## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
207## ref: http://kubernetes.io/docs/user-guide/services/
212 # Set the ip family policy to configure dual-stack see [Configure dual-stack](https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services)
214 # Sets the families that should be supported and the order in which they should be applied to ClusterIP as well. Can be IPv4 and/or IPv6.
217 loadBalancerClass: ""
218 loadBalancerSourceRanges: []
221 # targetPort: 4181 To be used with a proxy extraContainer
222 ## Service annotations. Can be templated.
226 # Adds the appProtocol field to the service. This allows to work with istio protocol selection. Ex: "http" or "tcp"
230 ## If true, a ServiceMonitor CR is created for a prometheus operator
231 ## https://github.com/coreos/prometheus-operator
235 # namespace: monitoring (defaults to use the namespace this chart is deployed to)
242 metricRelabelings: []
250# overrides pod.spec.hostAliases in the grafana deployment's pods
258 # For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName
259 # See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress
260 # ingressClassName: nginx
261 # Values can be templated
263 # kubernetes.io/ingress.class: nginx
264 # kubernetes.io/tls-acme: "true"
267 # pathType is only for k8s >= 1.1=
270 - chart-example.local
271 ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
275 # serviceName: ssl-redirect
276 # servicePort: use-annotation
284 # name: use-annotation
287 # - secretName: chart-example-tls
289 # - chart-example.local
290# -- BETA: Configure the gateway routes for the chart here.
291# More routes can be added by adding a dictionary key like the 'main' route.
292# Be aware that this is an early beta of this feature,
293# kube-prometheus-stack does not guarantee this works and is subject to change.
294# Being BETA this can/will change in the future without notice, do not use unless you want to take that risk
295# [[ref]](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io%2fv1alpha2)
298 # -- Enables or disables the route
300 # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1alpha2
301 apiVersion: gateway.networking.k8s.io/v1
302 # -- Set the route kind
303 # Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
308 # - my-filter.example.com
316 ## Filters define the filters that are applied to requests that match this rule.
318 ## Additional custom rules that can be added to the route
320 ## httpsRedirect adds a filter for redirecting to https (HTTP 301 Moved Permanently).
321 ## To redirect HTTP traffic to HTTPS, you need to have a Gateway with both HTTP and HTTPS listeners.
322 ## Matches and filters do not take effect if enabled.
323 ## Ref. https://gateway-api.sigs.k8s.io/guides/http-redirect-rewrite/
333## Node labels for pod assignment
334## ref: https://kubernetes.io/docs/user-guide/node-selection/
337## Tolerations for pod assignment
338## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
341## Affinity for pod assignment (evaluated as template)
342## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
345## Topology Spread Constraints
346## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
348topologySpreadConstraints: []
349## Additional init containers (evaluated as template)
350## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
352extraInitContainers: []
353## Enable an Specify container in extraContainers. This is meant to allow adding an authentication proxy to a grafana pod
357# image: quay.io/gambol99/keycloak-proxy:latest
362# - -github-org=<ORG_NAME>
365# - -http-address=http://0.0.0.0:4181
366# - -upstream-url=http://127.0.0.1:3000
371## Volumes that can be used in init containers that will not be mounted to deployment pods
372extraContainerVolumes: []
373# - name: volume-from-secret
375# secretName: secret-to-mount
376# - name: empty-dir-volume
379## Enable persistence using Persistent Volume Claims
380## ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
385 # storageClassName: default
386 ## (Optional) Use this to bind the claim to an existing PersistentVolume (PV) by name.
393 - kubernetes.io/pvc-protection
395 ## Sub-directory of the PV to mount. Can be templated.
397 ## Name of an existing PVC. Can be templated.
399 ## Extra labels to apply to a PVC.
401 disableWarning: false
402 ## If persistence is not enabled, this allows to mount the
403 ## local storage in-memory to improve performance
407 ## The maximum usage on memory medium EmptyDir would be
408 ## the minimum value between the SizeLimit specified
409 ## here and the sum of memory limits of all containers in a pod
412 ## If 'lookupVolumeName' is set to true, Helm will attempt to retrieve
413 ## the current value of 'spec.volumeName' and incorporate it into the template.
414 lookupVolumeName: true
416 ## If false, data ownership will not be reset at startup
417 ## This allows the grafana-server to be run with an arbitrary user
420 ## initChownData container image
423 # -- The Docker registry
425 repository: chainguard-private/busybox
427 sha: sha256:a4df82542624593a943071c90310653381295bb95494ff58a4650101aefeafaf
428 pullPolicy: IfNotPresent
429 ## initChownData resource requests and limits
430 ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
440 readOnlyRootFilesystem: false
450# Administrator credentials when not using an existing secret (see below)
452# adminPassword: strongpassword
454# Use an existing secret for the admin user.
456 ## Name of the secret. Can be templated.
459 passwordKey: admin-password
460## Define command to be executed at startup by grafana container
461## Needed if using `vault-env` to manage secrets (ref: https://banzaicloud.com/blog/inject-secrets-into-pods-vault/)
462## Default is "run.sh" as defined in grafana's Dockerfile
467## Optionally define args if command is used
468## Needed if using `hashicorp/envconsul` to manage secrets
469## By default no arguments are set
475## Extra environment variables that will be pass onto deployment pods
477## to provide grafana with access to CloudWatch on AWS EKS:
478## 1. create an iam role of type "Web identity" with provider oidc.eks.* (note the provider for later)
479## 2. edit the "Trust relationships" of the role, add a line inside the StringEquals clause using the
480## same oidc eks provider as noted before (same as the existing line)
481## also, replace NAMESPACE and prometheus-operator-grafana with the service account namespace and name
483## "oidc.eks.us-east-1.amazonaws.com/id/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:sub": "system:serviceaccount:NAMESPACE:prometheus-operator-grafana",
485## 3. attach a policy to the role, you can use a built in policy called CloudWatchReadOnlyAccess
486## 4. use the following env: (replace 123456789000 and iam-role-name-here with your aws account number and role name)
489## AWS_ROLE_ARN: arn:aws:iam::123456789000:role/iam-role-name-here
490## AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
491## AWS_REGION: us-east-1
493## 5. uncomment the EKS section in extraSecretMounts: below
494## 6. uncomment the annotation section in the serviceAccount: above
495## make sure to replace arn:aws:iam::123456789000:role/iam-role-name-here with your role arn
497## "valueFrom" environment variable references that will be added to deployment pods. Name is templated.
498## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#envvarsource-v1-core
499## Renders in container spec as:
504## <value rendered as YAML>
508# name: configmap-name
511## The name of a secret in the same kubernetes namespace which contain values to be added to the environment
512## This can be useful for auth tokens, etc. Value is templated.
514## Sensible environment variables that will be rendered as new secret object
515## This can be useful for auth tokens, etc.
516## If the secret values contains "{{", they'll need to be properly escaped so that they are not interpreted by Helm
517## ref: https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function
519## The names of secrets in the same kubernetes namespace which contain values to be added to the environment
520## Each entry should contain a name key, and can optionally specify whether the secret must be defined with an optional key.
523## - name: secret-name
527## The names of configmaps in the same kubernetes namespace which contain values to be added to the environment
528## Each entry should contain a name key, and can optionally specify whether the configmap must be defined with an optional key.
530## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#configmapenvsource-v1-core
532## - name: configmap-name
536# Inject Kubernetes services as environment variables.
537# See https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#environment-variables
538enableServiceLinks: true
539## Additional grafana server secret mounts
540# Defines additional mounts with secrets. Secrets must be manually created in the namespace.
542# - name: secret-files
543# mountPath: /etc/secrets
544# secretName: grafana-secret-files
549# for AWS EKS (cloudwatch) use the following (see also instruction in env: above)
550# - name: aws-iam-token
551# mountPath: /var/run/secrets/eks.amazonaws.com/serviceaccount
556# - serviceAccountToken:
557# audience: sts.amazonaws.com
558# expirationSeconds: 86400
561# for CSI e.g. Azure Key Vault use the following
562# - name: secrets-store-inline
563# mountPath: /run/secrets/vault.azure.com
566# driver: secrets-store.csi.k8s.io
569# secretProviderClass: "akv-grafana-spc"
570# nodePublishSecretRef: # Only required when using service principal mode
571# name: grafana-akv-creds # Only required when using service principal mode
573## Additional grafana server volume mounts
574# Defines additional volume mounts.
576# - name: extra-volume-0
577# mountPath: /mnt/volume0
579# - name: extra-volume-1
580# mountPath: /mnt/volume1
582# - name: grafana-secrets
583# mountPath: /mnt/volume2
585## Additional Grafana server volumes
587# - name: extra-volume-0
588# existingClaim: volume-claim
589# - name: extra-volume-1
593# - name: grafana-secrets
595# driver: secrets-store.csi.k8s.io
598# secretProviderClass: "grafana-env-spc"
600## Container Lifecycle Hooks. Execute a specific bash command or make an HTTP request
606## Pass the plugins you want installed as a list.
609# - digrich-bubblechart-panel
610# - grafana-clock-panel
611## You can also use other plugin download URL, as long as they are valid zip files,
612## and specify the name of the plugin after the semicolon. Like this:
613# - https://grafana.com/api/plugins/marcusolsson-json-datasource/versions/1.3.2/download;marcusolsson-json-datasource
615## Configure grafana datasources
616## ref: http://docs.grafana.org/administration/provisioning/#datasources
624# url: http://prometheus-prometheus-server
634# defaultRegion: us-east-1
635# deleteDatasources: []
638## Configure grafana alerting (can be templated)
639## ref: https://docs.grafana.com/alerting/set-up/provision-alerting-resources/file-provisioning/
652# name: '{{ .Chart.Name }}_my_rule_group'
653# folder: my_first_folder
657# title: my_first_rule
661# datasourceUid: '-100'
681# maxDataPoints: 43200
684# dashboardUid: my_dashboard
686# noDataState: Alerting
689# some_key: some_value
709# {{ `{{ include "default.message" . }}` }}
715# name: my_first_template
718# {{ define "my_first_template" }}
719# Custom notification message
728# # refer to https://prometheus.io/docs/alerting/latest/configuration/#time_interval-0
731## Configure notifiers
732## ref: http://docs.grafana.org/administration/provisioning/#alert-notification-channels
737# - name: email-notifier
746# addresses: an_email_address@example.com
749## Configure grafana dashboard providers
750## ref: http://docs.grafana.org/administration/provisioning/#dashboards
752## `path` must be /var/lib/grafana/dashboards/<provider_name>
754dashboardProviders: {}
755# dashboardproviders.yaml:
762# disableDeletion: false
765# path: /var/lib/grafana/dashboards/default
767## Configure how curl fetches remote dashboards. The beginning dash is required.
768## NOTE: This sets the default short flags for all dashboards, but these
769## defaults can be overridden individually for each dashboard by setting
770## curlOptions. See the example dashboards section below.
773## -k - allow insecure (eg: non-TLS) connections
775## See the curl documentation for additional options
777defaultCurlOptions: "-skf"
778## Configure grafana dashboard to import
779## NOTE: To use dashboards you must also enable/configure dashboardProviders
780## ref: https://grafana.com/dashboards
782## dashboards per provider, use provider name as key.
790# file: dashboards/custom-dashboard.json
794# datasource: Prometheus
796# url: https://example.com/repository/test.json
799# local-dashboard-base64:
800# url: https://example.com/repository/test-b64.json
803# local-dashboard-gitlab:
804# url: https://example.com/repository/test-gitlab.json
806# local-dashboard-bitbucket:
807# url: https://example.com/repository/test-bitbucket.json
809# local-dashboard-azure:
810# url: https://example.com/repository/test-azure.json
814## Reference to external ConfigMap per provider. Use provider name as key and ConfigMap name as value.
815## A provider dashboards must be defined either by external ConfigMaps or in values.yaml, not in both.
816## ConfigMap data example:
819## example-dashboard.json: |
822dashboardsConfigMaps: {}
825## Grafana's primary configuration
826## NOTE: values in map will be converted to ini format
827## ref: http://docs.grafana.org/installation/configuration/
831 data: /var/lib/grafana/
832 logs: /var/log/grafana
833 plugins: /var/lib/grafana/plugins
834 provisioning: /etc/grafana/provisioning
836 check_for_updates: true
840 domain: "{{ if (and .Values.ingress.enabled .Values.ingress.hosts) }}{{ tpl (.Values.ingress.hosts | first) . }}{{ else if (and .Values.route.main.enabled .Values.route.main.hostnames) }}{{ tpl (.Values.route.main.hostnames | first) . }}{{ else }}''{{ end }}"
842 index_path: /var/lib/grafana-search/bleve
843 ## grafana Authentication can be enabled with the following values on grafana.ini
845 # The full public facing url you use in browser, used for redirects and emails
847 # https://grafana.com/docs/grafana/latest/auth/github/#enable-github-in-grafana
850 # allow_sign_up: false
851 # scopes: user:email,read:org
852 # auth_url: https://github.com/login/oauth/authorize
853 # token_url: https://github.com/login/oauth/access_token
854 # api_url: https://api.github.com/user
856 # allowed_organizations:
859 ## LDAP Authentication can be enabled with the following values on grafana.ini
860 ## NOTE: Grafana will fail to start if the value for ldap.toml is invalid
863 # allow_sign_up: true
864 # config_file: /etc/grafana/ldap.toml
865## Grafana's alerting configuration
868# rule_version_record_limit: "5"
870## Grafana's LDAP configuration
871## Templated by the template in _helpers.tpl
872## NOTE: To enable the grafana.ini must be configured with auth.ldap.enabled
873## ref: http://docs.grafana.org/installation/configuration/#auth-ldap
874## ref: http://docs.grafana.org/installation/ldap/#configuration
877 # `existingSecret` is a reference to an existing secret containing the ldap configuration
878 # for Grafana in a key `ldap-toml`.
880 # `config` is the content of `ldap.toml` that will be stored in the created secret
883 # verbose_logging = true
885# host = "my-ldap-server"
889# ssl_skip_verify = false
890# bind_dn = "uid=%s,ou=users,dc=myorg,dc=com"
892# When process namespace sharing is enabled, processes in a container are visible to all other containers in the same pod
893# This parameter is added because the ldap reload api is not working https://grafana.com/docs/grafana/latest/developers/http_api/admin/#reload-ldap-configuration
894# To allow an extraContainer to restart the Grafana container
895shareProcessNamespace: false
896## Grafana's SMTP configuration
897## NOTE: To enable, grafana.ini must be configured with smtp.enabled
898## ref: http://docs.grafana.org/installation/configuration/#smtp
900 # `existingSecret` is a reference to an existing secret containing the smtp configuration
904 passwordKey: "password"
905## Sidecars that collect the configmaps with specified label and stores the included files them into the respective folders
906## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
909 # -- The Docker registry
911 repository: chainguard-private/k8s-sidecar
913 sha: sha256:fa7c8caa44059baa6c534d38059fba7725f581e49cab521c2e248212b99444a7
914 imagePullPolicy: IfNotPresent
923 allowPrivilegeEscalation: false
929 # skipTlsVerify Set to true to skip tls verification for kube api calls
930 # skipTlsVerify: true
931 enableUniqueFilenames: false
934 # Log level default for all sidecars. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL. Defaults to INFO
938 # Additional environment variables for the alerts sidecar
940 ## "valueFrom" environment variable references that will be added to deployment pods. Name is templated.
941 ## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#envvarsource-v1-core
942 ## Renders in container spec as:
947 ## <value rendered as YAML>
951 # name: configmap-name
953 # Do not reprocess already processed unchanged resources on k8s API reconnect.
954 # ignoreAlreadyProcessed: true
955 # label that the configmaps with alert are marked with (can be templated)
957 # value of label that the configmaps with alert are set to (can be templated)
959 # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
961 # If specified, the sidecar will search for alert config-maps inside this namespace.
962 # Otherwise the namespace in which the sidecar is running will be used.
963 # It's also possible to specify ALL to search in all namespaces
964 searchNamespace: null
965 # Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds.
967 # search in configmap, secret or both
970 # resourceName: comma separated list of resource names to be fetched/checked by this sidecar.
971 # per default all resources of the type defined in {{ .Values.sidecar.alerts.resource }} will be checked.
972 # This e.g. allows stricter RBAC rules which are limited to the resources meant for the sidecars.
973 # resourceName: "secret/alerts-1,configmap/alerts-0"
976 # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
977 # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
978 # watchServerTimeout: 3600
980 # watchClientTimeout: is a client-side timeout, configuring your local socket.
981 # If you have a network outage dropping all packets with no RST/FIN,
982 # this is how long your client waits before realizing & dropping the connection.
983 # defaults to 66sec (sic!)
984 # watchClientTimeout: 60
986 # maxTotalRetries: Total number of retries to allow for any http request.
987 # Takes precedence over other counts. Applies to all requests to reloadURL and k8s api requests.
988 # Set to 0 to fail on the first retry.
991 # maxConnectRetries: How many connection-related errors to retry on for any http request.
992 # These are errors raised before the request is sent to the remote server, which we assume has not triggered the server to process the request.
993 # Applies to all requests to reloadURL and k8s api requests.
994 # Set to 0 to fail on the first retry of this type.
995 # maxConnectRetries: 10
997 # maxReadRetries: How many times to retry on read errors for any http request
998 # These errors are raised after the request was sent to the server, so the request may have side-effects.
999 # Applies to all requests to reloadURL and k8s api requests.
1000 # Set to 0 to fail on the first retry of this type.
1003 # Endpoint to send request to reload alerts
1004 reloadURL: "http://localhost:3000/api/admin/provisioning/alerting/reload"
1005 # Absolute path to a script to execute after a configmap got reloaded.
1006 # It runs before calls to REQ_URI. If the file is not executable it will be passed to sh.
1007 # Otherwise, it's executed as is. Shebangs known to work are #!/bin/sh and #!/usr/bin/env python
1010 # This is needed if skipReload is true, to load any alerts defined at startup time.
1011 # Deploy the alert sidecar as an initContainer.
1013 # Use native sidecar https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/
1014 # restartPolicy: Always
1015 # # only applies to native sidecars
1020 # initialDelaySeconds: 5
1022 # failureThreshold: 60 # 5 minutes
1023 # Additional alerts sidecar volume mounts
1025 # Sets the size limit of the alert sidecar emptyDir volume
1029 # Additional environment variables for the dashboards sidecar
1031 ## "valueFrom" environment variable references that will be added to deployment pods. Name is templated.
1032 ## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#envvarsource-v1-core
1033 ## Renders in container spec as:
1038 ## <value rendered as YAML>
1042 # name: configmap-name
1044 # Do not reprocess already processed unchanged resources on k8s API reconnect.
1045 # ignoreAlreadyProcessed: true
1047 # label that the configmaps with dashboards are marked with (can be templated)
1048 label: grafana_dashboard
1049 # value of label that the configmaps with dashboards are set to (can be templated)
1051 # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
1053 # folder in the pod that should hold the collected dashboards (unless `defaultFolderName` is set)
1054 folder: /tmp/dashboards
1055 # The default folder name, it will create a subfolder under the `folder` and put dashboards in there instead
1056 defaultFolderName: null
1057 # Namespaces list. If specified, the sidecar will search for config-maps/secrets inside these namespaces.
1058 # Otherwise the namespace in which the sidecar is running will be used.
1059 # It's also possible to specify ALL to search in all namespaces.
1060 searchNamespace: null
1061 # Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds.
1063 # search in configmap, secret or both
1065 # If specified, the sidecar will look for annotation with this name to create folder and put graph here.
1066 # You can use this parameter together with `provider.foldersFromFilesStructure`to annotate configmaps and create folder structure.
1067 folderAnnotation: null
1069 # resourceName: comma separated list of resource names to be fetched/checked by this sidecar.
1070 # per default all resources of the type defined in {{ .Values.sidecar.dashboards.resource }} will be checked.
1071 # This e.g. allows stricter RBAC rules which are limited to the resources meant for the sidecars.
1072 # resourceName: "secret/dashboards-0,configmap/dashboards-1"
1075 # maxTotalRetries: Total number of retries to allow for any http request.
1076 # Takes precedence over other counts. Applies to all requests to reloadURL and k8s api requests.
1077 # Set to 0 to fail on the first retry.
1078 # maxTotalRetries: 5
1080 # maxConnectRetries: How many connection-related errors to retry on for any http request.
1081 # These are errors raised before the request is sent to the remote server, which we assume has not triggered the server to process the request.
1082 # Applies to all requests to reloadURL and k8s api requests.
1083 # Set to 0 to fail on the first retry of this type.
1084 # maxConnectRetries: 10
1086 # maxReadRetries: How many times to retry on read errors for any http request
1087 # These errors are raised after the request was sent to the server, so the request may have side-effects.
1088 # Applies to all requests to reloadURL and k8s api requests.
1089 # Set to 0 to fail on the first retry of this type.
1092 # Endpoint to send request to reload alerts
1093 reloadURL: "http://localhost:3000/api/admin/provisioning/dashboards/reload"
1094 # Absolute path to a script to execute after a configmap got reloaded.
1095 # It runs before calls to REQ_URI. If the file is not executable it will be passed to sh.
1096 # Otherwise, it's executed as is. Shebangs known to work are #!/bin/sh and #!/usr/bin/env python
1099 # This is needed if skipReload is true, to load any dashboards defined at startup time.
1100 # Deploy the dashboard sidecar as an initContainer.
1101 initDashboards: false
1102 # Use native sidecar https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/
1103 # restartPolicy: Always
1104 # # only applies to native sidecars
1109 # initialDelaySeconds: 5
1111 # failureThreshold: 60 # 5 minutes
1112 # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
1113 # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
1114 # watchServerTimeout: 3600
1116 # watchClientTimeout: is a client-side timeout, configuring your local socket.
1117 # If you have a network outage dropping all packets with no RST/FIN,
1118 # this is how long your client waits before realizing & dropping the connection.
1119 # defaults to 66sec (sic!)
1120 # watchClientTimeout: 60
1122 # provider configuration that lets grafana manage the dashboards
1124 # name of the provider, should be unique
1125 name: sidecarProvider
1126 # orgid as configured in grafana
1128 # folder in which the dashboards should be imported in grafana
1130 # <string> folder UID. will be automatically generated if not specified
1132 # type of the provider
1134 # disableDelete to activate a import-only behaviour
1135 disableDelete: false
1136 # allow updating provisioned dashboards from the UI
1137 allowUiUpdates: false
1138 # allow Grafana to replicate dashboard structure from filesystem
1139 foldersFromFilesStructure: false
1140 # Additional dashboards sidecar volume mounts
1142 # Sets the size limit of the dashboard sidecar emptyDir volume
1146 # Additional environment variables for the datasourcessidecar
1148 ## "valueFrom" environment variable references that will be added to deployment pods. Name is templated.
1149 ## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#envvarsource-v1-core
1150 ## Renders in container spec as:
1155 ## <value rendered as YAML>
1159 # name: configmap-name
1161 # Do not reprocess already processed unchanged resources on k8s API reconnect.
1162 # ignoreAlreadyProcessed: true
1163 # label that the configmaps with datasources are marked with (can be templated)
1164 label: grafana_datasource
1165 # value of label that the configmaps with datasources are set to (can be templated)
1167 # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
1169 # If specified, the sidecar will search for datasource config-maps inside this namespace.
1170 # Otherwise the namespace in which the sidecar is running will be used.
1171 # It's also possible to specify ALL to search in all namespaces
1172 searchNamespace: null
1173 # Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds.
1175 # search in configmap, secret or both
1178 # resourceName: comma separated list of resource names to be fetched/checked by this sidecar.
1179 # per default all resources of the type defined in {{ .Values.sidecar.datasources.resource }} will be checked.
1180 # This e.g. allows stricter RBAC rules which are limited to the resources meant for the sidecars.
1181 # resourceName: "secret/datasources-0,configmap/datasources-15"
1184 # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
1185 # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
1186 # watchServerTimeout: 3600
1188 # watchClientTimeout: is a client-side timeout, configuring your local socket.
1189 # If you have a network outage dropping all packets with no RST/FIN,
1190 # this is how long your client waits before realizing & dropping the connection.
1191 # defaults to 66sec (sic!)
1192 # watchClientTimeout: 60
1194 # maxTotalRetries: Total number of retries to allow for any http request.
1195 # Takes precedence over other counts. Applies to all requests to reloadURL and k8s api requests.
1196 # Set to 0 to fail on the first retry.
1197 # maxTotalRetries: 5
1199 # maxConnectRetries: How many connection-related errors to retry on for any http request.
1200 # These are errors raised before the request is sent to the remote server, which we assume has not triggered the server to process the request.
1201 # Applies to all requests to reloadURL and k8s api requests.
1202 # Set to 0 to fail on the first retry of this type.
1203 # maxConnectRetries: 10
1205 # maxReadRetries: How many times to retry on read errors for any http request
1206 # These errors are raised after the request was sent to the server, so the request may have side-effects.
1207 # Applies to all requests to reloadURL and k8s api requests.
1208 # Set to 0 to fail on the first retry of this type.
1211 # Endpoint to send request to reload datasources
1212 reloadURL: "http://localhost:3000/api/admin/provisioning/datasources/reload"
1213 # Absolute path to a script to execute after a configmap got reloaded.
1214 # It runs before calls to REQ_URI. If the file is not executable it will be passed to sh.
1215 # Otherwise, it's executed as is. Shebangs known to work are #!/bin/sh and #!/usr/bin/env python
1218 # This is needed if skipReload is true, to load any datasources defined at startup time.
1219 # Deploy the datasources sidecar as an initContainer.
1220 initDatasources: false
1221 # Use native sidecar https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/
1222 # restartPolicy: Always
1223 # # only applies to native sidecars
1228 # initialDelaySeconds: 5
1230 # failureThreshold: 60 # 5 minutes
1231 # Additional datasources sidecar volume mounts
1233 # Sets the size limit of the datasource sidecar emptyDir volume
1237 # Additional environment variables for the plugins sidecar
1239 # Do not reprocess already processed unchanged resources on k8s API reconnect.
1240 # ignoreAlreadyProcessed: true
1241 # label that the configmaps with plugins are marked with (can be templated)
1242 label: grafana_plugin
1243 # value of label that the configmaps with plugins are set to (can be templated)
1245 # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
1247 # If specified, the sidecar will search for plugin config-maps inside this namespace.
1248 # Otherwise the namespace in which the sidecar is running will be used.
1249 # It's also possible to specify ALL to search in all namespaces
1250 searchNamespace: null
1251 # Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds.
1253 # search in configmap, secret or both
1256 # resourceName: comma separated list of resource names to be fetched/checked by this sidecar.
1257 # per default all resources of the type defined in {{ .Values.sidecar.plugins.resource }} will be checked.
1258 # This e.g. allows stricter RBAC rules which are limited to the resources meant for the sidecars.
1259 # resourceName: "secret/plugins-0,configmap/plugins-1"
1262 # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
1263 # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
1264 # watchServerTimeout: 3600
1266 # watchClientTimeout: is a client-side timeout, configuring your local socket.
1267 # If you have a network outage dropping all packets with no RST/FIN,
1268 # this is how long your client waits before realizing & dropping the connection.
1269 # defaults to 66sec (sic!)
1270 # watchClientTimeout: 60
1272 # maxTotalRetries: Total number of retries to allow for any http request.
1273 # Takes precedence over other counts. Applies to all requests to reloadURL and k8s api requests.
1274 # Set to 0 to fail on the first retry.
1275 # maxTotalRetries: 5
1277 # maxConnectRetries: How many connection-related errors to retry on for any http request.
1278 # These are errors raised before the request is sent to the remote server, which we assume has not triggered the server to process the request.
1279 # Applies to all requests to reloadURL and k8s api requests.
1280 # Set to 0 to fail on the first retry of this type.
1281 # maxConnectRetries: 10
1283 # maxReadRetries: How many times to retry on read errors for any http request
1284 # These errors are raised after the request was sent to the server, so the request may have side-effects.
1285 # Applies to all requests to reloadURL and k8s api requests.
1286 # Set to 0 to fail on the first retry of this type.
1289 # Endpoint to send request to reload plugins
1290 reloadURL: "http://localhost:3000/api/admin/provisioning/plugins/reload"
1291 # Absolute path to a script to execute after a configmap got reloaded.
1292 # It runs before calls to REQ_URI. If the file is not executable it will be passed to sh.
1293 # Otherwise, it's executed as is. Shebangs known to work are #!/bin/sh and #!/usr/bin/env python
1296 # Deploy the datasource sidecar as an initContainer in addition to a container.
1297 # This is needed if skipReload is true, to load any plugins defined at startup time.
1299 # Additional plugins sidecar volume mounts
1301 # Sets the size limit of the plugin sidecar emptyDir volume
1305 # Additional environment variables for the notifierssidecar
1307 # Do not reprocess already processed unchanged resources on k8s API reconnect.
1308 # ignoreAlreadyProcessed: true
1309 # label that the configmaps with notifiers are marked with (can be templated)
1310 label: grafana_notifier
1311 # value of label that the configmaps with notifiers are set to (can be templated)
1313 # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
1315 # If specified, the sidecar will search for notifier config-maps inside this namespace.
1316 # Otherwise the namespace in which the sidecar is running will be used.
1317 # It's also possible to specify ALL to search in all namespaces
1318 searchNamespace: null
1319 # Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds.
1321 # search in configmap, secret or both
1324 # resourceName: comma separated list of resource names to be fetched/checked by this sidecar.
1325 # per default all resources of the type defined in {{ .Values.sidecar.notifiers.resource }} will be checked.
1326 # This e.g. allows stricter RBAC rules which are limited to the resources meant for the sidecars.
1327 # resourceName: "secret/notifiers-2,configmap/notifiers-1"
1330 # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
1331 # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
1332 # watchServerTimeout: 3600
1334 # watchClientTimeout: is a client-side timeout, configuring your local socket.
1335 # If you have a network outage dropping all packets with no RST/FIN,
1336 # this is how long your client waits before realizing & dropping the connection.
1337 # defaults to 66sec (sic!)
1338 # watchClientTimeout: 60
1340 # maxTotalRetries: Total number of retries to allow for any http request.
1341 # Takes precedence over other counts. Applies to all requests to reloadURL and k8s api requests.
1342 # Set to 0 to fail on the first retry.
1343 # maxTotalRetries: 5
1345 # maxConnectRetries: How many connection-related errors to retry on for any http request.
1346 # These are errors raised before the request is sent to the remote server, which we assume has not triggered the server to process the request.
1347 # Applies to all requests to reloadURL and k8s api requests.
1348 # Set to 0 to fail on the first retry of this type.
1349 # maxConnectRetries: 10
1351 # maxReadRetries: How many times to retry on read errors for any http request
1352 # These errors are raised after the request was sent to the server, so the request may have side-effects.
1353 # Applies to all requests to reloadURL and k8s api requests.
1354 # Set to 0 to fail on the first retry of this type.
1357 # Endpoint to send request to reload notifiers
1358 reloadURL: "http://localhost:3000/api/admin/provisioning/notifications/reload"
1359 # Absolute path to a script to execute after a configmap got reloaded.
1360 # It runs before calls to REQ_URI. If the file is not executable it will be passed to sh.
1361 # Otherwise, it's executed as is. Shebangs known to work are #!/bin/sh and #!/usr/bin/env python
1364 # Deploy the notifier sidecar as an initContainer in addition to a container.
1365 # This is needed if skipReload is true, to load any notifiers defined at startup time.
1366 initNotifiers: false
1367 # Use native sidecar https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/
1368 # restartPolicy: Always
1369 # # only applies to native sidecars
1374 # initialDelaySeconds: 5
1376 # failureThreshold: 60 # 5 minutes
1377 # Additional notifiers sidecar volume mounts
1379 # Sets the size limit of the notifier sidecar emptyDir volume
1381## Override the deployment namespace
1383namespaceOverride: ""
1384## Number of old ReplicaSets to retain
1386revisionHistoryLimit: 10
1387## Add a seperate remote image renderer deployment/service
1389 deploymentStrategy: {}
1390 # Enable the image-renderer deployment & service
1400 # The url of remote image renderer if it is not in the same namespace with the grafana instance
1402 # The callback url of grafana instances if it is not in the same namespace with the remote image renderer
1403 renderingCallbackURL: ""
1405 # -- The Docker registry
1407 # image-renderer Image repository
1408 repository: chainguard-private/grafana-image-renderer
1409 # image-renderer Image tag
1411 # image-renderer Image sha (optional)
1412 sha: sha256:dfa6a6377438e6788fc1b32aa969a31ea6019d3c4c5854e3a1035d4dac1850e1
1413 # image-renderer Image pull secrets (optional)
1415 # image-renderer ImagePullPolicy
1417 # extra environment variables
1419 HTTP_HOST: "0.0.0.0"
1420 # Fixes "Error: Failed to launch the browser process!\nchrome_crashpad_handler: --database is required"
1421 XDG_CONFIG_HOME: /tmp/.chromium
1422 XDG_CACHE_HOME: /tmp/.chromium
1423 # RENDERING_ARGS: --no-sandbox,--disable-gpu,--window-size=1280x758
1424 # RENDERING_MODE: clustered
1425 # IGNORE_HTTPS_ERRORS: true
1426 ## "valueFrom" environment variable references that will be added to deployment pods. Name is templated.
1427 ## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#envvarsource-v1-core
1428 ## Renders in container spec as:
1433 ## <value rendered as YAML>
1437 # name: configmap-name
1440 # image-renderer deployment serviceAccount
1441 serviceAccountName: ""
1442 automountServiceAccountToken: false
1443 # image-renderer deployment hostUsers
1445 # image-renderer deployment securityContext
1447 # image-renderer deployment container securityContext
1448 containerSecurityContext:
1450 type: RuntimeDefault
1453 allowPrivilegeEscalation: false
1454 readOnlyRootFilesystem: true
1455 ## image-renderer pod annotation
1457 # image-renderer deployment Host Aliases
1459 # image-renderer deployment priority class
1460 priorityClassName: ''
1462 # Enable the image-renderer service
1464 # image-renderer service port name
1466 # image-renderer service port used by both service and deployment
1469 # Adds the appProtocol field to the image-renderer service. This allows to work with istio protocol selection. Ex: "http" or "tcp"
1472 ## If true, a ServiceMonitor CRD is created for a prometheus operator
1473 ## https://github.com/coreos/prometheus-operator
1477 # namespace: monitoring (defaults to use the namespace this chart is deployed to)
1484 # See: https://doc.crds.dev/github.com/prometheus-operator/kube-prometheus/monitoring.coreos.com/ServiceMonitor/v1@v0.11.0#spec-targetLabels
1488 # If https is enabled in Grafana, this needs to be set as 'https' to correctly configure the callback used in Grafana
1489 grafanaProtocol: http
1490 # In case a sub_path is used this needs to be added to the image renderer callback
1492 # name of the image-renderer port on the pod
1494 # number of image-renderer replica sets to keep
1495 revisionHistoryLimit: 10
1497 # Enable a NetworkPolicy to limit inbound traffic to only the created grafana pods
1499 # Enable a NetworkPolicy to limit outbound traffic to only the created grafana pods
1501 # Allow additional services to access image-renderer (eg. Prometheus operator when ServiceMonitor is enabled)
1502 extraIngressSelectors: []
1510 ## Node labels for pod assignment
1511 ## ref: https://kubernetes.io/docs/user-guide/node-selection/
1514 ## Tolerations for pod assignment
1515 ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
1518 ## Affinity for pod assignment (evaluated as template)
1519 ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
1522 ## Use an alternate scheduler, e.g. "stork".
1523 ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
1525 # schedulerName: "default-scheduler"
1527 # Extra configmaps to mount in image-renderer pods
1528 extraConfigmapMounts: []
1529 # Extra secrets to mount in image-renderer pods
1530 extraSecretMounts: []
1531 # Extra volumes to mount in image-renderer pods
1532 extraVolumeMounts: []
1533 # Extra volumes for image-renderer pods
1536 ## @param networkPolicy.enabled Enable creation of NetworkPolicy resources. Only Ingress traffic is filtered for now.
1539 ## @param networkPolicy.allowExternal Don't require client label for connections
1540 ## The Policy model to apply. When set to false, only pods with the correct
1541 ## client label will have network access to grafana port defined.
1542 ## When true, grafana will accept connections from any source
1543 ## (with the correct destination port).
1546 ## @param networkPolicy.ingress When true enables the creation
1547 ## an ingress network policy
1550 ## @param networkPolicy.explicitNamespacesSelector A Kubernetes LabelSelector to explicitly select namespaces from which traffic could be allowed
1551 ## If explicitNamespacesSelector is missing or set to {}, only client Pods that are in the networkPolicy's namespace
1552 ## and that match other criteria, the ones that have the good label, can reach the grafana.
1553 ## But sometimes, we want the grafana to be accessible to clients from other namespaces, in this case, we can use this
1554 ## LabelSelector to select these namespaces, note that the networkPolicy's namespace should also be explicitly added.
1557 ## explicitNamespacesSelector:
1560 ## matchExpressions:
1561 ## - {key: role, operator: In, values: [frontend]}
1563 explicitNamespacesSelector: {}
1571 ## @param networkPolicy.egress.enabled When enabled, an egress network policy will be
1572 ## created allowing grafana to connect to external data sources from kubernetes cluster.
1575 ## @param networkPolicy.egress.blockDNSResolution When enabled, DNS resolution will be blocked
1576 ## for all pods in the grafana namespace.
1577 blockDNSResolution: false
1579 ## @param networkPolicy.egress.ports Add individual ports to be allowed by the egress
1581 ## Add ports to the egress by specifying - port: <port number>
1586 ## @param networkPolicy.egress.to Allow egress traffic to specific destinations
1588 ## Add destinations to the egress by specifying - ipBlock: <CIDR>
1591 ## - namespaceSelector:
1592 ## matchExpressions:
1593 ## - {key: role, operator: In, values: [grafana]}
1599# Enable backward compatibility of kubernetes where version below 1.13 doesn't have the enableServiceLinks option
1600enableKubeBackwardCompatibility: false
1601useStatefulSet: false
1602# extraObjects could be utilized to add dynamic manifests via values
1606# - apiVersion: kubernetes-client.io/v1
1607# kind: ExternalSecret
1609# name: grafana-secrets-{{ .Release.Name }}
1611# backendType: gcpSecretsManager
1613# - key: grafana-admin-password
1614# name: adminPassword
1615# Alternatively, you can use strings, which lets you use additional templating features:
1618# apiVersion: kubernetes-client.io/v1
1619# kind: ExternalSecret
1621# name: grafana-secrets-{{ .Release.Name }}
1623# backendType: gcpSecretsManager
1625# - key: grafana-admin-password
1626# name: {{ include "some-other-template" }}
1628# assertNoLeakedSecrets is a helper function defined in _helpers.tpl that checks if secret
1629# values are not exposed in the rendered grafana.ini configmap. It is enabled by default.
1631# To pass values into grafana.ini without exposing them in a configmap, use variable expansion:
1632# https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#variable-expansion
1634# Alternatively, if you wish to allow secret values to be exposed in the rendered grafana.ini configmap,
1635# you can disable this check by setting assertNoLeakedSecrets to false.
1636assertNoLeakedSecrets: true