# perses Perses helm chart ![Version: 0.20.1](https://img.shields.io/badge/Version-0.20.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.53.1](https://img.shields.io/badge/AppVersion-v0.53.1-informational?style=flat-square) ## Installing the Chart To install the chart with the release name `my-release`: ``` helm repo add perses https://perses.github.io/helm-charts helm repo update helm install my-release perses/perses ``` ## Uninstalling the Chart To uninstall/delete the my-release deployment: ``` helm delete my-release ``` ## Upgrading For upgrade instructions, including handling breaking changes between versions, see the [Upgrade Guide](../../docs/upgrade-guide.md). ## Values | Key | Type | Default | Description | |--------------------------------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | additionalLabels | object | `{}` | | | affinity | object | `{}` | | | annotations | object | `{}` | Statefulset Annotations | | config | object | `{"annotations":{},"api_prefix":"","database":{"file":{"extension":"json","folder":"/perses"}},"frontend":{"explorer":{"enable":true},"important_dashboards":[],"information":""},"provisioning":{"folders":["/etc/perses/provisioning"],"interval":"10m"},"security":{"cookie":{"same_site":"lax","secure":false},"enable_auth":false,"readonly":false}}` | Perses configuration file ref: https://github.com/perses/perses/blob/main/docs/configuration/configuration.md | | config.annotations | object | `{}` | Annotations for config | | config.api_prefix | string | `""` | Use it in case you want to prefix the API path. By default the API is served with the path /api. With this config, it will be served with the path /api | | config.database | object | `{"file":{"extension":"json","folder":"/perses"}}` | Database config based on data base type | | config.database.file | object | `{"extension":"json","folder":"/perses"}` | file system configs | | config.frontend | object | `{"explorer":{"enable":true},"important_dashboards":[],"information":""}` | Frontend configuration | | config.frontend.important_dashboards | list | `[]` | Important dashboards list | | config.frontend.information | string | `""` | Information contains markdown content to be display on the home page | | config.provisioning | object | `{"folders":["/etc/perses/provisioning"],"interval":"10m"}` | provisioning config | | config.security.cookie | object | `{"same_site":"lax","secure":false}` | cookie config | | config.security.enable_auth | bool | `false` | Enable Authentication | | config.security.readonly | bool | `false` | Configure Perses instance as readonly | | datasources | list | `[]` | Configure datasources DEPRECATED: This field will be removed in the future release. Please use the 'sidecar' configuration to provision datasources. ref: https://github.com/perses/perses/blob/90beed356243208f14cf2249bebb6f6222cb77ae/docs/datasource.md | | envVars | list | `[]` | Perses configuration as environment variables. A Kubernetes Secret will be created containing these environment variables. Perses automatically merges them at runtime using the PERSES_ pattern, e.g. PERSES_SECURITY_AUTHENTICATION_PROVIDERS_OIDC_0_CLIENT_SECRET For more information, see: https://perses.dev/perses/docs/configuration/configuration/?h=envir#configuration-file | | envVarsExternalSecretName | string | `""` | Name of existing Kubernetes Secret containing environment variables. When specified, no new Secret is created and values from envVars array are ignored. ######################################################################################################## ##### WARNING: 'envVarsExternalSecretName' is deprecated since 0.19.2 and will be removed soon. ##### ##### Use the 'secret' block to reference an existing Secret instead. ##### ##### Example: set secret.create=false and secret.name to your Secret name. ##### ######################################################################################################## | | extraArgs | object | `{}` | Additional arguments to pass to perses. Set to null for argumentless flags | | extraObjects | list | `[]` | Deploy extra K8s manifests | | fullnameOverride | string | `""` | Override fully qualified app name | | gateway | object | `{"annotations":{},"createGateway":true,"enabled":false,"gatewayClassName":"","httpRoute":{"annotations":{},"hostnames":["perses.local"],"labels":{},"name":"","parentRefs":[],"rules":[]},"labels":{},"listeners":[{"allowedRoutes":{"namespaces":{"from":"Same"}},"hostname":"","name":"http","port":80,"protocol":"HTTP"}],"name":"","namespace":""}` | Configure Gateway API resources to expose Perses Frontend through a Gateway and HTTPRoute | | gateway.annotations | object | `{}` | Annotations to add to the Gateway | | gateway.createGateway | bool | `true` | Create a Gateway resource. If false, only the HTTPRoute is created and parentRefs must target an existing Gateway. | | gateway.enabled | bool | `false` | Enable Gateway API resources | | gateway.gatewayClassName | string | `""` | GatewayClass name used by the Gateway. Required when createGateway is true. | | gateway.httpRoute.annotations | object | `{}` | Annotations to add to the HTTPRoute | | gateway.httpRoute.hostnames | list | `["perses.local"]` | Hostnames served by the HTTPRoute | | gateway.httpRoute.labels | object | `{}` | Labels to add to the HTTPRoute | | gateway.httpRoute.name | string | `""` | Name of the HTTPRoute. Defaults to " | | | | | | | -perses-http-route" when empty. | | | | | gateway.httpRoute.parentRefs | list | `[]` | ParentRefs for the HTTPRoute. Defaults to the created Gateway when createGateway is true. | | gateway.httpRoute.rules | list | `[]` | Rules for the HTTPRoute. Defaults to a single PathPrefix "/" rule targeting the Perses service. | | gateway.labels | object | `{}` | Labels to add to the Gateway | | gateway.listeners | list | `[{"allowedRoutes":{"namespaces":{"from":"Same"}},"hostname":"","name":"http","port":80,"protocol":"HTTP"}]` | Listener configuration for the Gateway | | gateway.name | string | `""` | Name of the Gateway to create or reference. Defaults to " | | | | | | | -perses-gateway" when empty. | | | | | gateway.namespace | string | `""` | Namespace of the Gateway. Defaults to the release namespace when empty. | | image.name | string | `"persesdev/perses"` | Perses image repository and name | | image.pullPolicy | string | `"IfNotPresent"` | Default image pull policy | | image.registry | string | `"docker.io"` | Perses image registry | | image.version | string | `""` | Overrides the image tag whose default is the chart appVersion. | | ingress | object | `{"annotations":{},"enabled":false,"hosts":[{"host":"perses.local","paths":[{"path":"/","pathType":"Prefix"}]}],"ingressClassName":"","tls":[]}` | Configure the ingress resource that allows you to access Perses Frontend ref: https://kubernetes.io/docs/concepts/services-networking/ingress/ | | ingress.annotations | object | `{}` | Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations. For a full list of possible ingress annotations, please see ref: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md | | ingress.enabled | bool | `false` | Enable ingress controller resource | | ingress.hosts | list | `[{"host":"perses.local","paths":[{"path":"/","pathType":"Prefix"}]}]` | Default host for the ingress resource | | ingress.ingressClassName | string | `""` | IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+) This is supported in Kubernetes 1.18+ and required if you have more than one IngressClass marked as the default for your cluster . ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/ | | ingress.tls | list | `[]` | Ingress TLS configuration | | livenessProbe | object | `{"enabled":true,"failureThreshold":5,"initialDelaySeconds":10,"periodSeconds":60,"successThreshold":1,"timeoutSeconds":5}` | Liveness probe configuration Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ | | logLevel | string | `"info"` | Log level for Perses be configured in available options "panic", "error", "warning", "info", "debug", "trace" | | nameOverride | string | `""` | Override name of the chart used in Kubernetes object names. | | nodeSelector | object | `{}` | Node labels for Perses pod assignment # Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ # | | ociArtifacts | object | `{}` | OCI artifacts configuration for mounting OCI images as volumes. This feature allows you to package Perses manifests (dashboards, datasources, projects, etc.) as OCI images and mount them directly into the Perses container. The mounted manifests will be automatically loaded by Perses provisioning system when mounted at the provisioning path. Use cases: - Distribute dashboards as versioned OCI images - Deploy datasource configurations from container registries - Enable immutable configuration deployments with rollback capabilities Requirements: Kubernetes v1.31+ and ImageVolume feature gate enabled Note: OCI artifacts are inherently read-only Ref: https://kubernetes.io/docs/tasks/configure-pod-container/image-volumes/ | | persistence | object | `{"accessModes":["ReadWriteOnce"],"annotations":{},"enabled":false,"labels":{},"securityContext":{"fsGroup":2000},"size":"8Gi"}` | Persistence parameters | | persistence.accessModes | list | `["ReadWriteOnce"]` | PVC Access Modes for data volume | | persistence.annotations | object | `{}` | Annotations for the PVC | | persistence.enabled | bool | `false` | If disabled, it will use a emptydir volume | | persistence.labels | object | `{}` | Labels for the PVC | | persistence.securityContext | object | `{"fsGroup":2000}` | Pod-level security context applied to all containers | | persistence.securityContext.fsGroup | int | `2000` | Group ID that owns mounted volumes (needed for file access when using persistent storage) | | persistence.size | string | `"8Gi"` | PVC Storage Request for data volume | | podAntiAffinity | string | `""` | Pod anti-affinity can prevent the scheduler from placing Perses replicas on the same node. # The value "soft" means that the scheduler should *prefer* to not schedule two replica pods onto the same node but no guarantee is provided. # The value "hard" means that the scheduler is *required* to not schedule two replica pods onto the same node. # The default value "" will disable pod anti-affinity so that no anti-affinity rules will be configured. # | | podAntiAffinityTopologyKey | string | `"kubernetes.io/hostname"` | If anti-affinity is enabled sets the topologyKey to use for anti-affinity. # This can be changed to, for example, failure-domain.beta.kubernetes.io/zone # | | provisioningPersistence | object | `{"accessModes":["ReadWriteOnce"],"annotations":{},"enabled":false,"labels":{},"size":"1Gi","storageClass":""}` | Persistence configuration for Perses provisioning. For more information on provisioning feature, see: https://perses.dev/perses/docs/configuration/provisioning/ When enabled, a PersistentVolumeClaim (PVC) is created via StatefulSet volumeClaimTemplates. The PVC will be named: provisioning- | | | | | | - Examples: - Release "perses-oci" → PVC: "provisioning-perses-oci-0" - Release "my-app" → PVC: "provisioning-my-app-perses-0" This PVC can be referenced by other workloads (e.g., CronJobs) to write dashboards/datasources. | | provisioningPersistence.accessModes | list | `["ReadWriteOnce"]` | access modes for provisioning PVC ReadWriteOnce: Only one pod can mount (cheaper, single-node storage) ReadWriteMany: Multiple pods can mount simultaneously (required for CronJobs or multiple replicas) Note: ReadWriteMany requires storage class that supports it (e.g., NFS, CephFS, Azure Files) | | provisioningPersistence.annotations | object | `{}` | annotations for provisioning PVC | | provisioningPersistence.enabled | bool | `false` | enable persistent volume for provisioning | | provisioningPersistence.labels | object | `{}` | labels for provisioning PVC | | provisioningPersistence.size | string | `"1Gi"` | size of provisioning PVC | | provisioningPersistence.storageClass | string | `""` | storage class for provisioning PVC | | readinessProbe | object | `{"enabled":true,"failureThreshold":5,"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5}` | Readiness probe configuration Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ | | replicas | int | `1` | Number of pod replicas. | | resources | object | `{}` | Resource limits & requests. Update according to your own use case as these values might be too low for a typical deployment. ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ | | secret | object | `{"create":true,"name":""}` | Secret settings for envVars / auto-generated auth env vars | | secret.create | bool | `true` | Create the Secret automatically | | secret.name | string | `""` | Name of the Secret to reference (defaults to release fullname when empty) | | service | object | `{"annotations":{},"labels":{},"port":8080,"portName":"http","targetPort":8080,"type":"ClusterIP"}` | Expose the Perses 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. | | service.annotations | object | `{}` | Annotations to add to the service | | service.labels | object | `{}` | Labels to add to the service | | service.port | int | `8080` | Service Port | | service.portName | string | `"http"` | Service Port Name | | service.targetPort | int | `8080` | Perses running port | | service.type | string | `"ClusterIP"` | Service Type | | serviceAccount | object | `{"annotations":{},"create":true,"name":""}` | Service account for Perses to use. | | serviceAccount.annotations | object | `{}` | Annotations to add to the service account | | serviceAccount.create | bool | `true` | Specifies whether a service account should be created | | serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template | | serviceMonitor.interval | string | `"30s"` | Interval for the serviceMonitor | | serviceMonitor.labels | object | `{}` | Labels to add to the ServiceMonitor so that Prometheus can discover it. These labels should match the 'serviceMonitorSelector.matchLabels' defined in your Prometheus CR. | | serviceMonitor.selector.matchLabels | object | `{}` | Selector used by the ServiceMonitor to find which Perses service to scrape metrics from. These matchLabels should match the labels on your Perses service. | | serviceMonitor.selfMonitor | bool | `false` | Create a serviceMonitor for Perses | | sidecar | object | `{"allNamespaces":true,"enableSecretAccess":false,"enabled":false,"extraEnvVars":[],"globalAdminUsers":[],"healthPort":8081,"image":{"registry":"docker.io","repository":"kiwigrid/k8s-sidecar","tag":"2.5.0"},"label":"perses.dev/resource","labelValue":"true","securityContext":{}}` | Sidecar configuration that watches for ConfigMaps with the specified label/labelValue and loads them into Perses provisioning | | sidecar.allNamespaces | bool | `true` | check for configmaps from all namespaces. When set to false, it will only check for configmaps in the same namespace as the Perses instance | | sidecar.enableSecretAccess | bool | `false` | Enable secret access permissions in the cluster role. When enabled, the sidecar will have permissions to read secrets and use them. | | sidecar.enabled | bool | `false` | Enable the sidecar container for ConfigMap provisioning | | sidecar.extraEnvVars | list | `[]` | add additional environment variables to sidecar container. you can look at the k8s-sidecar documentation for more information - https://github.com/kiwigrid/k8s-sidecar | | sidecar.globalAdminUsers | list | `[]` | List of usernames to bind to the Perses global-admin role when the sidecar is enabled | | sidecar.healthPort | int | `8081` | Port exposed by the sidecar health endpoint (k8s-sidecar HEALTH_PORT env var) | | sidecar.image.registry | string | `"docker.io"` | Container image registry for the sidecar | | sidecar.image.repository | string | `"kiwigrid/k8s-sidecar"` | Container image repository for the sidecar | | sidecar.image.tag | string | `"2.5.0"` | Container image tag for the sidecar | | sidecar.label | string | `"perses.dev/resource"` | Label key to watch for ConfigMaps containing Perses resources | | sidecar.labelValue | string | `"true"` | Label value to watch for ConfigMaps containing Perses resources | | sidecar.securityContext | object | `{}` | dedicated sidecar container security in case elevated privileges are needed for writing to volumes. | | testFramework.enabled | bool | `true` | | | testFramework.image.registry | string | `"ghcr.io"` | | | testFramework.image.repository | string | `"cloudoperators/greenhouse-extensions-integration-test"` | | | testFramework.image.tag | string | `"main"` | | | testFramework.imagePullPolicy | string | `"IfNotPresent"` | | | tls | object | `{"caCert":{"enabled":false,"mountPath":"/ca","secretName":""},"clientCert":{"enabled":false,"mountPath":"/tls","secretName":""},"enabled":false}` | TLS configuration for mounting certificates from Kubernetes secrets | | tls.caCert | object | `{"enabled":false,"mountPath":"/ca","secretName":""}` | CA Certificate configuration Certificates will be mounted to the directory specified in mountPath | | tls.caCert.enabled | bool | `false` | Enable CA certificate mounting | | tls.caCert.mountPath | string | `"/ca"` | Mount path for the CA certificate directory | | tls.caCert.secretName | string | `""` | Name of the Kubernetes secret containing the CA certificate Defaults to "release-name-tls" if not specified | | tls.clientCert | object | `{"enabled":false,"mountPath":"/tls","secretName":""}` | Client Certificate configuration (contains both cert and key) Certificates will be mounted to the directory specified in mountPath | | tls.clientCert.enabled | bool | `false` | Enable client certificate mounting | | tls.clientCert.mountPath | string | `"/tls"` | Mount path for the client certificate directory | | tls.clientCert.secretName | string | `""` | Name of the Kubernetes secret containing the client certificate and key Defaults to "release-name-tls" if not specified | | tls.enabled | bool | `false` | Enable TLS certificate mounting | | tolerations | list | `[]` | Node tolerations for server scheduling to nodes with taints # Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ # | | topologySpreadConstraints | list | `[]` | Pod topology spread constraints # ref. https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/ | | volumeMounts | list | `[]` | Additional VolumeMounts on the output StatefulSet definition. | | volumes | list | `[]` | Additional volumes on the output StatefulSet definition. | --- Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)