123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269 |
- global:
- # -- Overrides the Docker registry globally for all images
- imageRegistry: null
- # To help compatibility with other charts which use global.imagePullSecrets.
- # Allow either an array of {name: pullSecret} maps (k8s-style), or an array of strings (more common helm-style).
- # Can be tempalted.
- # global:
- # imagePullSecrets:
- # - name: pullSecret1
- # - name: pullSecret2
- # or
- # global:
- # imagePullSecrets:
- # - pullSecret1
- # - pullSecret2
- imagePullSecrets: []
- rbac:
- create: true
- ## Use an existing ClusterRole/Role (depending on rbac.namespaced false/true)
- # useExistingRole: name-of-some-role
- # useExistingClusterRole: name-of-some-clusterRole
- pspEnabled: false
- pspUseAppArmor: false
- namespaced: false
- extraRoleRules: []
- # - apiGroups: []
- # resources: []
- # verbs: []
- extraClusterRoleRules: []
- # - apiGroups: []
- # resources: []
- # verbs: []
- serviceAccount:
- create: true
- name:
- nameTest:
- ## ServiceAccount labels.
- labels: {}
- ## Service account annotations. Can be templated.
- # annotations:
- # eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here
- autoMount: true
- replicas: 1
- ## Create a headless service for the deployment
- headlessService: false
- ## Create HorizontalPodAutoscaler object for deployment type
- #
- autoscaling:
- enabled: false
- minReplicas: 1
- maxReplicas: 5
- targetCPU: "60"
- targetMemory: ""
- behavior: {}
- ## See `kubectl explain poddisruptionbudget.spec` for more
- ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
- podDisruptionBudget: {}
- # apiVersion: ""
- # minAvailable: 1
- # maxUnavailable: 1
- ## See `kubectl explain deployment.spec.strategy` for more
- ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
- deploymentStrategy:
- type: RollingUpdate
- readinessProbe:
- httpGet:
- path: /api/health
- port: 3000
- livenessProbe:
- httpGet:
- path: /api/health
- port: 3000
- initialDelaySeconds: 60
- timeoutSeconds: 30
- failureThreshold: 10
- ## Use an alternate scheduler, e.g. "stork".
- ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
- ##
- # schedulerName: "default-scheduler"
- image:
- # -- The Docker registry
- registry: docker.io
- # -- Docker image repository
- repository: grafana/grafana
- # Overrides the Grafana image tag whose default is the chart appVersion
- tag: ""
- sha: ""
- pullPolicy: IfNotPresent
- ## Optionally specify an array of imagePullSecrets.
- ## Secrets must be manually created in the namespace.
- ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
- ## Can be templated.
- ##
- pullSecrets: []
- # - myRegistrKeySecretName
- testFramework:
- enabled: true
- image:
- # -- The Docker registry
- registry: docker.io
- repository: bats/bats
- tag: "v1.4.1"
- imagePullPolicy: IfNotPresent
- securityContext: {}
- securityContext:
- runAsNonRoot: true
- runAsUser: 472
- runAsGroup: 472
- fsGroup: 472
- containerSecurityContext:
- allowPrivilegeEscalation: false
- capabilities:
- drop:
- - ALL
- seccompProfile:
- type: RuntimeDefault
- # Enable creating the grafana configmap
- createConfigmap: true
- # Extra configmaps to mount in grafana pods
- # Values are templated.
- extraConfigmapMounts: []
- # - name: certs-configmap
- # mountPath: /etc/grafana/ssl/
- # subPath: certificates.crt # (optional)
- # configMap: certs-configmap
- # readOnly: true
- extraEmptyDirMounts: []
- # - name: provisioning-notifiers
- # mountPath: /etc/grafana/provisioning/notifiers
- # Apply extra labels to common labels.
- extraLabels: {}
- ## Assign a PriorityClassName to pods if set
- # priorityClassName:
- downloadDashboardsImage:
- # -- The Docker registry
- registry: docker.io
- repository: curlimages/curl
- tag: 7.85.0
- sha: ""
- pullPolicy: IfNotPresent
- downloadDashboards:
- env: {}
- envFromSecret: ""
- resources: {}
- securityContext:
- allowPrivilegeEscalation: false
- capabilities:
- drop:
- - ALL
- seccompProfile:
- type: RuntimeDefault
- envValueFrom: {}
- # ENV_NAME:
- # configMapKeyRef:
- # name: configmap-name
- # key: value_key
- ## Pod Annotations
- # podAnnotations: {}
- ## Pod Labels
- # podLabels: {}
- podPortName: grafana
- gossipPortName: gossip
- ## Deployment annotations
- # annotations: {}
- ## Expose the grafana service to be accessed from outside the cluster (LoadBalancer service).
- ## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
- ## ref: http://kubernetes.io/docs/user-guide/services/
- ##
- service:
- enabled: true
- type: ClusterIP
- port: 80
- targetPort: 3000
- # targetPort: 4181 To be used with a proxy extraContainer
- ## Service annotations. Can be templated.
- annotations: {}
- labels: {}
- portName: service
- # Adds the appProtocol field to the service. This allows to work with istio protocol selection. Ex: "http" or "tcp"
- appProtocol: ""
- serviceMonitor:
- ## If true, a ServiceMonitor CRD is created for a prometheus operator
- ## https://github.com/coreos/prometheus-operator
- ##
- enabled: false
- path: /metrics
- # namespace: monitoring (defaults to use the namespace this chart is deployed to)
- labels: {}
- interval: 30s
- scheme: http
- tlsConfig: {}
- scrapeTimeout: 30s
- relabelings: []
- metricRelabelings: []
- targetLabels: []
- extraExposePorts: []
- # - name: keycloak
- # port: 8080
- # targetPort: 8080
- # overrides pod.spec.hostAliases in the grafana deployment's pods
- hostAliases: []
- # - ip: "1.2.3.4"
- # hostnames:
- # - "my.host.com"
- ingress:
- enabled: false
- # For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName
- # See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress
- # ingressClassName: nginx
- # Values can be templated
- annotations: {}
- # kubernetes.io/ingress.class: nginx
- # kubernetes.io/tls-acme: "true"
- labels: {}
- path: /
- # pathType is only for k8s >= 1.1=
- pathType: Prefix
- hosts:
- - chart-example.local
- ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
- extraPaths: []
- # - path: /*
- # backend:
- # serviceName: ssl-redirect
- # servicePort: use-annotation
- ## Or for k8s > 1.19
- # - path: /*
- # pathType: Prefix
- # backend:
- # service:
- # name: ssl-redirect
- # port:
- # name: use-annotation
- tls: []
- # - secretName: chart-example-tls
- # hosts:
- # - chart-example.local
- resources: {}
- # limits:
- # cpu: 100m
- # memory: 128Mi
- # requests:
- # cpu: 100m
- # memory: 128Mi
- ## Node labels for pod assignment
- ## ref: https://kubernetes.io/docs/user-guide/node-selection/
- #
- nodeSelector: {}
- ## Tolerations for pod assignment
- ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
- ##
- tolerations: []
- ## Affinity for pod assignment (evaluated as template)
- ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
- ##
- affinity: {}
- ## Topology Spread Constraints
- ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
- ##
- topologySpreadConstraints: []
- ## Additional init containers (evaluated as template)
- ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
- ##
- extraInitContainers: []
- ## Enable an Specify container in extraContainers. This is meant to allow adding an authentication proxy to a grafana pod
- extraContainers: ""
- # extraContainers: |
- # - name: proxy
- # image: quay.io/gambol99/keycloak-proxy:latest
- # args:
- # - -provider=github
- # - -client-id=
- # - -client-secret=
- # - -github-org=<ORG_NAME>
- # - -email-domain=*
- # - -cookie-secret=
- # - -http-address=http://0.0.0.0:4181
- # - -upstream-url=http://127.0.0.1:3000
- # ports:
- # - name: proxy-web
- # containerPort: 4181
- ## Volumes that can be used in init containers that will not be mounted to deployment pods
- extraContainerVolumes: []
- # - name: volume-from-secret
- # secret:
- # secretName: secret-to-mount
- # - name: empty-dir-volume
- # emptyDir: {}
- ## Enable persistence using Persistent Volume Claims
- ## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
- ##
- persistence:
- type: pvc
- enabled: false
- # storageClassName: default
- accessModes:
- - ReadWriteOnce
- size: 10Gi
- # annotations: {}
- finalizers:
- - kubernetes.io/pvc-protection
- # selectorLabels: {}
- ## Sub-directory of the PV to mount. Can be templated.
- # subPath: ""
- ## Name of an existing PVC. Can be templated.
- # existingClaim:
- ## Extra labels to apply to a PVC.
- extraPvcLabels: {}
- ## If persistence is not enabled, this allows to mount the
- ## local storage in-memory to improve performance
- ##
- inMemory:
- enabled: false
- ## The maximum usage on memory medium EmptyDir would be
- ## the minimum value between the SizeLimit specified
- ## here and the sum of memory limits of all containers in a pod
- ##
- # sizeLimit: 300Mi
- initChownData:
- ## If false, data ownership will not be reset at startup
- ## This allows the grafana-server to be run with an arbitrary user
- ##
- enabled: true
- ## initChownData container image
- ##
- image:
- # -- The Docker registry
- registry: docker.io
- repository: library/busybox
- tag: "1.31.1"
- sha: ""
- pullPolicy: IfNotPresent
- ## initChownData resource requests and limits
- ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
- ##
- resources: {}
- # limits:
- # cpu: 100m
- # memory: 128Mi
- # requests:
- # cpu: 100m
- # memory: 128Mi
- securityContext:
- runAsNonRoot: false
- runAsUser: 0
- seccompProfile:
- type: RuntimeDefault
- capabilities:
- add:
- - CHOWN
- # Administrator credentials when not using an existing secret (see below)
- adminUser: admin
- # adminPassword: strongpassword
- # Use an existing secret for the admin user.
- admin:
- ## Name of the secret. Can be templated.
- existingSecret: ""
- userKey: admin-user
- passwordKey: admin-password
- ## Define command to be executed at startup by grafana container
- ## Needed if using `vault-env` to manage secrets (ref: https://banzaicloud.com/blog/inject-secrets-into-pods-vault/)
- ## Default is "run.sh" as defined in grafana's Dockerfile
- # command:
- # - "sh"
- # - "/run.sh"
- ## Optionally define args if command is used
- ## Needed if using `hashicorp/envconsul` to manage secrets
- ## By default no arguments are set
- # args:
- # - "-secret"
- # - "secret/grafana"
- # - "./grafana"
- ## Extra environment variables that will be pass onto deployment pods
- ##
- ## to provide grafana with access to CloudWatch on AWS EKS:
- ## 1. create an iam role of type "Web identity" with provider oidc.eks.* (note the provider for later)
- ## 2. edit the "Trust relationships" of the role, add a line inside the StringEquals clause using the
- ## same oidc eks provider as noted before (same as the existing line)
- ## also, replace NAMESPACE and prometheus-operator-grafana with the service account namespace and name
- ##
- ## "oidc.eks.us-east-1.amazonaws.com/id/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:sub": "system:serviceaccount:NAMESPACE:prometheus-operator-grafana",
- ##
- ## 3. attach a policy to the role, you can use a built in policy called CloudWatchReadOnlyAccess
- ## 4. use the following env: (replace 123456789000 and iam-role-name-here with your aws account number and role name)
- ##
- ## env:
- ## AWS_ROLE_ARN: arn:aws:iam::123456789000:role/iam-role-name-here
- ## AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
- ## AWS_REGION: us-east-1
- ##
- ## 5. uncomment the EKS section in extraSecretMounts: below
- ## 6. uncomment the annotation section in the serviceAccount: above
- ## make sure to replace arn:aws:iam::123456789000:role/iam-role-name-here with your role arn
- env: {}
- ## "valueFrom" environment variable references that will be added to deployment pods. Name is templated.
- ## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#envvarsource-v1-core
- ## Renders in container spec as:
- ## env:
- ## ...
- ## - name: <key>
- ## valueFrom:
- ## <value rendered as YAML>
- envValueFrom: {}
- # ENV_NAME:
- # configMapKeyRef:
- # name: configmap-name
- # key: value_key
- ## The name of a secret in the same kubernetes namespace which contain values to be added to the environment
- ## This can be useful for auth tokens, etc. Value is templated.
- envFromSecret: ""
- ## Sensible environment variables that will be rendered as new secret object
- ## This can be useful for auth tokens, etc.
- ## If the secret values contains "{{", they'll need to be properly escaped so that they are not interpreted by Helm
- ## ref: https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function
- envRenderSecret: {}
- ## The names of secrets in the same kubernetes namespace which contain values to be added to the environment
- ## Each entry should contain a name key, and can optionally specify whether the secret must be defined with an optional key.
- ## Name is templated.
- envFromSecrets: []
- ## - name: secret-name
- ## optional: true
- ## The names of conifgmaps in the same kubernetes namespace which contain values to be added to the environment
- ## Each entry should contain a name key, and can optionally specify whether the configmap must be defined with an optional key.
- ## Name is templated.
- ## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#configmapenvsource-v1-core
- envFromConfigMaps: []
- ## - name: configmap-name
- ## optional: true
- # Inject Kubernetes services as environment variables.
- # See https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#environment-variables
- enableServiceLinks: true
- ## Additional grafana server secret mounts
- # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
- extraSecretMounts: []
- # - name: secret-files
- # mountPath: /etc/secrets
- # secretName: grafana-secret-files
- # readOnly: true
- # subPath: ""
- #
- # for AWS EKS (cloudwatch) use the following (see also instruction in env: above)
- # - name: aws-iam-token
- # mountPath: /var/run/secrets/eks.amazonaws.com/serviceaccount
- # readOnly: true
- # projected:
- # defaultMode: 420
- # sources:
- # - serviceAccountToken:
- # audience: sts.amazonaws.com
- # expirationSeconds: 86400
- # path: token
- #
- # for CSI e.g. Azure Key Vault use the following
- # - name: secrets-store-inline
- # mountPath: /run/secrets
- # readOnly: true
- # csi:
- # driver: secrets-store.csi.k8s.io
- # readOnly: true
- # volumeAttributes:
- # secretProviderClass: "akv-grafana-spc"
- # nodePublishSecretRef: # Only required when using service principal mode
- # name: grafana-akv-creds # Only required when using service principal mode
- ## Additional grafana server volume mounts
- # Defines additional volume mounts.
- extraVolumeMounts: []
- # - name: extra-volume-0
- # mountPath: /mnt/volume0
- # readOnly: true
- # existingClaim: volume-claim
- # - name: extra-volume-1
- # mountPath: /mnt/volume1
- # readOnly: true
- # hostPath: /usr/shared/
- # - name: grafana-secrets
- # mountPath: /mnt/volume2
- # csi: true
- # data:
- # driver: secrets-store.csi.k8s.io
- # readOnly: true
- # volumeAttributes:
- # secretProviderClass: "grafana-env-spc"
- ## Container Lifecycle Hooks. Execute a specific bash command or make an HTTP request
- lifecycleHooks: {}
- # postStart:
- # exec:
- # command: []
- ## Pass the plugins you want installed as a list.
- ##
- plugins: []
- # - digrich-bubblechart-panel
- # - grafana-clock-panel
- ## You can also use other plugin download URL, as long as they are valid zip files,
- ## and specify the name of the plugin after the semicolon. Like this:
- # - https://grafana.com/api/plugins/marcusolsson-json-datasource/versions/1.3.2/download;marcusolsson-json-datasource
- ## Configure grafana datasources
- ## ref: http://docs.grafana.org/administration/provisioning/#datasources
- ##
- datasources: {}
- # datasources.yaml:
- # apiVersion: 1
- # datasources:
- # - name: Prometheus
- # type: prometheus
- # url: http://prometheus-prometheus-server
- # access: proxy
- # isDefault: true
- # - name: CloudWatch
- # type: cloudwatch
- # access: proxy
- # uid: cloudwatch
- # editable: false
- # jsonData:
- # authType: default
- # defaultRegion: us-east-1
- # deleteDatasources: []
- # - name: Prometheus
- ## Configure grafana alerting (can be templated)
- ## ref: http://docs.grafana.org/administration/provisioning/#alerting
- ##
- alerting: {}
- # rules.yaml:
- # apiVersion: 1
- # groups:
- # - orgId: 1
- # name: '{{ .Chart.Name }}_my_rule_group'
- # folder: my_first_folder
- # interval: 60s
- # rules:
- # - uid: my_id_1
- # title: my_first_rule
- # condition: A
- # data:
- # - refId: A
- # datasourceUid: '-100'
- # model:
- # conditions:
- # - evaluator:
- # params:
- # - 3
- # type: gt
- # operator:
- # type: and
- # query:
- # params:
- # - A
- # reducer:
- # type: last
- # type: query
- # datasource:
- # type: __expr__
- # uid: '-100'
- # expression: 1==0
- # intervalMs: 1000
- # maxDataPoints: 43200
- # refId: A
- # type: math
- # dashboardUid: my_dashboard
- # panelId: 123
- # noDataState: Alerting
- # for: 60s
- # annotations:
- # some_key: some_value
- # labels:
- # team: sre_team_1
- # contactpoints.yaml:
- # secret:
- # apiVersion: 1
- # contactPoints:
- # - orgId: 1
- # name: cp_1
- # receivers:
- # - uid: first_uid
- # type: pagerduty
- # settings:
- # integrationKey: XXX
- # severity: critical
- # class: ping failure
- # component: Grafana
- # group: app-stack
- # summary: |
- # {{ `{{ include "default.message" . }}` }}
- ## Configure notifiers
- ## ref: http://docs.grafana.org/administration/provisioning/#alert-notification-channels
- ##
- notifiers: {}
- # notifiers.yaml:
- # notifiers:
- # - name: email-notifier
- # type: email
- # uid: email1
- # # either:
- # org_id: 1
- # # or
- # org_name: Main Org.
- # is_default: true
- # settings:
- # addresses: an_email_address@example.com
- # delete_notifiers:
- ## Configure grafana dashboard providers
- ## ref: http://docs.grafana.org/administration/provisioning/#dashboards
- ##
- ## `path` must be /var/lib/grafana/dashboards/<provider_name>
- ##
- dashboardProviders: {}
- # dashboardproviders.yaml:
- # apiVersion: 1
- # providers:
- # - name: 'default'
- # orgId: 1
- # folder: ''
- # type: file
- # disableDeletion: false
- # editable: true
- # options:
- # path: /var/lib/grafana/dashboards/default
- ## Configure grafana dashboard to import
- ## NOTE: To use dashboards you must also enable/configure dashboardProviders
- ## ref: https://grafana.com/dashboards
- ##
- ## dashboards per provider, use provider name as key.
- ##
- dashboards: {}
- # default:
- # some-dashboard:
- # json: |
- # $RAW_JSON
- # custom-dashboard:
- # file: dashboards/custom-dashboard.json
- # prometheus-stats:
- # gnetId: 2
- # revision: 2
- # datasource: Prometheus
- # local-dashboard:
- # url: https://example.com/repository/test.json
- # token: ''
- # local-dashboard-base64:
- # url: https://example.com/repository/test-b64.json
- # token: ''
- # b64content: true
- # local-dashboard-gitlab:
- # url: https://example.com/repository/test-gitlab.json
- # gitlabToken: ''
- # local-dashboard-bitbucket:
- # url: https://example.com/repository/test-bitbucket.json
- # bearerToken: ''
- # local-dashboard-azure:
- # url: https://example.com/repository/test-azure.json
- # basic: ''
- # acceptHeader: '*/*'
- ## Reference to external ConfigMap per provider. Use provider name as key and ConfigMap name as value.
- ## A provider dashboards must be defined either by external ConfigMaps or in values.yaml, not in both.
- ## ConfigMap data example:
- ##
- ## data:
- ## example-dashboard.json: |
- ## RAW_JSON
- ##
- dashboardsConfigMaps: {}
- # default: ""
- ## Grafana's primary configuration
- ## NOTE: values in map will be converted to ini format
- ## ref: http://docs.grafana.org/installation/configuration/
- ##
- grafana.ini:
- paths:
- data: /var/lib/grafana/
- logs: /var/log/grafana
- plugins: /var/lib/grafana/plugins
- provisioning: /etc/grafana/provisioning
- analytics:
- check_for_updates: true
- log:
- mode: console
- grafana_net:
- url: https://grafana.net
- server:
- domain: "{{ if (and .Values.ingress.enabled .Values.ingress.hosts) }}{{ .Values.ingress.hosts | first }}{{ else }}''{{ end }}"
- ## grafana Authentication can be enabled with the following values on grafana.ini
- # server:
- # The full public facing url you use in browser, used for redirects and emails
- # root_url:
- # https://grafana.com/docs/grafana/latest/auth/github/#enable-github-in-grafana
- # auth.github:
- # enabled: false
- # allow_sign_up: false
- # scopes: user:email,read:org
- # auth_url: https://github.com/login/oauth/authorize
- # token_url: https://github.com/login/oauth/access_token
- # api_url: https://api.github.com/user
- # team_ids:
- # allowed_organizations:
- # client_id:
- # client_secret:
- ## LDAP Authentication can be enabled with the following values on grafana.ini
- ## NOTE: Grafana will fail to start if the value for ldap.toml is invalid
- # auth.ldap:
- # enabled: true
- # allow_sign_up: true
- # config_file: /etc/grafana/ldap.toml
- ## Grafana's LDAP configuration
- ## Templated by the template in _helpers.tpl
- ## NOTE: To enable the grafana.ini must be configured with auth.ldap.enabled
- ## ref: http://docs.grafana.org/installation/configuration/#auth-ldap
- ## ref: http://docs.grafana.org/installation/ldap/#configuration
- ldap:
- enabled: false
- # `existingSecret` is a reference to an existing secret containing the ldap configuration
- # for Grafana in a key `ldap-toml`.
- existingSecret: ""
- # `config` is the content of `ldap.toml` that will be stored in the created secret
- config: ""
- # config: |-
- # verbose_logging = true
- # [[servers]]
- # host = "my-ldap-server"
- # port = 636
- # use_ssl = true
- # start_tls = false
- # ssl_skip_verify = false
- # bind_dn = "uid=%s,ou=users,dc=myorg,dc=com"
- ## Grafana's SMTP configuration
- ## NOTE: To enable, grafana.ini must be configured with smtp.enabled
- ## ref: http://docs.grafana.org/installation/configuration/#smtp
- smtp:
- # `existingSecret` is a reference to an existing secret containing the smtp configuration
- # for Grafana.
- existingSecret: ""
- userKey: "user"
- passwordKey: "password"
- ## Sidecars that collect the configmaps with specified label and stores the included files them into the respective folders
- ## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
- sidecar:
- image:
- # -- The Docker registry
- registry: quay.io
- repository: kiwigrid/k8s-sidecar
- tag: 1.25.1
- sha: ""
- imagePullPolicy: IfNotPresent
- resources: {}
- # limits:
- # cpu: 100m
- # memory: 100Mi
- # requests:
- # cpu: 50m
- # memory: 50Mi
- securityContext:
- allowPrivilegeEscalation: false
- capabilities:
- drop:
- - ALL
- seccompProfile:
- type: RuntimeDefault
- # skipTlsVerify Set to true to skip tls verification for kube api calls
- # skipTlsVerify: true
- enableUniqueFilenames: false
- readinessProbe: {}
- livenessProbe: {}
- # Log level default for all sidecars. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL. Defaults to INFO
- # logLevel: INFO
- alerts:
- enabled: false
- # Additional environment variables for the alerts sidecar
- env: {}
- # Do not reprocess already processed unchanged resources on k8s API reconnect.
- # ignoreAlreadyProcessed: true
- # label that the configmaps with alert are marked with
- label: grafana_alert
- # value of label that the configmaps with alert are set to
- labelValue: ""
- # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
- # logLevel: INFO
- # If specified, the sidecar will search for alert config-maps inside this namespace.
- # Otherwise the namespace in which the sidecar is running will be used.
- # It's also possible to specify ALL to search in all namespaces
- searchNamespace: null
- # 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.
- watchMethod: WATCH
- # search in configmap, secret or both
- resource: both
- # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
- # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
- # watchServerTimeout: 3600
- #
- # watchClientTimeout: is a client-side timeout, configuring your local socket.
- # If you have a network outage dropping all packets with no RST/FIN,
- # this is how long your client waits before realizing & dropping the connection.
- # defaults to 66sec (sic!)
- # watchClientTimeout: 60
- #
- # Endpoint to send request to reload alerts
- reloadURL: "http://localhost:3000/api/admin/provisioning/alerting/reload"
- # Absolute path to shell script to execute after a alert got reloaded
- script: null
- skipReload: false
- # Deploy the alert sidecar as an initContainer in addition to a container.
- # Additional alert sidecar volume mounts
- extraMounts: []
- # Sets the size limit of the alert sidecar emptyDir volume
- sizeLimit: {}
- dashboards:
- enabled: false
- # Additional environment variables for the dashboards sidecar
- env: {}
- # Do not reprocess already processed unchanged resources on k8s API reconnect.
- # ignoreAlreadyProcessed: true
- SCProvider: true
- # label that the configmaps with dashboards are marked with
- label: grafana_dashboard
- # value of label that the configmaps with dashboards are set to
- labelValue: ""
- # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
- # logLevel: INFO
- # folder in the pod that should hold the collected dashboards (unless `defaultFolderName` is set)
- folder: /tmp/dashboards
- # The default folder name, it will create a subfolder under the `folder` and put dashboards in there instead
- defaultFolderName: null
- # Namespaces list. If specified, the sidecar will search for config-maps/secrets inside these namespaces.
- # Otherwise the namespace in which the sidecar is running will be used.
- # It's also possible to specify ALL to search in all namespaces.
- searchNamespace: null
- # 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.
- watchMethod: WATCH
- # search in configmap, secret or both
- resource: both
- # If specified, the sidecar will look for annotation with this name to create folder and put graph here.
- # You can use this parameter together with `provider.foldersFromFilesStructure`to annotate configmaps and create folder structure.
- folderAnnotation: null
- # Endpoint to send request to reload alerts
- reloadURL: "http://localhost:3000/api/admin/provisioning/dashboards/reload"
- # Absolute path to shell script to execute after a configmap got reloaded
- script: null
- skipReload: false
- # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
- # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
- # watchServerTimeout: 3600
- #
- # watchClientTimeout: is a client-side timeout, configuring your local socket.
- # If you have a network outage dropping all packets with no RST/FIN,
- # this is how long your client waits before realizing & dropping the connection.
- # defaults to 66sec (sic!)
- # watchClientTimeout: 60
- #
- # provider configuration that lets grafana manage the dashboards
- provider:
- # name of the provider, should be unique
- name: sidecarProvider
- # orgid as configured in grafana
- orgid: 1
- # folder in which the dashboards should be imported in grafana
- folder: ''
- # type of the provider
- type: file
- # disableDelete to activate a import-only behaviour
- disableDelete: false
- # allow updating provisioned dashboards from the UI
- allowUiUpdates: false
- # allow Grafana to replicate dashboard structure from filesystem
- foldersFromFilesStructure: false
- # Additional dashboard sidecar volume mounts
- extraMounts: []
- # Sets the size limit of the dashboard sidecar emptyDir volume
- sizeLimit: {}
- datasources:
- enabled: false
- # Additional environment variables for the datasourcessidecar
- env: {}
- # Do not reprocess already processed unchanged resources on k8s API reconnect.
- # ignoreAlreadyProcessed: true
- # label that the configmaps with datasources are marked with
- label: grafana_datasource
- # value of label that the configmaps with datasources are set to
- labelValue: ""
- # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
- # logLevel: INFO
- # If specified, the sidecar will search for datasource config-maps inside this namespace.
- # Otherwise the namespace in which the sidecar is running will be used.
- # It's also possible to specify ALL to search in all namespaces
- searchNamespace: null
- # 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.
- watchMethod: WATCH
- # search in configmap, secret or both
- resource: both
- # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
- # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
- # watchServerTimeout: 3600
- #
- # watchClientTimeout: is a client-side timeout, configuring your local socket.
- # If you have a network outage dropping all packets with no RST/FIN,
- # this is how long your client waits before realizing & dropping the connection.
- # defaults to 66sec (sic!)
- # watchClientTimeout: 60
- #
- # Endpoint to send request to reload datasources
- reloadURL: "http://localhost:3000/api/admin/provisioning/datasources/reload"
- # Absolute path to shell script to execute after a datasource got reloaded
- script: null
- skipReload: false
- # Deploy the datasource sidecar as an initContainer in addition to a container.
- # This is needed if skipReload is true, to load any datasources defined at startup time.
- initDatasources: false
- # Sets the size limit of the datasource sidecar emptyDir volume
- sizeLimit: {}
- plugins:
- enabled: false
- # Additional environment variables for the plugins sidecar
- env: {}
- # Do not reprocess already processed unchanged resources on k8s API reconnect.
- # ignoreAlreadyProcessed: true
- # label that the configmaps with plugins are marked with
- label: grafana_plugin
- # value of label that the configmaps with plugins are set to
- labelValue: ""
- # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
- # logLevel: INFO
- # If specified, the sidecar will search for plugin config-maps inside this namespace.
- # Otherwise the namespace in which the sidecar is running will be used.
- # It's also possible to specify ALL to search in all namespaces
- searchNamespace: null
- # 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.
- watchMethod: WATCH
- # search in configmap, secret or both
- resource: both
- # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
- # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
- # watchServerTimeout: 3600
- #
- # watchClientTimeout: is a client-side timeout, configuring your local socket.
- # If you have a network outage dropping all packets with no RST/FIN,
- # this is how long your client waits before realizing & dropping the connection.
- # defaults to 66sec (sic!)
- # watchClientTimeout: 60
- #
- # Endpoint to send request to reload plugins
- reloadURL: "http://localhost:3000/api/admin/provisioning/plugins/reload"
- # Absolute path to shell script to execute after a plugin got reloaded
- script: null
- skipReload: false
- # Deploy the datasource sidecar as an initContainer in addition to a container.
- # This is needed if skipReload is true, to load any plugins defined at startup time.
- initPlugins: false
- # Sets the size limit of the plugin sidecar emptyDir volume
- sizeLimit: {}
- notifiers:
- enabled: false
- # Additional environment variables for the notifierssidecar
- env: {}
- # Do not reprocess already processed unchanged resources on k8s API reconnect.
- # ignoreAlreadyProcessed: true
- # label that the configmaps with notifiers are marked with
- label: grafana_notifier
- # value of label that the configmaps with notifiers are set to
- labelValue: ""
- # Log level. Can be one of: DEBUG, INFO, WARN, ERROR, CRITICAL.
- # logLevel: INFO
- # If specified, the sidecar will search for notifier config-maps inside this namespace.
- # Otherwise the namespace in which the sidecar is running will be used.
- # It's also possible to specify ALL to search in all namespaces
- searchNamespace: null
- # 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.
- watchMethod: WATCH
- # search in configmap, secret or both
- resource: both
- # watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
- # defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
- # watchServerTimeout: 3600
- #
- # watchClientTimeout: is a client-side timeout, configuring your local socket.
- # If you have a network outage dropping all packets with no RST/FIN,
- # this is how long your client waits before realizing & dropping the connection.
- # defaults to 66sec (sic!)
- # watchClientTimeout: 60
- #
- # Endpoint to send request to reload notifiers
- reloadURL: "http://localhost:3000/api/admin/provisioning/notifications/reload"
- # Absolute path to shell script to execute after a notifier got reloaded
- script: null
- skipReload: false
- # Deploy the notifier sidecar as an initContainer in addition to a container.
- # This is needed if skipReload is true, to load any notifiers defined at startup time.
- initNotifiers: false
- # Sets the size limit of the notifier sidecar emptyDir volume
- sizeLimit: {}
- ## Override the deployment namespace
- ##
- namespaceOverride: ""
- ## Number of old ReplicaSets to retain
- ##
- revisionHistoryLimit: 10
- ## Add a seperate remote image renderer deployment/service
- imageRenderer:
- deploymentStrategy: {}
- # Enable the image-renderer deployment & service
- enabled: false
- replicas: 1
- autoscaling:
- enabled: false
- minReplicas: 1
- maxReplicas: 5
- targetCPU: "60"
- targetMemory: ""
- behavior: {}
- image:
- # -- The Docker registry
- registry: docker.io
- # image-renderer Image repository
- repository: grafana/grafana-image-renderer
- # image-renderer Image tag
- tag: latest
- # image-renderer Image sha (optional)
- sha: ""
- # image-renderer ImagePullPolicy
- pullPolicy: Always
- # extra environment variables
- env:
- HTTP_HOST: "0.0.0.0"
- # RENDERING_ARGS: --no-sandbox,--disable-gpu,--window-size=1280x758
- # RENDERING_MODE: clustered
- # IGNORE_HTTPS_ERRORS: true
- ## "valueFrom" environment variable references that will be added to deployment pods. Name is templated.
- ## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#envvarsource-v1-core
- ## Renders in container spec as:
- ## env:
- ## ...
- ## - name: <key>
- ## valueFrom:
- ## <value rendered as YAML>
- envValueFrom: {}
- # ENV_NAME:
- # configMapKeyRef:
- # name: configmap-name
- # key: value_key
- # image-renderer deployment serviceAccount
- serviceAccountName: ""
- # image-renderer deployment securityContext
- securityContext: {}
- # image-renderer deployment container securityContext
- containerSecurityContext:
- seccompProfile:
- type: RuntimeDefault
- capabilities:
- drop: ['ALL']
- allowPrivilegeEscalation: false
- readOnlyRootFilesystem: true
- ## image-renderer pod annotation
- podAnnotations: {}
- # image-renderer deployment Host Aliases
- hostAliases: []
- # image-renderer deployment priority class
- priorityClassName: ''
- service:
- # Enable the image-renderer service
- enabled: true
- # image-renderer service port name
- portName: 'http'
- # image-renderer service port used by both service and deployment
- port: 8081
- targetPort: 8081
- # Adds the appProtocol field to the image-renderer service. This allows to work with istio protocol selection. Ex: "http" or "tcp"
- appProtocol: ""
- serviceMonitor:
- ## If true, a ServiceMonitor CRD is created for a prometheus operator
- ## https://github.com/coreos/prometheus-operator
- ##
- enabled: false
- path: /metrics
- # namespace: monitoring (defaults to use the namespace this chart is deployed to)
- labels: {}
- interval: 1m
- scheme: http
- tlsConfig: {}
- scrapeTimeout: 30s
- relabelings: []
- # See: https://doc.crds.dev/github.com/prometheus-operator/kube-prometheus/monitoring.coreos.com/ServiceMonitor/v1@v0.11.0#spec-targetLabels
- targetLabels: []
- # - targetLabel1
- # - targetLabel2
- # If https is enabled in Grafana, this needs to be set as 'https' to correctly configure the callback used in Grafana
- grafanaProtocol: http
- # In case a sub_path is used this needs to be added to the image renderer callback
- grafanaSubPath: ""
- # name of the image-renderer port on the pod
- podPortName: http
- # number of image-renderer replica sets to keep
- revisionHistoryLimit: 10
- networkPolicy:
- # Enable a NetworkPolicy to limit inbound traffic to only the created grafana pods
- limitIngress: true
- # Enable a NetworkPolicy to limit outbound traffic to only the created grafana pods
- limitEgress: false
- # Allow additional services to access image-renderer (eg. Prometheus operator when ServiceMonitor is enabled)
- extraIngressSelectors: []
- resources: {}
- # limits:
- # cpu: 100m
- # memory: 100Mi
- # requests:
- # cpu: 50m
- # memory: 50Mi
- ## Node labels for pod assignment
- ## ref: https://kubernetes.io/docs/user-guide/node-selection/
- #
- nodeSelector: {}
- ## Tolerations for pod assignment
- ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
- ##
- tolerations: []
- ## Affinity for pod assignment (evaluated as template)
- ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
- ##
- affinity: {}
- ## Use an alternate scheduler, e.g. "stork".
- ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
- ##
- # schedulerName: "default-scheduler"
- networkPolicy:
- ## @param networkPolicy.enabled Enable creation of NetworkPolicy resources. Only Ingress traffic is filtered for now.
- ##
- enabled: false
- ## @param networkPolicy.allowExternal Don't require client label for connections
- ## The Policy model to apply. When set to false, only pods with the correct
- ## client label will have network access to grafana port defined.
- ## When true, grafana will accept connections from any source
- ## (with the correct destination port).
- ##
- ingress: true
- ## @param networkPolicy.ingress When true enables the creation
- ## an ingress network policy
- ##
- allowExternal: true
- ## @param networkPolicy.explicitNamespacesSelector A Kubernetes LabelSelector to explicitly select namespaces from which traffic could be allowed
- ## If explicitNamespacesSelector is missing or set to {}, only client Pods that are in the networkPolicy's namespace
- ## and that match other criteria, the ones that have the good label, can reach the grafana.
- ## But sometimes, we want the grafana to be accessible to clients from other namespaces, in this case, we can use this
- ## LabelSelector to select these namespaces, note that the networkPolicy's namespace should also be explicitly added.
- ##
- ## Example:
- ## explicitNamespacesSelector:
- ## matchLabels:
- ## role: frontend
- ## matchExpressions:
- ## - {key: role, operator: In, values: [frontend]}
- ##
- explicitNamespacesSelector: {}
- ##
- ##
- ##
- ##
- ##
- ##
- egress:
- ## @param networkPolicy.egress.enabled When enabled, an egress network policy will be
- ## created allowing grafana to connect to external data sources from kubernetes cluster.
- enabled: false
- ##
- ## @param networkPolicy.egress.ports Add individual ports to be allowed by the egress
- ports: []
- ## Add ports to the egress by specifying - port: <port number>
- ## E.X.
- ## ports:
- ## - port: 80
- ## - port: 443
- ##
- ##
- ##
- ##
- ##
- ##
- # Enable backward compatibility of kubernetes where version below 1.13 doesn't have the enableServiceLinks option
- enableKubeBackwardCompatibility: false
- useStatefulSet: false
- # Create a dynamic manifests via values:
- extraObjects: []
- # - apiVersion: "kubernetes-client.io/v1"
- # kind: ExternalSecret
- # metadata:
- # name: grafana-secrets
- # spec:
- # backendType: gcpSecretsManager
- # data:
- # - key: grafana-admin-password
- # name: adminPassword
|