# $schema: ./values.schema.json # -- Overrides the version used to determine compatibility of resources with the target Kubernetes cluster. # This is useful when using `helm template`, because then helm will use the client version of kubectl as the Kubernetes version, # which may or may not match your cluster's server version. Example: 'v1.24.4'. Set to null to use the version that helm # devises. kubeVersionOverride: "" global: # @schema type:[string, null] # -- Overrides the Docker registry globally for all images (standard format). # This has the highest precedence and overrides every component-level image.registry value. imageRegistry: null image: # @schema type:[string, null] # -- Overrides the Docker registry globally for all images (deprecated, use global.imageRegistry). # This has lower precedence than global.imageRegistry, but higher precedence than component-level image.registry values. registry: null # @schema type:[string, null] # -- Overrides the priorityClassName for all pods priorityClassName: null # -- configures cluster domain ("cluster.local" by default) clusterDomain: "cluster.local" # -- configures DNS service name dnsService: "kube-dns" # -- configures DNS service namespace dnsNamespace: "kube-system" # -- Common additional CLI arguments for all jobs (that is, -log.level debug, -config.expand-env=true or -log-config-reverse-order) # (deprecated, use defaults.extraArgs) # scope: backend, bloom-builder, bloom-gateway, bloom-planner, compactor, distributor, index-gateway, ingester, overrides-exporter, pattern-ingester, querier, query-frontend, query-scheduler, read, ruler, write. extraArgs: [] # -- Common environment variables to add to all pods directly managed by this chart. # (deprecated, use defaults.extraEnv) # scope: backend, bloom-builder, bloom-gateway, bloom-planner, compactor, distributor, index-gateway, ingester, overrides-exporter, pattern-ingester, querier, query-frontend, query-scheduler, read, ruler, write. extraEnv: [] # -- Common source of environment injections to add to all pods directly managed by this chart. # (deprecated, use defaults.extraEnvFrom) # scope: backend, bloom-builder, bloom-gateway, bloom-planner, compactor, distributor, index-gateway, ingester, overrides-exporter, pattern-ingester, querier, query-frontend, query-scheduler, read, ruler, write. # For example to inject values from a Secret, use: # extraEnvFrom: # - secretRef: # name: mysecret extraEnvFrom: [] # -- Common volumes to add to all pods directly managed by this chart. # (deprecated, use defaults.extraVolumes) # scope: backend, bloom-builder, bloom-gateway, bloom-planner, compactor, distributor, index-gateway, ingester, overrides-exporter, pattern-ingester, querier, query-frontend, query-scheduler, read, ruler, write. extraVolumes: [] # -- Common mount points to add to all pods directly managed by this chart. # (deprecated, use defaults.extraVolumeMounts) # scope: backend, bloom-builder, bloom-gateway, bloom-planner, compactor, distributor, index-gateway, ingester, overrides-exporter, pattern-ingester, querier, query-frontend, query-scheduler, read, ruler, write. extraVolumeMounts: [] # -- Overrides the chart's name nameOverride: "" # -- Overrides the chart's computed fullname fullnameOverride: "" # -- Overrides the chart's namespace namespaceOverride: "" # -- Image pull secrets for Docker images imagePullSecrets: [] # -- Deployment mode lets you specify how to deploy Loki. # There are 3 options: # - Monolithic (deprecated: SingleBinary): Loki is deployed as a single binary, useful for small installs typically without HA, up to a few tens of GB/day. # - SimpleScalable (deprecated, removed in Loki 4): Loki is deployed as 3 targets: read, write, and backend. Useful for medium installs easier to manage than distributed, up to a about 1TB/day. # - Distributed: Loki is deployed as individual microservices. The most complicated but most capable, useful for large installs, typically over 1TB/day. # There are also 2 additional modes used for migrating between deployment modes: # - Monolithic<->SimpleScalable (deprecated: SingleBinary<->SimpleScalable): Migrate from SingleBinary to SimpleScalable (or vice versa) # - SimpleScalable<->Distributed: Migrate from SimpleScalable to Distributed (or vice versa) # Note: SimpleScalable and Distributed REQUIRE the use of object storage. # Ref: https://grafana.com/docs/loki/latest/get-started/deployment-modes/ deploymentMode: Monolithic # @schema additionalProperties:{"type":"string"} # -- Labels to be added to resources commonLabels: {} ###################################################################################################################### # # Defaults applied to loki components only. Not applied to loki-canary, memcache, gateway/nginx or other components. # ###################################################################################################################### defaults: goSettings: # -- Fraction of the container memory limit used to compute GOMEMLIMIT (e.g. 0.85 = 85%). # Set to 0 to disable automatic GOMEMLIMIT injection. goMemLimitFactor: 0.85 # -- Value to set for GOGC alongside GOMEMLIMIT. Lowering below the default of 100 reduces # heap growth between GC cycles, working in tandem with GOMEMLIMIT to smooth memory usage. # Set to 0 to disable automatic GOGC injection. gogc: 80 # @schema additionalProperties:true # -- DNSConfig for loki pods dnsConfig: {} # -- hostAliases for loki pods hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace for loki pods hostUsers: null # @schema type:[string, null] # -- The name of the PriorityClass for loki pods priorityClassName: "" # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for loki pods podSecurityContext: {} # -- Grace period to allow the gateway to shutdown before it is killed terminationGracePeriodSeconds: 30 # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # -- Common additional CLI arguments for loki pods extraArgs: [] # -- Common environment variables to add to all pods directly managed by this chart. extraEnv: [] # -- Common source of environment injections to add to all pods directly managed by this chart. # For example to inject values from a Secret, use: # extraEnvFrom: # - secretRef: # name: mysecret extraEnvFrom: [] # -- Common volumes to add to all pods directly managed by this chart. extraVolumes: [] # -- Common mount points to add to all pods directly managed by this chart. extraVolumeMounts: [] # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for Loki containers for loki pods containerSecurityContext: {} # @schema skipProperties:true;additionalProperties:true # -- Configures the liveness probe for loki pods livenessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- Configures the readiness probe for loki pods readinessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- Configures the startup probe for loki pods startupProbe: {} # @schema additionalProperties:true # -- Node selector for loki pods nodeSelector: {} # -- Tolerations for loki pods tolerations: [] # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # @schema additionalProperties:{"type":"string"} # -- Annotations for loki Deployments/StatefulSets annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for loki Deployments/StatefulSets labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for loki pods podAnnotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for loki pod podLabels: {} # -- Should enableServiceLinks be enabled. Default to enable enableServiceLinks: true service: # @schema additionalProperties:{"type":"string"} # -- Common annotations for all services annotations: {} # @schema additionalProperties:{"type":"string"} # -- Common labels for all services labels: {} # -- trafficDistribution for services # Ref: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-distribution trafficDistribution: "" # -- ipFamilyPolicy for all services # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for all services # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- publishNotReadyAddresses for all services. Set to false so a pod's Service endpoint is # withdrawn as soon as it becomes unready, instead of staying routable for the full termination # window. Overridable per component via .service.publishNotReadyAddresses. publishNotReadyAddresses: true # -- KEDA autoscaling shared configuration for all components that support KEDA kedaAutoscaling: # -- Prometheus server address for KEDA triggers prometheusAddress: "" # -- Whether to skip SSL verification when connecting to Prometheus unsafeSsl: false # -- Whether to ignore null values from Prometheus queries ignoreNullValues: true # -- Custom HTTP headers to include in Prometheus requests. Useful for multi-tenant setups (e.g. "X-Scope-OrgID=tenant1") customHeaders: "" # -- Interval (seconds) to poll each trigger. Overridable per component. pollingInterval: 30 # -- Period (seconds) to wait after the last trigger reported active before scaling back to 0. Overridable per component. cooldownPeriod: 300 # -- KEDA trigger authentication settings. Ref: https://keda.sh/docs/latest/concepts/authentication/ authentication: # -- Enable TriggerAuthentication for KEDA triggers enabled: false # -- Authentication modes for the trigger (e.g. "bearer", "basic") authModes: "" # -- Secret key references for TriggerAuthentication secretTargetRef: [] statefulSetRecreateJob: # -- When a component sets `*.statefulSetRecreateJob.enabled`, the pre-upgrade Job can patch PVC storage requests and recreate the StatefulSet for podManagementPolicy, serviceName, or volumeClaimTemplates count/name/size changes. It does not migrate storageClass, accessModes, selectors, or VCT labels. See the chart README section StatefulSet immutability. patchPVC: true image: registry: registry.k8s.io repository: kubectl # -- Overrides the image tag. Defaults to .Capabilities.KubeVersion.Version tag: '' ###################################################################################################################### # # Base Loki Configs including kubernetes configurations and configurations for Loki itself, # see below for more specifics on Loki's configuration. # ###################################################################################################################### # -- Configuration for running Loki # @default -- See values.yaml loki: # @schema skipProperties:true;additionalProperties:true # Configures the liveness probe for all of the Loki pods livenessProbe: httpGet: path: /loki/api/v1/status/buildinfo port: http-metrics periodSeconds: 30 successThreshold: 1 failureThreshold: 10 timeoutSeconds: 1 # @schema skipProperties:true;additionalProperties:true # Configures the readiness probe for all of the Loki pods readinessProbe: httpGet: path: /ready port: http-metrics periodSeconds: 10 initialDelaySeconds: 15 successThreshold: 1 failureThreshold: 3 timeoutSeconds: 1 # @schema skipProperties:true;additionalProperties:true # Configures the startup probe for all of the Loki pods startupProbe: {} image: # -- The Docker registry registry: docker.io # -- Docker image repository repository: grafana/loki # @schema type:[string, null] # -- Overrides the image tag whose default is the chart's appVersion tag: null # @schema type:[string, null] # -- Overrides the image tag with an image digest digest: null # -- Docker image pull policy pullPolicy: IfNotPresent # @schema additionalProperties:{"type":"string"} # -- Common annotations for all deployments/StatefulSets annotations: {} # @schema additionalProperties:{"type":"string"} # -- Common annotations for all pods podAnnotations: {} # @schema additionalProperties:{"type":"string"} # -- Common labels for all pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Common annotations for all services serviceAnnotations: {} # @schema additionalProperties:{"type":"string"} # -- Common labels for all services serviceLabels: {} # -- The number of old ReplicaSets to retain to allow rollback revisionHistoryLimit: 10 # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for Loki pods podSecurityContext: fsGroup: 10001 fsGroupChangePolicy: OnRootMismatch runAsGroup: 10001 runAsNonRoot: true runAsUser: 10001 seccompProfile: type: RuntimeDefault # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for Loki containers containerSecurityContext: readOnlyRootFilesystem: true capabilities: drop: - ALL allowPrivilegeEscalation: false seccompProfile: type: RuntimeDefault # -- Should enableServiceLinks be enabled. Default to enable enableServiceLinks: true # @schema additionalProperties:true # -- DNS config for Loki pods dnsConfig: {} ###################################################################################################################### # # Loki Configuration # # There are several ways to pass configuration to Loki, listing them here in order of our preference for how # you should use this chart. # 1. Use the templated value of loki.config below and the corresponding override sections which follow. # This allows us to set a lot of important Loki configurations and defaults and also allows us to maintain them # over time as Loki changes and evolves. # 2. Use the loki.structuredConfig section. # This will completely override the templated value of loki.config, so you MUST provide the entire Loki config # including any configuration that we set in loki.config unless you explicitly are trying to change one of those # values and are not able to do so with the templated sections. # If you choose this approach the burden is on you to maintain any changes we make to the templated config. # 3. Use an existing secret or configmap to provide the configuration. # This option is mostly provided for folks who have external processes which provide or modify the configuration. # When using this option you can specify a different name for loki.generatedConfigObjectName and configObjectName # if you have a process which takes the generated config and modifies it, or you can stop the chart from generating # a config entirely by setting loki.generatedConfigObjectName to # ###################################################################################################################### # -- Defines what kind of object stores the configuration, a ConfigMap or a Secret. # In order to move sensitive information (such as credentials) from the ConfigMap/Secret to a more secure location (e.g. vault), it is possible to use [environment variables in the configuration](https://grafana.com/docs/loki/latest/configuration/#use-environment-variables-in-the-configuration). # Such environment variables can be then stored in a separate Secret and injected via the global.extraEnvFrom value. For details about environment injection from a Secret please see [Secrets](https://kubernetes.io/docs/concepts/configuration/secret/#use-case-as-container-environment-variables). configStorageType: ConfigMap # -- The name of the object which Loki will mount as a volume containing the config. # If the configStorageType is Secret, this will be the name of the Secret, if it is ConfigMap, this will be the name of the ConfigMap. # The value will be passed through tpl. configObjectName: '{{ include "loki.name" . }}' # -- The name of the Secret or ConfigMap that will be created by this chart. # If empty, no configmap or secret will be created. # The value will be passed through tpl. generatedConfigObjectName: '{{ include "loki.name" . }}' # -- Config file contents for Loki # @default -- See values.yaml config: | auth_enabled: {{ .Values.loki.auth_enabled }} {{- with .Values.loki.server }} server: {{- toYaml . | nindent 2}} {{- end}} {{- with .Values.loki.pattern_ingester }} pattern_ingester: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} memberlist: {{- if .Values.loki.memberlistConfig }} {{- toYaml .Values.loki.memberlistConfig | nindent 2 }} {{- else }} {{- if .Values.loki.extraMemberlistConfig}} {{- toYaml .Values.loki.extraMemberlistConfig | nindent 2}} {{- end }} join_members: - {{ include "loki.memberlist" . }}.{{ include "loki.namespace" $ }}.svc.{{ .Values.global.clusterDomain }} {{- with .Values.migrate.fromDistributed }} {{- if .enabled }} - {{ .memberlistService }} {{- end }} {{- end }} {{- end }} {{- with .Values.loki.ingester }} ingester: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.ingester_client }} ingester_client: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.block_builder }} block_builder: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- if .Values.loki.commonConfig}} common: {{- toYaml .Values.loki.commonConfig | nindent 2}} storage: {{- include "loki.commonStorageConfig" . | nindent 4}} {{- end}} {{- with .Values.loki.limits_config }} limits_config: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} runtime_config: file: /etc/loki/runtime-config/runtime-config.yaml {{- if .Values.chunksCache.enabled }} {{- with .Values.chunksCache }} chunk_store_config: chunk_cache_config: default_validity: {{ .defaultValidity }} background: writeback_goroutines: {{ .writebackParallelism }} writeback_buffer: {{ .writebackBuffer }} writeback_size_limit: {{ .writebackSizeLimit }} memcached: batch_size: {{ .batchSize }} parallelism: {{ .parallelism }} memcached_client: addresses: {{ .addresses }} consistent_hash: true timeout: {{ .timeout }} max_idle_conns: 72 {{- end }} {{- with .Values.chunksCache.l2 }} {{- if .enabled }} l2_chunk_cache_handoff: {{ .l2ChunkCacheHandoff }} chunk_cache_config_l2: default_validity: {{ .defaultValidity }} background: writeback_goroutines: {{ .writebackParallelism }} writeback_buffer: {{ .writebackBuffer }} writeback_size_limit: {{ .writebackSizeLimit }} memcached: batch_size: {{ .batchSize }} parallelism: {{ .parallelism }} memcached_client: addresses: {{ .addresses }} consistent_hash: true timeout: {{ .timeout }} max_idle_conns: 72 {{- end }} {{- end }} {{- end }} {{- if .Values.loki.schemaConfig }} schema_config: {{- toYaml .Values.loki.schemaConfig | nindent 2}} {{- end }} {{- if .Values.loki.useTestSchema }} schema_config: {{- toYaml .Values.loki.testSchemaConfig | nindent 2}} {{- end }} {{- if .Values.ruler.enabled }} {{ include "loki.rulerConfig" . }} {{- end }} {{- if and .Values.loki.storage.use_thanos_objstore .Values.ruler.enabled}} ruler_storage: {{- include "loki.rulerThanosStorageConfig" . | nindent 2 }} {{- end }} {{- if or .Values.tableManager.retention_deletes_enabled .Values.tableManager.retention_period }} table_manager: retention_deletes_enabled: {{ .Values.tableManager.retention_deletes_enabled }} retention_period: {{ .Values.tableManager.retention_period }} {{- end }} query_range: align_queries_with_step: true {{- with .Values.loki.query_range }} {{- tpl (. | toYaml) $ | nindent 2 }} {{- end }} {{- if .Values.resultsCache.enabled }} {{- with .Values.resultsCache }} cache_results: true results_cache: cache: default_validity: {{ .defaultValidity }} background: writeback_goroutines: {{ .writebackParallelism }} writeback_buffer: {{ .writebackBuffer }} writeback_size_limit: {{ .writebackSizeLimit }} memcached_client: addresses: {{ .addresses }} consistent_hash: true timeout: {{ .timeout }} update_interval: 1m {{- end }} {{- end }} {{- with .Values.loki.storage_config }} storage_config: {{- if not (hasKey $.Values.loki.storage_config "use_thanos_objstore") }} use_thanos_objstore: {{ $.Values.loki.storage.use_thanos_objstore }} {{- end }} {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.query_scheduler }} query_scheduler: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.compactor }} compactor: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.compactor_grpc_client }} compactor_grpc_client: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.analytics }} analytics: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- if .Values.loki.ui.enabled }} ui: enabled: true {{- end }} {{- with .Values.loki.querier }} querier: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.index_gateway }} index_gateway: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.frontend }} frontend: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.frontend_worker }} frontend_worker: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.distributor }} distributor: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} tracing: enabled: {{ .Values.loki.tracing.enabled }} {{- with .Values.loki.bloom_build }} bloom_build: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.bloom_gateway }} bloom_gateway: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} {{- with .Values.loki.operational_config }} operational_config: {{- tpl (. | toYaml) $ | nindent 4 }} {{- end }} # Should authentication be enabled auth_enabled: true # @schema skipProperties:true;additionalProperties:true # -- memberlist configuration (overrides embedded default) memberlistConfig: {} # @schema skipProperties:true;additionalProperties:true # -- Extra memberlist configuration extraMemberlistConfig: abort_if_cluster_join_fails: true advertise_port: 7946 bind_port: 7946 max_join_backoff: 1m max_join_retries: 10 min_join_backoff: 1s rejoin_interval: 90s # -- Tenants list to be created on nginx htpasswd file, with name and password or passwordHash keys

# Example: #
  # tenants:
# - name: "test-user-1"
# password: "test-password-1"
# - name: "test-user-2"
# passwordHash: "$2y$10$7O40CaY1yz7fu9O24k2/u.ct/wELYHRBsn25v/7AyuQ8E8hrLqpva" # generated using `htpasswd -nbBC10 test-user-2 test-password-2` #
tenants: [] # @schema skipProperties:true;additionalProperties:true # -- Check https://grafana.com/docs/loki/latest/configuration/#server for more info on the server configuration. server: graceful_shutdown_timeout: 5s grpc_listen_port: 9095 grpc_server_min_time_between_pings: '10s' grpc_server_ping_without_stream_allowed: true grpc_server_max_concurrent_streams: 1000 grpc_server_max_recv_msg_size: 104857600 grpc_server_max_send_msg_size: 104857600 http_listen_port: 3100 http_server_idle_timeout: 30s http_server_read_timeout: 10m0s http_server_write_timeout: 10m0s log_level: info service: # -- trafficDistribution for services # Ref: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-distribution trafficDistribution: "" # -- ipFamilyPolicy for all services # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for all services # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # @schema skipProperties:true;additionalProperties:true # -- Limits config limits_config: reject_old_samples: true reject_old_samples_max_age: 168h max_cache_freshness_per_query: 10m split_queries_by_interval: 15m query_timeout: 300s volume_enabled: true # -- Provides a reloadable runtime configuration file for some specific configuration runtimeConfig: {} # @schema skipProperties:true;additionalProperties:true # -- Check https://grafana.com/docs/loki/latest/configuration/#common_config for more info on how to provide a common configuration commonConfig: path_prefix: /var/loki replication_factor: 3 # -- The gRPC address of the compactor. The use of compactor_grpc_address is preferred over compactor_address. # If a customized compactor_address is set, compactor_grpc_address should be set to an empty string. compactor_grpc_address: '{{ include "loki.compactorAddress" . }}' # @schema skipProperties:true;additionalProperties:true # -- Storage config. Providing this will automatically populate all necessary storage configs in the templated config. # -- In case of using thanos storage, enable use_thanos_objstore and the configuration should be done inside the object_store section. storage: # Loki requires a bucket for chunks and the ruler. # Please provide these values if you are using object storage. # bucketNames: # chunks: FIXME # ruler: FIXME type: s3 s3: # @schema type:[string, null] s3: null # @schema type:[string, null] endpoint: null # @schema type:[string, null] region: null # @schema type:[string, null] secretAccessKey: null # @schema type:[string, null] accessKeyId: null # @schema type:[string, null] signatureVersion: null s3ForcePathStyle: false insecure: false http_config: {} # -- Check https://grafana.com/docs/loki/latest/configure/#s3_storage_config for more info on how to provide a backoff_config backoff_config: {} disable_dualstack: false gcs: chunkBufferSize: 0 requestTimeout: "0s" enableHttp2: true azure: # @schema type:[string, null] accountName: null # @schema type:[string, null] accountKey: null # @schema type:[string, null] connectionString: null useManagedIdentity: false useFederatedToken: false # @schema type:[string, null] userAssignedId: null # @schema type:[string, null] requestTimeout: null # @schema type:[string, null] endpointSuffix: null # @schema type:[string, null] chunkDelimiter: null swift: # @schema type:[string, null] auth_version: null # @schema type:[string, null] auth_url: null # @schema type:[string, null] internal: null # @schema type:[string, null] username: null # @schema type:[string, null] user_domain_name: null # @schema type:[string, null] user_domain_id: null # @schema type:[string, null] user_id: null # @schema type:[string, null] password: null # @schema type:[string, null] domain_id: null # @schema type:[string, null] domain_name: null # @schema type:[string, null] project_id: null # @schema type:[string, null] project_name: null # @schema type:[string, null] project_domain_id: null # @schema type:[string, null] project_domain_name: null # @schema type:[string, null] region_name: null # @schema type:[string, null] container_name: null # @schema type:[string, null] max_retries: null # @schema type:[string, null] connect_timeout: null # @schema type:[string, null] request_timeout: null filesystem: chunks_directory: /var/loki/chunks rules_directory: /var/loki/rules # Loki now supports using thanos storage clients for connecting to object storage backend. # This will become the default way to configure storage in a future releases. use_thanos_objstore: false # @schema skipProperties:true;additionalProperties:true object_store: # Type of object store. Valid options are: s3, gcs, azure type: s3 # @schema type:[string, null] # Optional prefix for storage keys storage_prefix: null # S3 configuration (when type is "s3") s3: # @schema type:[string, null] # S3 endpoint URL endpoint: null # @schema type:[string, null] # Optional region region: null # @schema type:[string, null] # Optional access key access_key_id: null # @schema type:[string, null] # Optional secret key secret_access_key: null # Optional. Enable if using self-signed TLS insecure: false # Optional server-side encryption configuration sse: {} # Optional HTTP client configuration http: {} # GCS configuration (when type is "gcs") gcs: # @schema type:[string, null] # Name of the bucket bucket_name: null # @schema type:[string, null] # Optional service account JSON service_account: null # Azure configuration (when type is "azure") azure: # @schema type:[string, null] # Storage account name account_name: null # @schema type:[string, null] # Optional storage account key account_key: null # -- Check https://grafana.com/docs/loki/latest/configuration/#schema_config for more info on how to configure schemas schemaConfig: {} # -- a real Loki install requires a proper schemaConfig defined above this, however for testing or playing around # you can enable useTestSchema useTestSchema: false # @schema skipProperties:true;additionalProperties:true testSchemaConfig: configs: - from: 2024-04-01 store: tsdb object_store: '{{ include "loki.testSchemaObjectStore" . }}' schema: v13 index: prefix: index_ period: 24h # @schema skipProperties:true;additionalProperties:true ## A separate loki ruler storage configuration can be provided via rulerStorage.storage section: ## rulerConfig: ## storage: ## type: local # -- Check https://grafana.com/docs/loki/latest/configuration/#ruler for more info on configuring ruler rulerConfig: wal: dir: /var/loki/ruler-wal # -- Storage for the ruler. If defining rules in `ruler.directories`, this must be configured to use local storage as shown below. # storage: # type: local # local: # directory: /etc/loki/rules # @schema skipProperties:true;additionalProperties:true # -- Structured loki configuration, takes precedence over `loki.config`, `loki.schemaConfig`, `loki.storageConfig` structuredConfig: {} # @schema skipProperties:true;additionalProperties:true # -- Additional query scheduler config query_scheduler: {} # @schema skipProperties:true;additionalProperties:true # -- Additional storage config storage_config: boltdb_shipper: index_gateway_client: server_address: '{{ include "loki.indexGatewayAddress" . }}' tsdb_shipper: index_gateway_client: server_address: '{{ include "loki.indexGatewayAddress" . }}' bloom_shipper: working_directory: /var/loki/data/bloomshipper hedging: at: "250ms" max_per_second: 20 up_to: 3 # @schema skipProperties:true;additionalProperties:true # -- Optional compactor configuration compactor: {} # @schema skipProperties:true;additionalProperties:true # -- Optional compactor grpc client configuration compactor_grpc_client: {} # @schema skipProperties:true;additionalProperties:true # -- Optional pattern ingester configuration pattern_ingester: enabled: false # @schema skipProperties:true;additionalProperties:true # -- Optional analytics configuration analytics: {} # @schema skipProperties:true;additionalProperties:true # -- Optional Loki UI: Provides access to a operators UI for Loki distributed. When enabled UI will be available at /ui/ of loki-gateway ui: # Disabled by default for backwards compatibility. Enable to use the Loki UI. enabled: false gateway: # enable gateway proxying to UI under /ui enabled: true # @schema skipProperties:true;additionalProperties:true # -- Optional querier configuration query_range: {} # @schema skipProperties:true;additionalProperties:true # -- Optional querier configuration querier: {} # @schema skipProperties:true;additionalProperties:true # -- Optional ingester configuration ingester: wal: flush_on_shutdown: true # @schema skipProperties:true;additionalProperties:true # -- Optional ingester client configuration ingester_client: {} # @schema skipProperties:true;additionalProperties:true # -- Optional block builder configuration block_builder: {} # @schema skipProperties:true;additionalProperties:true # -- Optional index gateway configuration index_gateway: mode: simple # @schema skipProperties:true;additionalProperties:true frontend: scheduler_address: '{{ include "loki.querySchedulerAddress" . }}' tail_proxy_url: '{{ include "loki.querierAddress" . }}' # @schema skipProperties:true;additionalProperties:true frontend_worker: scheduler_address: '{{ include "loki.querySchedulerAddress" . }}' # @schema skipProperties:true;additionalProperties:true # -- Optional distributor configuration distributor: {} # @schema skipProperties:true;additionalProperties:true # -- Enable tracing tracing: enabled: false # @schema skipProperties:true;additionalProperties:true bloom_build: enabled: false builder: planner_address: '{{ include "loki.bloomPlannerAddress" . }}' # @schema skipProperties:true;additionalProperties:true bloom_gateway: enabled: false client: addresses: '{{ include "loki.bloomGatewayAddresses" . }}' # @schema skipProperties:true;additionalProperties:true # -- Optional operational configuration operational_config: {} ###################################################################################################################### # # Chart Testing # ###################################################################################################################### # -- Section for configuring optional Helm test test: enabled: true # -- Used to directly query the metrics endpoint of the canary for testing, this approach avoids needing prometheus for testing. # This in a newer approach to using prometheusAddress such that tests do not have a dependency on prometheus canaryServiceAddress: 'http://{{ include "loki-canary.fullname" $ }}.{{ include "loki.namespace" $ }}.svc.{{ .Values.global.clusterDomain }}:3500/metrics' # -- Address of the prometheus server to query for the test. This overrides any value set for canaryServiceAddress. # This is kept for backward compatibility and may be removed in future releases. Previous value was 'http://prometheus:9090' prometheusAddress: "" # -- Number of times to retry the test before failing timeout: 1m # @schema additionalProperties:{"type":"string"} # -- Additional labels for the test pods labels: {} # @schema additionalProperties:{"type":"string"} # -- Additional annotations for test pods annotations: {} # -- Image to use for loki canary image: # -- The Docker registry registry: docker.io # -- Docker image repository repository: grafana/loki-helm-test # -- Overrides the image tag whose default is the chart's appVersion tag: "latest" # @schema type:[string, null] # -- Overrides the image tag with an image digest digest: null # -- Docker image pull policy pullPolicy: IfNotPresent # @schema type:[boolean, null] # -- Use the host's user namespace in test pods hostUsers: null # The Loki canary pushes logs to and queries from this loki installation to test # that it's working correctly lokiCanary: enabled: true # -- The type of the loki canary k8s rollout. This can be a DaemonSet or Deployment. kind: DaemonSet # -- If true, the canary will send directly to Loki via the address configured for verification -- # -- If false, it will write to stdout and an Agent will be needed to scrape and send the logs -- push: true # @schema type:[string, null] # -- If set overwrites the default value set by loki.host helper function. Use this if gateway not enabled. lokiurl: null # -- The name of the label to look for at loki when doing the checks. labelname: pod # @schema additionalProperties:{"type":"string"} # -- Additional annotations for the `loki-canary` Daemonset annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for the `loki-canary` Daemonset labels: {} # @schema additionalProperties:{"type":"string"} # -- Additional annotations for each `loki-canary` pod podAnnotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for each `loki-canary` pod podLabels: {} # -- The number of old ReplicaSets to retain to allow rollback revisionHistoryLimit: 10 service: # @schema additionalProperties:{"type":"string"} # -- Annotations for loki-canary Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for loki-canary Service labels: {} # -- Additional CLI arguments for the 'loki-canary' command extraArgs: [] # -- Environment variables to add to the canary pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the canary pods extraEnvFrom: [] # -- Volume mounts to add to the canary pods extraVolumeMounts: [] # -- Volumes to add to the canary pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the canary resources: {} # -- Container resize policy for the canary # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema additionalProperties:true # -- DNS config for canary pods dnsConfig: {} # @schema additionalProperties:true # -- Node selector for canary pods nodeSelector: {} # -- Tolerations for canary pods tolerations: [] # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for canary pods affinity: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: false # @schema type:[string, null] # -- The name of the PriorityClass for loki-canary pods priorityClassName: null # @schema type:[boolean, null] # -- Use the host's user namespace in loki-canary pods hostUsers: null podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for loki-canary pods podSecurityContext: fsGroup: 10001 fsGroupChangePolicy: OnRootMismatch runAsGroup: 10001 runAsNonRoot: true runAsUser: 10001 seccompProfile: type: RuntimeDefault # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for loki-canary containers containerSecurityContext: readOnlyRootFilesystem: true capabilities: drop: - ALL allowPrivilegeEscalation: false seccompProfile: type: RuntimeDefault # -- Image to use for loki canary image: # -- The Docker registry registry: docker.io # -- Docker image repository repository: grafana/loki-canary # @schema type:[string, null] # -- Overrides the image tag whose default is the chart's appVersion tag: null # @schema type:[string, null] # -- Overrides the image tag with an image digest digest: null # -- Docker image pull policy pullPolicy: IfNotPresent # @schema skipProperties:true;additionalProperties:true # -- Liveness probe livenessProbe: httpGet: path: /metrics port: http-metrics initialDelaySeconds: 15 timeoutSeconds: 1 # @schema skipProperties:true;additionalProperties:true # -- Readiness probe readinessProbe: httpGet: path: /metrics port: http-metrics initialDelaySeconds: 15 timeoutSeconds: 1 # @schema skipProperties:true;additionalProperties:true # -- Startup probe startupProbe: {} # @schema skipProperties:true;additionalProperties:true # -- Update strategy for the `loki-canary` Daemonset pods updateStrategy: type: RollingUpdate rollingUpdate: # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: 1 # -- Replicas for `loki-canary` when using a Deployment replicas: 1 # -- Tenant to use for loki-canary tenant: # -- Name of the tenant for loki-canary name: "self-monitoring" # @schema type:[string, null] # -- Password of the gateway for Basic auth for loki-canary password: null serviceAccount: # -- Specifies whether a ServiceAccount should be created create: true # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: false ###################################################################################################################### # # Service Accounts and Kubernetes RBAC # ###################################################################################################################### serviceAccount: # -- Specifies whether a ServiceAccount should be created create: true # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # RBAC configuration rbac: # -- For OpenShift set sccEnabled to 'true' to use the SecurityContextConstraints. sccEnabled: false # -- Toggle this to true to allow the use of hostPath volumes on OpenShift sccAllowHostDirVolumePlugin: false # -- Whether to install RBAC in the namespace only or cluster-wide. Useful if you want to watch ConfigMap globally. namespaced: false ###################################################################################################################### # # Network Policy configuration # ###################################################################################################################### networkPolicy: # -- Specifies whether Network Policies should be created enabled: false metrics: # -- Specifies the Pods which are allowed to access the metrics port. # As this is cross-namespace communication, you also need the namespaceSelector. podSelector: {} # -- Specifies the namespaces which are allowed to access the metrics port namespaceSelector: {} # -- Specifies specific network CIDRs which are allowed to access the metrics port. # In case you use namespaceSelector, you also have to specify your kubelet networks here. # The metrics ports are also used for probes. cidrs: [] ingress: # -- Specifies the Pods which are allowed to access the http port. # As this is cross-namespace communication, you also need the namespaceSelector. podSelector: {} # -- Specifies the namespaces which are allowed to access the http port namespaceSelector: {} alertmanager: # @schema type:[string, integer] # -- Specify the Alertmanager port used for alerting port: 9093 # -- Specifies the Alertmanager Pods. # As this is cross-namespace communication, you also need the namespaceSelector. podSelector: {} # -- Specifies the namespace the Alertmanager is running in namespaceSelector: {} externalStorage: # -- Specify the port used for external storage, e.g. AWS S3 ports: [] # -- Specifies specific network CIDRs you want to limit access to cidrs: [] discovery: # @schema type:[string, integer, null] # -- (int) Specify the port used for discovery port: null # -- Specifies the Pods labels used for discovery. # As this is cross-namespace communication, you also need the namespaceSelector. podSelector: {} # -- Specifies the namespace the discovery Pods are running in namespaceSelector: {} ###################################################################################################################### # # Global memberlist configuration # ###################################################################################################################### # Configuration for the memberlist service memberlist: service: publishNotReadyAddresses: false # @schema additionalProperties:{"type":"string"} annotations: {} ###################################################################################################################### # # Gateway and Ingress # # By default this chart will deploy a Nginx container to act as a gateway which handles routing of traffic # and can also do auth. # # If you would prefer you can optionally disable this and enable using k8s ingress to do the incoming routing. # ###################################################################################################################### # Configuration for the gateway gateway: # -- Specifies whether the gateway should be enabled enabled: true # -- Number of replicas for the gateway replicas: 1 # -- Default container port containerPort: 8080 # -- Enable logging of 2xx and 3xx HTTP requests verboseLogging: true autoscaling: # -- Enable autoscaling for the gateway enabled: false # -- Minimum autoscaling replicas for the gateway minReplicas: 1 # -- Maximum autoscaling replicas for the gateway maxReplicas: 3 # @schema type:[integer, null] # -- Target CPU utilisation percentage for the gateway targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilisation percentage for the gateway targetMemoryUtilizationPercentage: null # @schema skipProperties:true;additionalProperties:true # -- See `kubectl explain deployment.spec.strategy` for more # -- ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy # -- Behavior policies while scaling. behavior: {} # scaleUp: # stabilizationWindowSeconds: 300 # policies: # - type: Pods # value: 1 # periodSeconds: 60 # scaleDown: # stabilizationWindowSeconds: 300 # policies: # - type: Pods # value: 1 # periodSeconds: 180 kedaAutoscaling: # -- Enable KEDA autoscaling for the gateway. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 1 # -- Maximum replicas for KEDA autoscaling maxReplicas: 3 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the gateway. # Ref: https://keda.sh/docs/latest/scalers/ triggers: [] deploymentStrategy: type: RollingUpdate image: # -- The Docker registry for the gateway image registry: docker.io # -- The gateway image repository repository: nginxinc/nginx-unprivileged # -- The gateway image tag tag: 1.31-alpine # @schema type:[string, null] # -- Overrides the gateway image tag with an image digest digest: null # -- The gateway image pull policy pullPolicy: IfNotPresent # @schema type:[string, null] # -- The name of the PriorityClass for gateway pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for gateway deployment annotations: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for gateway pods podAnnotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for gateway pods podLabels: {} # -- Additional CLI args for the gateway extraArgs: [] # -- Environment variables to add to the gateway pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the gateway pods extraEnvFrom: [] # -- Lifecycle for the gateway container lifecycle: {} # -- Volumes to add to the gateway pods extraVolumes: [] # -- Volume mounts to add to the gateway pods extraVolumeMounts: [] # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for gateway containers podSecurityContext: fsGroup: 101 runAsGroup: 101 runAsNonRoot: true runAsUser: 101 seccompProfile: type: RuntimeDefault # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for gateway containers containerSecurityContext: readOnlyRootFilesystem: true capabilities: drop: ["ALL"] seccompProfile: type: "RuntimeDefault" allowPrivilegeEscalation: false # @schema type:[boolean, null] # -- Use the host's user namespace in the gateway hostUsers: null # @schema additionalProperties:true # -- Resource requests and limits for the gateway resources: {} # -- Container resize policy for the gateway # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[array, null] # -- Containers to add to the gateway pods extraContainers: [] # -- Grace period to allow the gateway to shutdown before it is killed terminationGracePeriodSeconds: 30 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for gateway pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: gateway app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema additionalProperties:true # -- DNS config for gateway pods dnsConfig: {} # @schema additionalProperties:true # -- Node selector for gateway pods nodeSelector: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: false # @schema item:object # -- Topology Spread Constraints for gateway pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # Gateway service configuration service: # -- Port of the gateway service port: 80 # -- Type of the gateway service type: ClusterIP # @schema type:[string, null] # -- ClusterIP of the gateway service clusterIP: null # @schema type:[integer, null] # -- (int) Node port if service type is NodePort nodePort: null # @schema type:[string, null] # -- Load balancer IPO address if service type is LoadBalancer loadBalancerIP: null # @schema additionalProperties:{"type":"string"} # -- Annotations for the gateway service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for gateway service labels: {} # -- trafficDistribution for gateway Service trafficDistribution: "" # -- Session affinity for gateway Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for gateway Service sessionAffinityConfig: {} # -- ipFamilyPolicy for gateway Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for gateway Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] serviceAccount: # -- Specifies whether a ServiceAccount should be created create: true # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: false # Gateway ingress configuration ingress: # -- Specifies whether an ingress for the gateway should be created enabled: false # -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18 ingressClassName: "" # @schema additionalProperties:{"type":"string"} # -- Annotations for the gateway ingress annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the gateway ingress labels: {} # -- Hosts configuration for the gateway ingress, passed through the `tpl` function to allow templating hosts: - host: gateway.loki.example.com paths: - path: / # -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers # pathType: Prefix # -- TLS configuration for the gateway ingress. Hosts passed through the `tpl` function to allow templating tls: - secretName: loki-gateway-tls hosts: - gateway.loki.example.com # Basic auth configuration basicAuth: # -- Enables basic authentication for the gateway enabled: false # @schema type:[string, null] # -- The basic auth username for the gateway username: null # @schema type:[string, null] # -- The basic auth password for the gateway password: null # -- Uses the specified users from the `loki.tenants` list to create the htpasswd file. # if `loki.tenants` is not set, the `gateway.basicAuth.username` and `gateway.basicAuth.password` are used. # The value is templated using `tpl`. Override this to use a custom htpasswd, e.g. in case the default causes # high CPU load. # @default -- Either `loki.tenants` or `gateway.basicAuth.username` and `gateway.basicAuth.password`. htpasswd: | {{- with $tenants := .Values.loki.tenants }} {{- range $t := $tenants }} {{- $username := required "All tenants must have a 'name' set" $t.name }} {{- if $passwordHash := $t.passwordHash }} {{- printf "%s:%s\n" $username $passwordHash }} {{- else if $password := $t.password }} {{- printf "%s\n" (htpasswd $username $password) }} {{- else }} {{- fail "All tenants must have a 'password' or 'passwordHash' set" }} {{- end }} {{- end }} {{- else }} {{- printf "%s\n" (htpasswd (required "'gateway.basicAuth.username' is required" .Values.gateway.basicAuth.username) (required "'gateway.basicAuth.password' is required" .Values.gateway.basicAuth.password)) }} {{- end }} # @schema type:[string, null] # -- Existing basic auth secret to use. Must contain '.htpasswd' existingSecret: null # -- Gateway API routes configuration. Mutually exclusive with gateway.ingress. # Use either ingress or route, but not both at once. # Each entry in the map creates a separate HTTPRoute resource. The key "main" produces # a route named after the gateway fullname; any other key appends the key as a suffix. # This allows defining multiple routes, e.g. one HTTPRoute and one GRPCRoute. route: main: # -- Specifies whether this Gateway API route should be created enabled: false # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1. # If not set, the latest available version will be auto-detected. apiVersion: "" # -- Set the route kind. Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute kind: HTTPRoute # @schema additionalProperties:{"type":"string"} # -- Additional annotations for the route annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for the route labels: {} # -- Hostnames for the route hostnames: [] # - gateway.loki.example.com # -- Parent gateway references to attach the route to parentRefs: [] # - name: my-gateway # namespace: gateway-namespace # -- Additional rules to prepend before the default catch-all rule. # Each entry is rendered into spec.rules as written (templating is supported), # so any HTTPRoute/GRPCRoute rule shape is accepted — including filter-only rules # with no backendRefs (e.g. RequestRedirect, URLRewrite). # Useful for advanced routing logic (e.g. header-based routing, auth policies, redirects). # Note: the chart-generated rule that points at the gateway service is always rendered # for this route — additionalRules are prepended, not a replacement. # Example HTTP-to-HTTPS redirect: # additionalRules: # - filters: # - type: RequestRedirect # requestRedirect: # scheme: https # statusCode: 301 # matches: # - path: { type: PathPrefix, value: / } additionalRules: [] # -- Matches for the default rule. Defaults to match all paths. matches: - path: type: PathPrefix value: / # -- Filters for the default rule filters: [] # -- Timeouts for the default rule timeouts: {} # @schema skipProperties:true;additionalProperties:true # -- liveness probe for the nginx container in the gateway pods. livenessProbe: {} # @schema skipProperties:true;additionalProperties:true # Configures the readiness probe for the gateway readinessProbe: httpGet: path: / port: http initialDelaySeconds: 15 timeoutSeconds: 1 # @schema skipProperties:true;additionalProperties:true # -- startup probe for the nginx container in the gateway pods. startupProbe: {} nginxConfig: # -- Which schema to be used when building URLs. Can be 'http' or 'https'. schema: http # -- Enable listener for IPv6, disable on IPv4-only systems enableIPv6: true # -- NGINX log format logFormat: |- main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # -- Allows appending custom configuration to the server block serverSnippet: "" # -- Allows appending custom configuration to the http block, passed through the `tpl` function to allow templating httpSnippet: "" # -- Allows appending custom configuration inside every location block, useful for authentication or setting headers that are not inherited from the server block, passed through the `tpl` function to allow templating. locationSnippet: >- {{ if .Values.loki.tenants }}proxy_set_header X-Scope-OrgID $remote_user;{{ end }} # -- Allows customizing the `client_max_body_size` directive clientMaxBodySize: 4M # -- Whether ssl should be appended to the listen directive of the server block or not. ssl: false # @schema type:[string, null] # -- Override Read URL customReadUrl: null # @schema type:[string, null] # -- Override Write URL customWriteUrl: null # @schema type:[string, null] # -- Override Backend URL customBackendUrl: null # -- Allows overriding the DNS resolver address nginx will use. resolver: "" # -- Config file contents for Nginx. Passed through the `tpl` function to allow templating # @default -- See values.yaml file: | {{- include "loki.nginxFile" . -}} metrics: # -- Whether gateway metrics should be exported enabled: true image: registry: ghcr.io repository: "jkroepke/access-log-exporter" tag: "0.4.13" pullPolicy: IfNotPresent # @schema additionalProperties:true resources: requests: {} limits: {} # -- Container resize policy for the gateway metrics exporter # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for memcached exporter containers containerSecurityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: drop: ["ALL"] seccompProfile: type: RuntimeDefault privileged: false runAsNonRoot: true runAsUser: 65532 runAsGroup: 65532 # -- Extra args to add to the exporter container. extraArgs: [] # @schema skipProperties:true;additionalProperties:true # -- Liveness probe for memcached exporter livenessProbe: httpGet: path: /health port: http-metrics initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 # @schema skipProperties:true;additionalProperties:true # -- Readiness probe for memcached exporter readinessProbe: httpGet: path: /health port: http-metrics initialDelaySeconds: 5 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 3 # @schema skipProperties:true;additionalProperties:true # -- Startup probe for memcached exporter startupProbe: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for the gateway metrics exporter service. # Use this instead of gateway.service.annotations to avoid propagating # annotations (e.g. external-dns) to the exporter ClusterIP service. annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the gateway metrics exporter service. labels: {} # -- Ingress configuration Use either this ingress or the gateway, but not both at once. # If you enable this, make sure to disable the gateway. # You'll need to supply authn configuration for your ingress controller. ingress: enabled: false ingressClassName: "" # @schema additionalProperties:{"type":"string"} annotations: {} # @schema additionalProperties:{"type":"string"} # nginx.ingress.kubernetes.io/auth-type: basic # nginx.ingress.kubernetes.io/auth-secret: loki-distributed-basic-auth # nginx.ingress.kubernetes.io/auth-secret-type: auth-map # nginx.ingress.kubernetes.io/configuration-snippet: | # proxy_set_header X-Scope-OrgID $remote_user; labels: {} # blackbox.monitoring.exclude: "true" paths: # -- Paths that are exposed by Loki Distributor. # If deployment mode is Distributed, the requests are forwarded to the service:. # If deployment mode is SimpleScalable, the requests are forwarded to write k8s service:. # If deployment mode is SingleBinary, the requests are forwarded to the central/single k8s service: distributor: - /api/prom/push - /loki/api/v1/push - /otlp/v1/logs # -- Paths that are exposed by Loki Query Frontend. # If deployment mode is Distributed, the requests are forwarded to the service. # If deployment mode is SimpleScalable, the requests are forwarded to write k8s service`. # If deployment mode is SingleBinary, the requests are forwarded to the central/single k8s service` queryFrontend: - /api/prom/query # this path covers labels and labelValues endpoints - /api/prom/label - /api/prom/series - /api/prom/tail - /loki/api/v1/query - /loki/api/v1/query_range - /loki/api/v1/tail # this path covers labels and labelValues endpoints - /loki/api/v1/label - /loki/api/v1/labels - /loki/api/v1/series - /loki/api/v1/index/stats - /loki/api/v1/index/volume - /loki/api/v1/index/volume_range - /loki/api/v1/format_query - /loki/api/v1/detected_field - /loki/api/v1/detected_fields - /loki/api/v1/detected_labels - /loki/api/v1/patterns # this path covers UI API - /ui # -- Paths that are exposed by Loki Ruler. # If deployment mode is Distributed, the requests are forwarded to the service. # If deployment mode is SimpleScalable, the requests are forwarded to k8s service. # If deployment mode is SingleBinary, the requests are forwarded to the central/single k8s service ruler: - /api/prom/rules - /api/prom/api/v1/rules - /api/prom/api/v1/alerts - /loki/api/v1/rules - /prometheus/api/v1/rules - /prometheus/api/v1/alerts # -- Paths that are exposed by Loki Compactor. # If deployment mode is Distributed, the requests are forwarded to the service. # If deployment mode is SimpleScalable, the requests are forwarded to k8s service. # If deployment mode is SingleBinary, the requests are forwarded to the central/single k8s service` compactor: - /loki/api/v1/delete # -- Hosts configuration for the ingress, passed through the `tpl` function to allow templating hosts: - loki.example.com # -- TLS configuration for the ingress. Hosts passed through the `tpl` function to allow templating tls: [] # - hosts: # - loki.example.com # secretName: loki-distributed-tls # -- Gateway API routes for direct routing to Loki services, bypassing the nginx gateway. # Use either this or the top-level ingress, but not both at once. # Each entry in the map creates a separate HTTPRoute resource. The key "main" produces # a route named after the loki fullname; any other key appends the key as a suffix. # This allows defining multiple routes, e.g. one HTTPRoute and one GRPCRoute. route: main: # -- Specifies whether this Gateway API route should be created enabled: false # -- Gateway API version to use. Auto-detected from cluster capabilities if empty. apiVersion: "" # -- Kind of the route resource. Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute kind: HTTPRoute # @schema additionalProperties:{"type":"string"} # -- Annotations for the route annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the route labels: {} # -- Hostnames for the route hostnames: [] # -- Parent references for the route (required for Gateway API) parentRefs: [] # -- Additional rules to prepend before the generated path-routing rules. # Each entry is rendered into spec.rules as written (templating is supported), # so any HTTPRoute/GRPCRoute rule shape is accepted — including filter-only rules # with no backendRefs (e.g. RequestRedirect, URLRewrite). additionalRules: [] # @schema type:[integer, null] # -- Backend port override for all generated rules. # When unset, GRPCRoute automatically uses loki.server.grpc_listen_port (default 9095) # and all other kinds use loki.server.http_listen_port (default 3100). backendPort: null # -- Paths routed to each Loki service group. The target service depends on the deployment mode. # To produce a route that contains only `additionalRules` and no chart-generated path rules # (for example, a dedicated HTTP-to-HTTPS redirect route), set every entry below to an empty # list — e.g. `distributor: []`, `queryFrontend: []`, `ruler: []`, `compactor: []`. paths: # -- Paths that are exposed by Loki Distributor. # If deployment mode is Distributed, the requests are forwarded to the service: `{{"loki.distributorFullname"}}`. # If deployment mode is SimpleScalable, the requests are forwarded to write k8s service: `{{"loki.writeFullname"}}`. # If deployment mode is SingleBinary, the requests are forwarded to the central/single k8s service: `{{"loki.fullname"}}` distributor: - /api/prom/push - /loki/api/v1/push - /otlp/v1/logs # -- Paths that are exposed by Loki Query Frontend. # If deployment mode is Distributed, the requests are forwarded to the service. # If deployment mode is SimpleScalable, the requests are forwarded to read k8s service. # If deployment mode is SingleBinary, the requests are forwarded to the central/single k8s service` queryFrontend: - /api/prom/query # this path covers labels and labelValues endpoints - /api/prom/label - /api/prom/series - /api/prom/tail - /loki/api/v1/query - /loki/api/v1/query_range - /loki/api/v1/tail # this path covers labels and labelValues endpoints - /loki/api/v1/label - /loki/api/v1/labels - /loki/api/v1/series - /loki/api/v1/index/stats - /loki/api/v1/index/volume - /loki/api/v1/index/volume_range - /loki/api/v1/format_query - /loki/api/v1/detected_field - /loki/api/v1/detected_fields - /loki/api/v1/detected_labels - /loki/api/v1/patterns # this path covers UI API - /ui # -- Paths that are exposed by Loki Ruler. # If deployment mode is Distributed, the requests are forwarded to the service. # If deployment mode is SimpleScalable, the requests are forwarded to k8s service. # If deployment mode is SingleBinary, the requests are forwarded to the central/single k8s service. ruler: - /api/prom/rules - /api/prom/api/v1/rules - /api/prom/api/v1/alerts - /loki/api/v1/rules - /prometheus/api/v1/rules - /prometheus/api/v1/alerts # -- Paths that are exposed by Loki Compactor. # If deployment mode is Distributed, the requests are forwarded to the service. # If deployment mode is SimpleScalable, the requests are forwarded to k8s service. # If deployment mode is SingleBinary, the requests are forwarded to the central/single k8s service. compactor: - /loki/api/v1/delete ###################################################################################################################### # # Migration # ###################################################################################################################### # -- Options that may be necessary when performing a migration from another helm chart migrate: # -- When migrating from a distributed chart like loki-distributed or enterprise-logs fromDistributed: # -- Set to true if migrating from a distributed helm chart enabled: false # -- If migrating from a distributed service, provide the distributed deployment's # memberlist service DNS so the new deployment can join its ring. memberlistService: "" ###################################################################################################################### # # Single Binary Deployment # # For small Loki installations up to a few 10's of GB per day, or for testing and development. # ###################################################################################################################### # -- Pod Disruption Budget for single binary deployment. Deprecated in favor of `singleBinary.podDisruptionBudget` podDisruptionBudget: enabled: true # Configuration for the single binary node(s) singleBinary: # -- Enable the single binary component. Requires `loki.deploymentMode` to be set to `SingleBinary`. enabled: true # -- Kind of read deployment. StatefulSet and Deployment are supported. kind: StatefulSet # @schema type:[integer, null] # -- Number of replicas for the single binary. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # -- EXPERIMENTAL: Enable creating a Job to recreate the write StatefulSet when the compactor configuration is changed. ## Only applicable if `compactor.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for single binary. strategy: rollingUpdate: partition: 0 # -- Whether to enable the rules sidecar sidecar: true autoscaling: # -- Enable autoscaling enabled: false # -- Minimum autoscaling replicas for the single binary minReplicas: 1 # -- Maximum autoscaling replicas for the single binary maxReplicas: 3 # @schema type:[integer, null] # -- Target CPU utilisation percentage for the single binary targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilisation percentage for the single binary targetMemoryUtilizationPercentage: null # -- Allows one to define custom metrics using the HPA/v2 schema (for example, Pods, Object or External metrics) customMetrics: [] # - type: Pods # pods: # metric: # name: loki_lines_total # target: # type: AverageValue # averageValue: 10k # @schema skipProperties:true;additionalProperties:true # -- HPA behavior configuration, passed directly as a K8s HPA behavior object. behavior: # -- Enable autoscaling behaviours enabled: false # -- define scale down policies, must conform to HPAScalingRules scaleDown: {} # -- define scale up policies, must conform to HPAScalingRules scaleUp: {} kedaAutoscaling: # -- Enable KEDA autoscaling for the single binary. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 1 # -- Maximum replicas for KEDA autoscaling maxReplicas: 3 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the single binary. # Ref: https://keda.sh/docs/latest/scalers/ triggers: [] image: # @schema type:[string, null] # -- The Docker registry for the single binary image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the single binary image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the single binary image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- The name of the PriorityClass for single binary pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for single binary StatefulSet annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for single binary StatefulSet labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for single binary pods podAnnotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for each `single binary` pod podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Additional selector labels for each `single binary` pod selectorLabels: {} podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null service: # @schema additionalProperties:{"type":"string"} # -- Annotations for single binary Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for single binary Service labels: {} # -- Service Type for single binary Service type: "ClusterIP" # -- trafficDistribution single binary Service trafficDistribution: "" # -- Session affinity for single binary Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for single binary Service sessionAffinityConfig: {} # -- ipFamilyPolicy for single binary Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for single binary Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the single binary service. This allows single binary to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Comma-separated list of Loki modules to load for the single binary targetModule: "all" # -- Labels for single binary service extraArgs: [] # -- Environment variables to add to the single binary pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the single binary pods extraEnvFrom: [] # @schema type:[string, array, null] # -- Extra containers to add to the single binary loki pod extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the single binary pods initContainers: [] # -- Volume mounts to add to the single binary pods extraVolumeMounts: [] # -- Volumes to add to the single binary pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the single binary resources: {} # -- Container resize policy for the single binary # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # -- Grace period to allow the single binary to shutdown before it is killed terminationGracePeriodSeconds: 30 # @schema type:[boolean, null] # -- Use the host's user namespace in the single binary pods hostUsers: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for single binary pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: single-binary app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema item:object # -- Topology Spread Constraints for single binary pods # The value will be passed through tpl. topologySpreadConstraints: [] # @schema additionalProperties:true dnsConfig: {} # @schema additionalProperties:true # -- Node selector for single binary pods nodeSelector: {} # -- Tolerations for single binary pods tolerations: [] # -- The default is to deploy all pods in parallel. podManagementPolicy: "Parallel" persistence: # -- What to do with the volume when the StatefulSet is scaled down. whenScaled: Delete # -- What to do with the volumes when the StatefulSet is deleted. whenDeleted: Delete # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false # -- Enable persistent disk enabled: true # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce # -- Size of persistent disk size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[object, null] # -- Selector for persistent disk selector: null # @schema additionalProperties:{"type":"string"} # -- Annotations for volume claim annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for volume claim labels: {} # @schema skipProperties:true;additionalProperties:true # -- Parameters used for the `storage` volume when persistence.enabled is false. # Allows replacing the default emptyDir volume with a custom volume definition. # For example, to use an existing PVC: # dataVolumeParameters: # persistentVolumeClaim: # claimName: my-existing-pvc dataVolumeParameters: {} ###################################################################################################################### # # Simple Scalable Deployment (SSD) Mode # # For small to medium size Loki deployments up to around 1 TB/day, this is the default mode for this helm chart # ###################################################################################################################### # Configuration for the write pod(s) write: # -- Enable the component. Requires `loki.deploymentMode` to be set to `SimpleScalable`. enabled: true # -- Kind of write workload. StatefulSet and Deployment are supported. kind: StatefulSet # -- Override for the write fullname. By default, this is generated using the fullname template with "-backend" fullnameOverride: '{{ include "loki.name" . }}-write' # -- EXPERIMENTAL: Enable creating a Job to recreate the write StatefulSet when the compactor configuration is changed. ## Only applicable if `compactor.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # @schema type:[integer, null] # -- Number of replicas for the write. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 3 # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for the write. strategy: rollingUpdate: partition: 0 autoscaling: # -- Enable autoscaling for the write. enabled: false # -- Minimum autoscaling replicas for the write. minReplicas: 2 # -- Maximum autoscaling replicas for the write. maxReplicas: 6 # @schema type:[integer, null] # -- Target CPU utilisation percentage for the write. targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilization percentage for the write. targetMemoryUtilizationPercentage: null # @schema skipProperties:true;additionalProperties:true # -- Behavior policies while scaling. behavior: # -- see https://github.com/grafana/loki/blob/main/docs/sources/operations/storage/wal.md#how-to-scale-updown for scaledown details scaleUp: policies: - type: Pods value: 1 periodSeconds: 900 scaleDown: policies: - type: Pods value: 1 periodSeconds: 1800 stabilizationWindowSeconds: 3600 kedaAutoscaling: # -- Enable KEDA autoscaling for the write. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 2 # -- Maximum replicas for KEDA autoscaling maxReplicas: 6 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the write. # Ref: https://keda.sh/docs/latest/scalers/ triggers: [] image: # @schema type:[string, null] # -- The Docker registry for the write image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the write image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the write image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- The name of the PriorityClass for write pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for write StatefulSet annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for write StatefulSet labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for write pods podAnnotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for each `write` pod podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Additional selector labels for each `write` pod selectorLabels: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for write Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for write Service labels: {} # -- Service Type for write Service type: "ClusterIP" # -- trafficDistribution for write Service trafficDistribution: "" # -- Session affinity for write Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for write Service sessionAffinityConfig: {} # -- ipFamilyPolicy for write Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for write Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the write service. This allows write to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the write extraArgs: [] # -- Environment variables to add to the write pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the write pods extraEnvFrom: [] # -- Lifecycle for the write container lifecycle: {} # @schema type:[string, array, null] # -- Init containers to add to the write pods initContainers: [] # @schema type:[string, array, null] # -- Containers to add to the write pods extraContainers: [] # -- Volume mounts to add to the write pods extraVolumeMounts: [] # -- Volumes to add to the write pods extraVolumes: [] # -- volumeClaimTemplates to add to StatefulSet extraVolumeClaimTemplates: [] # @schema additionalProperties:true # -- Resource requests and limits for the write resources: {} # -- Container resize policy for the write # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # -- Grace period to allow the write to shutdown before it is killed. Especially for the ingester, # this must be increased. It must be long enough so writes can be gracefully shutdown flushing/transferring # all data and to successfully leave the member ring on shutdown. terminationGracePeriodSeconds: 300 # @schema type:[boolean, null] # -- Use the host's user namespace in the write pods. hostUsers: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for write pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: write app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema additionalProperties:true # -- DNS config for write pods dnsConfig: {} # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: 1 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- Node selector for write pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for write pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # -- The default is to deploy all pods in parallel. podManagementPolicy: "Parallel" persistence: # -- Enable volume claims in pod spec volumeClaimsEnabled: true # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce # @schema skipProperties:true;additionalProperties:true # -- Parameters used for the `data` volume when volumeClaimEnabled if false dataVolumeParameters: emptyDir: {} # -- What to do with the volume when the StatefulSet is scaled down. whenScaled: Delete # -- What to do with the volumes when the StatefulSet is deleted. whenDeleted: Delete # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false # -- Size of persistent disk size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # @schema type:[object, null] # -- Selector for persistent disk selector: null # @schema additionalProperties:{"type":"string"} # -- Annotations for volume claim annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for volume claim labels: {} serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the read pod(s) read: # -- Enable the component. Requires `loki.deploymentMode` to be set to `SimpleScalable`. enabled: true # -- Kind of read deployment. StatefulSet and Deployment are supported. kind: Deployment # -- Override for the read fullname. By default, this is generated using the fullname template with "-backend" fullnameOverride: '{{ include "loki.name" . }}-read' # @schema type:[integer, null] # -- Number of replicas for the read. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 3 # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for the read. strategy: rollingUpdate: maxSurge: 0 # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: 1 autoscaling: # -- Enable autoscaling for the read, this is only used if `queryIndex.enabled: true` enabled: false # -- Minimum autoscaling replicas for the read minReplicas: 2 # -- Maximum autoscaling replicas for the read maxReplicas: 6 # @schema type:[integer, null] # -- Target CPU utilisation percentage for the read targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilisation percentage for the read targetMemoryUtilizationPercentage: null # @schema skipProperties:true;additionalProperties:true # -- Behavior policies while scaling. behavior: {} # scaleUp: # stabilizationWindowSeconds: 300 # policies: # - type: Pods # value: 1 # periodSeconds: 60 # scaleDown: # stabilizationWindowSeconds: 300 # policies: # - type: Pods # value: 1 # periodSeconds: 180 kedaAutoscaling: # -- Enable KEDA autoscaling for the read. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 2 # -- Maximum replicas for KEDA autoscaling maxReplicas: 6 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the read. # Ref: https://keda.sh/docs/latest/scalers/ triggers: [] image: # @schema type:[string, null] # -- The Docker registry for the read image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the read image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the read image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- The name of the PriorityClass for read pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for read deployment annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for read deployment labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for read pods podAnnotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for each `read` pod podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Additional selector labels for each `read` pod selectorLabels: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for read Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for read Service labels: {} # -- Service Type for read Service type: ClusterIP # -- trafficDistribution for read Service trafficDistribution: "" # -- Session affinity for read Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for read Service sessionAffinityConfig: {} # -- ipFamilyPolicy for read Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for read Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the read service. This allows read to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the read extraArgs: [] # @schema type:[string, array, null] # -- init containers to add to the read pods initContainers: [] # @schema type:[string, array, null] # -- Containers to add to the read pods extraContainers: [] # -- Environment variables to add to the read pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the read pods extraEnvFrom: [] # -- Lifecycle for the read container lifecycle: {} # -- Volume mounts to add to the read pods extraVolumeMounts: [] # -- Volumes to add to the read pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the read resources: {} # -- Container resize policy for the read # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema skipProperties:true;additionalProperties:true # -- liveness probe settings for read pods. If empty, applies no livenessProbe livenessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- startup probe for the read pods. If empty, applies no startupProbe startupProbe: {} # -- Grace period to allow the read to shutdown before it is killed terminationGracePeriodSeconds: 30 # @schema type:[boolean, null] # -- Use the host's user namespace in the read pods. hostUsers: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for read pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: read app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema additionalProperties:true # -- DNS config for read pods dnsConfig: {} # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: 1 podDisruptionBudget: # -- Enable Pod Disruption Budget for read pods enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for read Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for read Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- Node selector for read pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for read pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # -- The default is to deploy all pods in parallel. serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the backend pod(s) backend: # -- Enable the component. Requires `loki.deploymentMode` to be set to `SimpleScalable`. enabled: true # -- Kind of backend workload. StatefulSet and Deployment are supported. kind: StatefulSet # -- Override for the backend fullname. By default, this is generated using the fullname template with "-backend" fullnameOverride: '{{ include "loki.name" . }}-backend' # -- EXPERIMENTAL: Enable creating a Job to recreate the backend StatefulSet when the compactor configuration is changed. ## Only applicable if `compactor.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # @schema type:[integer, null] # -- Number of replicas for the backend. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 3 # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for the backend. strategy: rollingUpdate: partition: 0 # -- Whether to enable the rules sidecar sidecar: true # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true autoscaling: # -- Enable autoscaling for the backend. enabled: false # -- Minimum autoscaling replicas for the backend. minReplicas: 3 # -- Maximum autoscaling replicas for the backend. maxReplicas: 6 # @schema type:[integer, null] # -- Target CPU utilization percentage for the backend. targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilization percentage for the backend. targetMemoryUtilizationPercentage: null # @schema skipProperties:true;additionalProperties:true # -- Behavior policies while scaling. behavior: {} # scaleUp: # stabilizationWindowSeconds: 300 # policies: # - type: Pods # value: 1 # periodSeconds: 60 # scaleDown: # stabilizationWindowSeconds: 300 # policies: # - type: Pods # value: 1 # periodSeconds: 180 kedaAutoscaling: # -- Enable KEDA autoscaling for the backend. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 3 # -- Maximum replicas for KEDA autoscaling maxReplicas: 6 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the backend. # Ref: https://keda.sh/docs/latest/scalers/ triggers: [] image: # @schema type:[string, null] # -- The Docker registry for the backend image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the backend image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the backend image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- The name of the PriorityClass for backend pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for backend StatefulSet annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for backend StatefulSet labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for backend pods podAnnotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for each `backend` pod podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Additional selector labels for each `backend` pod selectorLabels: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for backend Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for backend Service labels: {} # -- Service type for backend Service type: ClusterIP # -- trafficDistribution for backend Service trafficDistribution: "" # -- Session affinity for backend Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for backend Service sessionAffinityConfig: {} # -- ipFamilyPolicy for backend Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for backend Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the backend service. This allows backend to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the backend extraArgs: [] # -- Environment variables to add to the backend pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the backend pods extraEnvFrom: [] # @schema type:[string, array, null] # -- Init containers to add to the backend pods initContainers: [] # @schema type:[string, array, null] # -- Containers to add to the backend pods extraContainers: [] # -- Volume mounts to add to the backend pods extraVolumeMounts: [] # -- Volumes to add to the backend pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the backend resources: {} # -- Container resize policy for the backend # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # -- Grace period to allow the backend to shutdown before it is killed. Especially for the ingester, # this must be increased. It must be long enough so backends can be gracefully shutdown flushing/transferring # all data and to successfully leave the member ring on shutdown. terminationGracePeriodSeconds: 300 # @schema type:[boolean, null] # -- Use the host's user namespace in the backend pods. hostUsers: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for backend pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: backend app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema additionalProperties:true # -- DNS config for backend pods dnsConfig: {} # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: 1 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- Node selector for backend pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for backend pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # -- The default is to deploy all pods in parallel. podManagementPolicy: "Parallel" persistence: # -- Enable volume claims in pod spec enabled: false # -- Enable volume claims in pod spec. Deprecated in favor of `persistence.enabled`. volumeClaimsEnabled: true # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce # @schema skipProperties:true;additionalProperties:true # -- Parameters used for the `data` volume when volumeClaimEnabled if false dataVolumeParameters: emptyDir: {} # -- What to do with the volume when the StatefulSet is scaled down. whenScaled: Delete # -- What to do with the volumes when the StatefulSet is deleted. whenDeleted: Delete # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: true # -- Size of persistent disk size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # @schema type:[object, null] # -- Selector for persistent disk selector: null # @schema additionalProperties:{"type":"string"} # -- Annotations for volume claim annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for volume claim labels: {} serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true ###################################################################################################################### # # Microservices Mode # # For large Loki deployments ingesting more than 1 TB/day # ###################################################################################################################### # -- Configuration for the ingester ingester: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: true # -- Kind of compactor deployment. StatefulSet and Deployment are supported. kind: StatefulSet # -- EXPERIMENTAL: Enable creating a Job to recreate the ingester StatefulSet ## Only applicable if `ingester.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for the ingester. strategy: type: RollingUpdate # -- PodManagementPolicy for the ingester StatefulSet. Only applicable if `compactor.kind` is StatefulSet. ## OrderedReady and Parallel are supported. podManagementPolicy: Parallel # @schema type:[integer, null] # -- Number of replicas for the ingester, when zoneAwareReplication.enabled is true, the total # number of replicas will match this value with each zone having 1/3rd of the total replicas. # Set to null to omit spec.replicas from the StatefulSet, allowing an external controller # (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # @schema additionalProperties:true # -- DNSConfig for ingester pods dnsConfig: {} # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the ingester hostUsers: null autoscaling: # -- Enable autoscaling for the ingester enabled: false # -- Minimum autoscaling replicas for the ingester minReplicas: 1 # -- Maximum autoscaling replicas for the ingester maxReplicas: 3 # @schema type:[integer, null] # -- Target CPU utilisation percentage for the ingester targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilisation percentage for the ingester targetMemoryUtilizationPercentage: null # -- Allows one to define custom metrics using the HPA/v2 schema (for example, Pods, Object or External metrics) customMetrics: [] # - type: Pods # pods: # metric: # name: loki_lines_total # target: # type: AverageValue # averageValue: 10k # @schema skipProperties:true;additionalProperties:true # -- HPA behavior configuration, passed directly as a K8s HPA behavior object. behavior: # -- Enable autoscaling behaviours enabled: false # -- define scale down policies, must conform to HPAScalingRules scaleDown: {} # -- define scale up policies, must conform to HPAScalingRules scaleUp: {} kedaAutoscaling: # -- Enable KEDA autoscaling for the ingester. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 1 # -- Maximum replicas for KEDA autoscaling maxReplicas: 3 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the ingester. # Ref: https://keda.sh/docs/latest/scalers/ triggers: [] image: # @schema type:[string, null] # -- The Docker registry for the ingester image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the ingester image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the ingester image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema additionalProperties:{"type":"string"} # -- Labels for ingester labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for ingester annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for ingester pods. Keys used by the workload selectors # (`app.kubernetes.io/name`, `app.kubernetes.io/instance`, `app.kubernetes.io/component` # and, with zoneAwareReplication, `name` and `rollout-group`) are reserved and # ignored here: the latter are also used by the per-zone headless Services and # grafana/rollout-operator. podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for ingester pods podAnnotations: {} # @schema type:[string, null] # -- The name of the PriorityClass for ingester pods priorityClassName: null # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for ingester service # @deprecated -- This option is deprecated in favor of `ingester.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for ingester service # @deprecated -- This option is deprecated in favor of `ingester.service.annotations` serviceAnnotations: {} # @schema type:string;deprecated:true # -- Service type for ingester service # @deprecated -- This option is deprecated in favor of `ingester.service.type` serviceType: "ClusterIP" service: # @schema additionalProperties:{"type":"string"} # -- Annotations for ingester Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for ingester Service labels: {} # -- Service Type for ingester Service type: "ClusterIP" # -- trafficDistribution for ingester Service trafficDistribution: "" # -- Session affinity for ingester Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for ingester Service sessionAffinityConfig: {} # -- ipFamilyPolicy for ingester Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for ingester Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the ingester service. This allows ingester to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the ingester extraArgs: [] # -- Environment variables to add to the ingester pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the ingester pods extraEnvFrom: [] # -- Volume mounts to add to the ingester pods extraVolumeMounts: [] # -- Volumes to add to the ingester pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the ingester resources: {} # -- Container resize policy for the ingester # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the ingester pods extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the ingester pods initContainers: [] # -- Grace period to allow the ingester to shutdown before it is killed. Especially for the ingestor, # this must be increased. It must be long enough so ingesters can be gracefully shutdown flushing/transferring # all data and to successfully leave the member ring on shutdown. terminationGracePeriodSeconds: 300 # -- Lifecycle for the ingester container lifecycle: {} # @schema item:object # -- topologySpread for ingester pods. # @default -- Defaults to allow skew no more than 1 node # The value will be passed through tpl. topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: app.kubernetes.io/component: ingester app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for ingester pods. Ignored if zoneAwareReplication is enabled. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: ingester app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: 1 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- Node selector for ingester pods nodeSelector: {} # -- Tolerations for ingester pods tolerations: [] # @schema skipProperties:true;additionalProperties:true # -- readiness probe settings for ingester pods. If empty, use `loki.readinessProbe` readinessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- liveness probe settings for ingester pods. If empty use `loki.livenessProbe` livenessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- startup probe settings for ingester pods. If empty use `loki.startupProbe` startupProbe: {} # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy for the ingester StatefulSets. updateStrategy: # -- One of 'OnDelete' or 'RollingUpdate' type: RollingUpdate # -- Optional for updateStrategy.type=RollingUpdate. See [Partitioned rolling updates](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#partitions) in the StatefulSet docs for details. # rollingUpdate: # partition: 0 persistence: # -- Enable creating PVCs which is required when using boltdb-shipper enabled: false # -- Use emptyDir with ramdisk for storage. **Please note that all data in ingester will be lost on pod restart** inMemory: false # -- List of the ingester PVCs # @notationType -- list claims: - name: data # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # - name: wal # size: 150Gi # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # @schema additionalProperties:true;deprecated:true # -- Adds the appProtocol field to the ingester service. This allows ingester to work with istio protocol selection. # @deprecated -- This option is deprecated in favor of `ingester.service.appProtocol` appProtocol: # @schema type:string;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `ingester.service.appProtocol.grpc` grpc: "" # -- trafficDistribution for ingester service trafficDistribution: "" # -- Enabling zone awareness on ingesters will create 3 statefulests where all writes will send a replica to each zone. # This is primarily intended to accelerate rollout operations by allowing for multiple ingesters within a single # zone to be shutdown and restart simultaneously (the remaining 2 zones will be guaranteed to have at least one copy # of the data). # Note: This can be used to run Loki over multiple cloud provider availability zones however this is not currently # recommended as Loki is not optimized for this and cross zone network traffic costs can become extremely high # extremely quickly. Even with zone awareness enabled, it is recommended to run Loki in a single availability zone. zoneAwareReplication: # -- Enable zone awareness. enabled: true # -- The percent of replicas in each zone that will be restarted at once. In a value of 0-100 maxUnavailablePct: 33 # -- zoneA configuration zoneA: # @schema type:[object, null] # @schema additionalProperties:true # -- optionally define a node selector for this zone nodeSelector: null # -- optionally define extra affinity rules, by default different zones are not allowed to schedule on the same host # The value will be passed through tpl. extraAffinity: {} # @schema additionalProperties:{"type":"string"} # -- Specific annotations to add to zone A statefulset annotations: {} # @schema additionalProperties:{"type":"string"} # -- Specific annotations to add to zone A pods podAnnotations: {} # -- Persistence overrides applied only to the zone A StatefulSet. persistence: # @schema type:[string, null] # -- Storage class to use for every PVC in zone A. Overrides the `storageClass` of each entry in # `ingester.persistence.claims` for this zone only. Use this when you have one StorageClass per # availability zone (for example a topology-pinned EBS/PD StorageClass). If null, the # claim-level `storageClass` is used as before, preserving existing behavior. # If set to "-", `storageClassName: ""` is rendered, which disables dynamic provisioning. storageClass: null zoneB: # @schema type:[object, null] # @schema additionalProperties:true # -- optionally define a node selector for this zone nodeSelector: null # -- optionally define extra affinity rules, by default different zones are not allowed to schedule on the same host # The value will be passed through tpl. extraAffinity: {} # @schema additionalProperties:{"type":"string"} # -- Specific annotations to add to zone B statefulset annotations: {} # @schema additionalProperties:{"type":"string"} # -- Specific annotations to add to zone B pods podAnnotations: {} # -- Persistence overrides applied only to the zone B StatefulSet. persistence: # @schema type:[string, null] # -- Storage class to use for every PVC in zone B. See # `ingester.zoneAwareReplication.zoneA.persistence.storageClass` for details. If null, the # claim-level `storageClass` is used as before. storageClass: null zoneC: # @schema type:[object, null] # @schema additionalProperties:true # -- optionally define a node selector for this zone nodeSelector: null # -- optionally define extra affinity rules, by default different zones are not allowed to schedule on the same host # The value will be passed through tpl. extraAffinity: {} # @schema additionalProperties:{"type":"string"} # -- Specific annotations to add to zone C statefulset annotations: {} # @schema additionalProperties:{"type":"string"} # -- Specific annotations to add to zone C pods podAnnotations: {} # -- Persistence overrides applied only to the zone C StatefulSet. persistence: # @schema type:[string, null] # -- Storage class to use for every PVC in zone C. See # `ingester.zoneAwareReplication.zoneA.persistence.storageClass` for details. If null, the # claim-level `storageClass` is used as before. storageClass: null # -- The migration block allows migrating non zone aware ingesters to zone aware ingesters. migration: enabled: false excludeDefaultZone: false readPath: false writePath: false # @schema type:[string, null] # optionally allow adding arbitrary prefix to the ingester rollout-group label rolloutGroupPrefix: null # optionally allow adding 'loki-' prefix to ingester name label addIngesterNamePrefix: false # -- Configuration for the distributor distributor: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: true # @schema type:[integer, null] # -- Number of replicas for the distributor. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # -- Kind of compactor deployment. StatefulSet and Deployment are supported. kind: Deployment # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for the distributor. strategy: rollingUpdate: maxSurge: 0 # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: 1 # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the distributor hostUsers: null # @schema additionalProperties:true # -- DNSConfig for distributor pods dnsConfig: {} autoscaling: # -- Enable autoscaling for the distributor enabled: false # -- Minimum autoscaling replicas for the distributor minReplicas: 1 # -- Maximum autoscaling replicas for the distributor maxReplicas: 3 # @schema type:[integer, null] # -- Target CPU utilisation percentage for the distributor targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilisation percentage for the distributor targetMemoryUtilizationPercentage: null # -- Allows one to define custom metrics using the HPA/v2 schema (for example, Pods, Object or External metrics) customMetrics: [] # - type: Pods # pods: # metric: # name: loki_lines_total # target: # type: AverageValue # averageValue: 10k # @schema skipProperties:true;additionalProperties:true # -- HPA behavior configuration, passed directly as a K8s HPA behavior object. behavior: # -- Enable autoscaling behaviours enabled: false # -- define scale down policies, must conform to HPAScalingRules scaleDown: {} # -- define scale up policies, must conform to HPAScalingRules scaleUp: {} kedaAutoscaling: # -- Enable KEDA autoscaling for the distributor. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 1 # -- Maximum replicas for KEDA autoscaling maxReplicas: 3 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the distributor. # Ref: https://keda.sh/docs/latest/scalers/ triggers: [] image: # @schema type:[string, null] # -- The Docker registry for the distributor image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the distributor image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the distributor image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for distributor pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for distributor labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for distributor annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for distributor pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for distributor pods podAnnotations: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for distributor service # @deprecated -- This option is deprecated in favor of `ingester.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for distributor service # @deprecated -- This option is deprecated in favor of `ingester.service.annotations` serviceAnnotations: {} # @schema type:string;deprecated:true # -- Service type for distributor service # @deprecated -- This option is deprecated in favor of `ingester.service.type` serviceType: "ClusterIP" service: # @schema additionalProperties:{"type":"string"} # -- Annotations for distributor Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for distributor Service labels: {} # -- Service Type for distributor Service type: "ClusterIP" # -- trafficDistribution for distributor Service trafficDistribution: "" # -- Session affinity for distributor Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for distributor Service sessionAffinityConfig: {} # -- ipFamilyPolicy for distributor Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for distributor Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the distributor service. This allows distributor to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the distributor extraArgs: [] # -- Environment variables to add to the distributor pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the distributor pods extraEnvFrom: [] # -- Volume mounts to add to the distributor pods extraVolumeMounts: [] # -- Volumes to add to the distributor pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the distributor resources: {} # -- Container resize policy for the distributor # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Init containers to add to the distributor pods initContainers: [] # @schema type:[string, array, null] # -- Containers to add to the distributor pods extraContainers: [] # @schema type:[string, null] # -- On SIGTERM, report 503 on /ready and wait this long before shutdown so the LB drains the pod before connections are cut. # "0s" (default) disables. When enabling, keep terminationGracePeriodSeconds above shutdownDelay + server.graceful_shutdown_timeout. shutdownDelay: 0s # -- Grace period to allow the distributor to shutdown before it is killed terminationGracePeriodSeconds: 30 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for distributor pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: distributor app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: null # @schema type:[string, integer] # -- Max Surge for distributor pods maxSurge: 0 # @schema additionalProperties:true # -- Node selector for distributor pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for distributor pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # @schema additionalProperties:true;deprecated:true # -- Adds the appProtocol field to the distributor service. This allows distributor to work with istio protocol selection. # @deprecated -- This option is deprecated in favor of `distributor.service.appProtocol` appProtocol: # @schema type:string;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `distributor.service.appProtocol.grpc` grpc: "" # -- trafficDistribution for distributor service trafficDistribution: "" serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the querier querier: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: true # -- Kind of compactor deployment. StatefulSet and Deployment are supported. kind: Deployment # @schema type:[integer, null] # -- Number of replicas for the querier. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # @schema skipProperties:true;additionalProperties:true # -- Strategy for the querier. strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: 1 # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the querier hostUsers: null autoscaling: # -- Enable autoscaling for the querier, this is only used if `indexGateway.enabled: true` enabled: false # -- Minimum autoscaling replicas for the querier minReplicas: 1 # -- Maximum autoscaling replicas for the querier maxReplicas: 3 # @schema type:[integer, null] # -- Target CPU utilisation percentage for the querier targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilisation percentage for the querier targetMemoryUtilizationPercentage: null # -- Allows one to define custom metrics using the HPA/v2 schema (for example, Pods, Object or External metrics) customMetrics: [] # - type: External # external: # metric: # name: loki_inflight_queries # target: # type: AverageValue # averageValue: 12 # @schema skipProperties:true;additionalProperties:true # -- HPA behavior configuration, passed directly as a K8s HPA behavior object. behavior: # -- Enable autoscaling behaviours enabled: false # -- define scale down policies, must conform to HPAScalingRules scaleDown: {} # -- define scale up policies, must conform to HPAScalingRules scaleUp: {} kedaAutoscaling: # -- Enable KEDA autoscaling for the querier. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 1 # -- Maximum replicas for KEDA autoscaling maxReplicas: 10 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the querier. Defaults to a Prometheus trigger using inflight requests. triggers: - type: prometheus name: querier_autoscaling_metric metadata: serverAddress: "{{ .Values.defaults.kedaAutoscaling.prometheusAddress }}" query: sum(max_over_time(loki_query_scheduler_inflight_requests{quantile="0.75"}[2m])) threshold: "4" unsafeSsl: "{{ .Values.defaults.kedaAutoscaling.unsafeSsl }}" ignoreNullValues: "{{ .Values.defaults.kedaAutoscaling.ignoreNullValues }}" customHeaders: "{{ .Values.defaults.kedaAutoscaling.customHeaders }}" authModes: "{{ .Values.defaults.kedaAutoscaling.authentication.authModes }}" image: # @schema type:[string, null] # -- The Docker registry for the querier image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the querier image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the querier image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for querier pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for querier labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for querier annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for querier pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for querier pods podAnnotations: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for querier service # @deprecated -- This option is deprecated in favor of `querier.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for querier service # @deprecated -- This option is deprecated in favor of `querier.service.annotations` serviceAnnotations: {} # @schema type:string;deprecated:true # -- Service type for querier service # @deprecated -- This option is deprecated in favor of `querier.service.type` serviceType: "ClusterIP" service: # @schema additionalProperties:{"type":"string"} # -- Annotations for querier Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for querier Service labels: {} # -- Service Type for querier Service type: "ClusterIP" # -- trafficDistribution for querier Service trafficDistribution: "" # -- Session affinity for querier Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for querier Service sessionAffinityConfig: {} # -- ipFamilyPolicy for querier Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for querier Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the querier service. This allows querier to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the querier extraArgs: [] # -- Environment variables to add to the querier pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the querier pods extraEnvFrom: [] # -- Volume mounts to add to the querier pods extraVolumeMounts: [] # -- Volumes to add to the querier pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the querier resources: {} # -- Container resize policy for the querier # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the querier pods extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the querier pods initContainers: [] # -- Grace period to allow the querier to shutdown before it is killed terminationGracePeriodSeconds: 30 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema item:object # -- topologySpread for querier pods. # @default -- Defaults to allow skew no more then 1 node # The value will be passed through tpl. topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: app.kubernetes.io/component: querier app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for querier pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: querier app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: null # @schema type:[string, integer] # -- Max Surge for querier pods maxSurge: 0 # @schema additionalProperties:true # -- Node selector for querier pods nodeSelector: {} # -- Tolerations for querier pods tolerations: [] # @schema additionalProperties:true # -- DNSConfig for querier pods dnsConfig: {} # @schema additionalProperties:true;deprecated:true # -- Adds the appProtocol field to the querier service. This allows querier to work with istio protocol selection. # @deprecated -- This option is deprecated in favor of `querier.service.appProtocol` appProtocol: # @schema type:string;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `querier.service.appProtocol.grpc` grpc: "" # -- trafficDistribution for querier service trafficDistribution: "" serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the query-frontend queryFrontend: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: true # -- Kind of compactor deployment. StatefulSet and Deployment are supported. kind: Deployment # @schema type:[integer, null] # -- Number of replicas for the query-frontend. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # @schema skipProperties:true;additionalProperties:true # -- Strategy for the querier. strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: 1 # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the query-frontend hostUsers: null autoscaling: # -- Enable autoscaling for the query-frontend enabled: false # -- Minimum autoscaling replicas for the query-frontend minReplicas: 1 # -- Maximum autoscaling replicas for the query-frontend maxReplicas: 3 # @schema type:[integer, null] # -- Target CPU utilisation percentage for the query-frontend targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilisation percentage for the query-frontend targetMemoryUtilizationPercentage: null # -- Allows one to define custom metrics using the HPA/v2 schema (for example, Pods, Object or External metrics) customMetrics: [] # - type: Pods # pods: # metric: # name: loki_query_rate # target: # type: AverageValue # averageValue: 100 # @schema skipProperties:true;additionalProperties:true # -- HPA behavior configuration, passed directly as a K8s HPA behavior object. behavior: # -- Enable autoscaling behaviours enabled: false # -- define scale down policies, must conform to HPAScalingRules scaleDown: {} # -- define scale up policies, must conform to HPAScalingRules scaleUp: {} kedaAutoscaling: # -- Enable KEDA autoscaling for the query-frontend. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 1 # -- Maximum replicas for KEDA autoscaling maxReplicas: 3 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the query-frontend. # Ref: https://keda.sh/docs/latest/scalers/ triggers: [] image: # @schema type:[string, null] # -- The Docker registry for the query-frontend image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the query-frontend image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the query-frontend image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for query-frontend pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for query-frontend labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for query-frontend annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for query-frontend pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for query-frontend pods podAnnotations: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for query-frontend service # @deprecated -- This option is deprecated in favor of `queryFrontend.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for query-frontend service # @deprecated -- This option is deprecated in favor of `queryFrontend.service.annotations` serviceAnnotations: {} # @schema type:string;deprecated:true # -- Service type for query-frontend service # @deprecated -- This option is deprecated in favor of `queryFrontend.service.type` serviceType: "ClusterIP" service: # @schema additionalProperties:{"type":"string"} # -- Annotations for query-frontend Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for query-frontend Service labels: {} # -- Service Type for query-frontend Service type: "ClusterIP" # -- trafficDistribution for query-frontend Service trafficDistribution: "" # -- Session affinity for query-frontend Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for query-frontend Service sessionAffinityConfig: {} # -- ipFamilyPolicy for query-frontend Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for query-frontend Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the query-frontend service. This allows query-frontend to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the query-frontend extraArgs: [] # -- Environment variables to add to the query-frontend pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the query-frontend pods extraEnvFrom: [] # -- Volume mounts to add to the query-frontend pods extraVolumeMounts: [] # -- Volumes to add to the query-frontend pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the query-frontend resources: {} # -- Container resize policy for the query-frontend # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- init containers to add to the query-frontend pods initContainers: [] # @schema type:[string, array, null] # -- Containers to add to the query-frontend pods extraContainers: [] # -- Grace period to allow the query-frontend to shutdown before it is killed terminationGracePeriodSeconds: 30 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for query-frontend pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: query-frontend app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: null # @schema additionalProperties:true # -- Node selector for query-frontend pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for query-frontend pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # @schema additionalProperties:true;deprecated:true # -- Adds the appProtocol field to the queryFrontend service. This allows queryFrontend to work with istio protocol selection. # @deprecated -- This option is deprecated in favor of `queryFrontend.service.appProtocol` appProtocol: # @schema type:string;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `queryFrontend.service.appProtocol.grpc` grpc: "" # -- Enable load balancer port for query-frontend loadBalancer: enabled: true # -- trafficDistribution for query-frontend service trafficDistribution: "" serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the query-scheduler queryScheduler: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: true # -- Kind of query-scheduler deployment. StatefulSet and Deployment are supported. kind: Deployment # @schema type:[integer, null] # -- Number of replicas for the query-scheduler. # It should be lower than `-querier.max-concurrent` to avoid generating back-pressure in queriers; # it's also recommended that this value evenly divides the latter # Set to null to omit spec.replicas from the workload, allowing an external controller # (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # @schema skipProperties:true;additionalProperties:true # -- Strategy for the query-scheduler. strategy: type: RollingUpdate rollingUpdate: maxSurge: 0 # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: 1 # @schema additionalProperties:true # -- DNSConfig for query-scheduler dnsConfig: {} # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the query-scheduler hostUsers: null image: # @schema type:[string, null] # -- The Docker registry for the query-scheduler image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the query-scheduler image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the query-scheduler image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- The name of the PriorityClass for query-scheduler pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for query-scheduler labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for query-scheduler annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for query-scheduler pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for query-scheduler pods podAnnotations: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for query-scheduler service # @deprecated -- This option is deprecated in favor of `queryScheduler.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for query-scheduler service # @deprecated -- This option is deprecated in favor of `queryScheduler.service.annotations` serviceAnnotations: {} # @schema type:string;deprecated:true # -- Service type for query-scheduler service # @deprecated -- This option is deprecated in favor of `queryScheduler.service.type` serviceType: "ClusterIP" service: # @schema additionalProperties:{"type":"string"} # -- Annotations for query-scheduler Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for query-scheduler Service labels: {} # -- Service Type for query-scheduler Service type: "ClusterIP" # -- trafficDistribution for query-scheduler Service trafficDistribution: "" # -- Session affinity for query-scheduler Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for query-scheduler Service sessionAffinityConfig: {} # -- ipFamilyPolicy for query-scheduler Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for query-scheduler Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the query-scheduler service. This allows query-scheduler to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the query-scheduler extraArgs: [] # -- Environment variables to add to the query-scheduler pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the query-scheduler pods extraEnvFrom: [] # -- Volume mounts to add to the query-scheduler pods extraVolumeMounts: [] # -- Volumes to add to the query-scheduler pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the query-scheduler resources: {} # -- Container resize policy for the query-scheduler # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- init containers to add to the query-scheduler pods initContainers: [] # @schema type:[string, array, null] # -- Containers to add to the query-scheduler pods extraContainers: [] # -- Grace period to allow the query-scheduler to shutdown before it is killed terminationGracePeriodSeconds: 30 # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for query-scheduler pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: query-scheduler app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: 1 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- Node selector for query-scheduler pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for query-scheduler pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # @schema additionalProperties:true;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `queryScheduler.service.appProtocol` appProtocol: grpc: "" # -- trafficDistribution for query-scheduler service trafficDistribution: "" serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the index-gateway indexGateway: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: true # -- Kind of index-gateway deployment. StatefulSet and Deployment are supported. kind: StatefulSet # -- EXPERIMENTAL: Enable creating a Job to recreate the compactor StatefulSet when the compactor configuration is changed. ## Only applicable if `compactor.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # @schema type:[integer, null] # -- Number of replicas for the index-gateway. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # -- Whether the index gateway should join the memberlist hashring joinMemberlist: true # @schema additionalProperties:true # -- DNSConfig for index-gateway pods dnsConfig: {} # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the index-gateway hostUsers: null image: # @schema type:[string, null] # -- The Docker registry for the index-gateway image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the index-gateway image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the index-gateway image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- The name of the PriorityClass for index-gateway pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for index-gateway labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for index-gateway annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for index-gateway pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for index-gateway pods podAnnotations: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for index-gateway service # @deprecated -- This option is deprecated in favor of `indexGateway.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for index-gateway service # @deprecated -- This option is deprecated in favor of `indexGateway.service.annotations` serviceAnnotations: {} # @schema type:string;deprecated:true # -- Service type for index-gateway service # @deprecated -- This option is deprecated in favor of `indexGateway.service.type` serviceType: "ClusterIP" service: # @schema additionalProperties:{"type":"string"} # -- Annotations for index-gateway Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for index-gateway Service labels: {} # -- Service Type for index-gateway Service type: "ClusterIP" # -- trafficDistribution for index-gateway Service trafficDistribution: "" # -- Session affinity for index-gateway Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for index-gateway Service sessionAffinityConfig: {} # -- ipFamilyPolicy for index-gateway Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for index-gateway Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the index-gateway service. This allows index-gateway to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the index-gateway extraArgs: [] # -- Environment variables to add to the index-gateway pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the index-gateway pods extraEnvFrom: [] # -- Volume mounts to add to the index-gateway pods extraVolumeMounts: [] # -- Volumes to add to the index-gateway pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the index-gateway resources: {} # -- Container resize policy for the index-gateway # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the index-gateway pods extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the index-gateway pods initContainers: [] # -- Grace period to allow the index-gateway to shutdown before it is killed. terminationGracePeriodSeconds: 300 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # -- Lifecycle for the index-gateway container lifecycle: {} # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for index-gateway pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: index-gateway app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: null # @schema additionalProperties:true # -- Node selector for index-gateway pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for index-gateway pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] persistence: # -- Enable creating PVCs which is required when using boltdb-shipper enabled: false # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce # @schema skipProperties:true;additionalProperties:true # -- Parameters used for the `data` volume when volumeClaimEnabled if false dataVolumeParameters: emptyDir: {} # -- Size of persistent disk size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for index gateway PVCs annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for index gateway PVCs labels: {} # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain # @schema additionalProperties:true;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `indexGateway.service.appProtocol` appProtocol: grpc: "" # -- trafficDistribution for index-gateway service trafficDistribution: "" # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy for the index-gateway workload. strategy: # -- One of 'OnDelete' or 'RollingUpdate' type: RollingUpdate # -- Optional for updateStrategy.type=RollingUpdate. See [Partitioned rolling updates](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#partitions) in the StatefulSet docs for details. # rollingUpdate: # partition: 0 serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the compactor compactor: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: true # -- Kind of compactor deployment. StatefulSet and Deployment are supported. kind: StatefulSet # -- EXPERIMENTAL: Enable creating a Job to recreate the compactor StatefulSet when the compactor configuration is changed. ## Only applicable if `compactor.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # @schema type:[integer, null] # -- Number of replicas for the compactor. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for the compactor. strategy: rollingUpdate: partition: 0 # -- PodManagementPolicy for the compactor StatefulSet. Only applicable if `compactor.kind` is StatefulSet. ## OrderedReady and Parallel are supported. podManagementPolicy: Parallel # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the compactor hostUsers: null # @schema additionalProperties:true # -- DNSConfig for compactor pods dnsConfig: {} image: # @schema type:[string, null] # -- The Docker registry for the compactor image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the compactor image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the compactor image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for compactor pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for compactor labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for compactor annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for compactor pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for compactor pods podAnnotations: {} # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for compactor pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: compactor app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for compactor service # @deprecated -- This option is deprecated in favor of `compactor.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for compactor service # @deprecated -- This option is deprecated in favor of `compactor.service.annotations` serviceAnnotations: {} # @schema type:string;deprecated:true # -- Service type for compactor service # @deprecated -- This option is deprecated in favor of `compactor.service.type` serviceType: "ClusterIP" service: # @schema additionalProperties:{"type":"string"} # -- Annotations for compactor Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for compactor Service labels: {} # -- Service Type for compactor Service type: "ClusterIP" # -- trafficDistribution for compactor Service trafficDistribution: "" # -- Session affinity for compactor Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for compactor Service sessionAffinityConfig: {} # -- ipFamilyPolicy for compactor Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for compactor Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the compactor service. This allows compactor to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the compactor extraArgs: [] # -- Environment variables to add to the compactor pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the compactor pods extraEnvFrom: [] # -- Volume mounts to add to the compactor pods extraVolumeMounts: [] # -- Volumes to add to the compactor pods extraVolumes: [] # @schema skipProperties:true;additionalProperties:true # -- readiness probe settings for compactor pods. If empty, use `loki.readinessProbe` readinessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- liveness probe settings for compactor pods. If empty use `loki.livenessProbe` livenessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- liveness probe settings for ingester pods. If empty use `loki.livenessProbe` startupProbe: {} # @schema additionalProperties:true # -- Resource requests and limits for the compactor resources: {} # -- Container resize policy for the compactor # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the compactor pods extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the compactor pods initContainers: [] # -- Grace period to allow the compactor to shutdown before it is killed terminationGracePeriodSeconds: 30 # @schema additionalProperties:true # -- Node selector for compactor pods nodeSelector: {} # -- Tolerations for compactor pods tolerations: [] # @schema additionalProperties:true;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `compactor.service.appProtocol` appProtocol: grpc: "" persistence: # -- Enable creating PVCs for the compactor enabled: false # -- Storage type for the compactor. pvc and ephemeral are supported. type: pvc # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce # -- Size of persistent disk size: 10Gi # @schema type:[string, null] # -- Size of persistent disk # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for the generated volumeClaimTemplate. annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the generated volumeClaimTemplate. labels: {} # @schema type:[object, null] # -- Selector for the generated volumeClaimTemplate. selector: null # @schema skipProperties:true;additionalProperties:true # -- Parameters used for the `data` volume when volumeClaimEnabled if false dataVolumeParameters: emptyDir: {} # -- List of the compactor PVCs. Deprecated in favor of `compactor.persistence.dataVolumeParameters` and `compactor.persistence.size`. # @notationType -- list claims: - name: data # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for compactor PVCs annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for compactor PVCs labels: {} # - name: wal # size: 150Gi # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain serviceAccount: create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use for the compactor. # If not set and create is true, a name is generated by appending # "-compactor" to the common ServiceAccount. name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the compactor service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the compactor service account annotations: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the bloom-gateway bloomGateway: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: false # -- Kind of compactor deployment. StatefulSet and Deployment are supported. kind: StatefulSet # -- Enable creating a Job to recreate the StatefulSet when the StatefulSet configuration is changed. ## Only applicable if `compactor.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # -- Number of replicas for the bloom-gateway replicas: 0 # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the bloom-gateway hostUsers: null # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for the pattern ingester. strategy: rollingUpdate: partition: 0 # @schema additionalProperties:true # -- DNSConfig for bloom-gateway pods dnsConfig: {} image: # @schema type:[string, null] # -- The Docker registry for the bloom-gateway image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the bloom-gateway image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the bloom-gateway image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for bloom-gateway pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for bloom-builder labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-builder annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for bloom-gateway pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-gateway pods podAnnotations: {} # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for bloom-gateway pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: bloom-gateway app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for bloom-gateway service # @deprecated -- This option is deprecated in favor of `bloomGateway.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for bloom-gateway service # @deprecated -- This option is deprecated in favor of `bloomGateway.service.annotations` serviceAnnotations: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-gateway Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for bloom-gateway Service labels: {} # -- Service Type for bloom-gateway Service type: "ClusterIP" # -- trafficDistribution for bloom-gateway Service trafficDistribution: "" # -- Session affinity for bloom-gateway Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for bloom-gateway Service sessionAffinityConfig: {} # -- ipFamilyPolicy for bloom-gateway Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for bloom-gateway Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the bloom-gateway service. This allows bloom-gateway to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the bloom-gateway extraArgs: [] # -- Environment variables to add to the bloom-gateway pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the bloom-gateway pods extraEnvFrom: [] # -- Volume mounts to add to the bloom-gateway pods extraVolumeMounts: [] # -- Volumes to add to the bloom-gateway pods extraVolumes: [] # @schema skipProperties:true;additionalProperties:true # -- readiness probe settings for bloom-gateway pods. If empty, use `loki.readinessProbe` readinessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- liveness probe settings for bloom-gateway pods. If empty use `loki.livenessProbe` livenessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- startup probe settings for bloom-gateway pods. If empty, use `loki.startupProbe` startupProbe: {} # @schema additionalProperties:true # -- Resource requests and limits for the bloom-gateway resources: {} # -- Container resize policy for the bloom-gateway # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the bloom-gateway pods extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the bloom-gateway pods initContainers: [] # -- Grace period to allow the bloom-gateway to shutdown before it is killed terminationGracePeriodSeconds: 30 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- Node selector for bloom-gateway pods nodeSelector: {} # -- Tolerations for bloom-gateway pods tolerations: [] # @schema additionalProperties:true;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `bloomGateway.service.appProtocol` appProtocol: grpc: "" # -- The default is to deploy all pods in parallel. podManagementPolicy: "Parallel" persistence: # -- Enable creating PVCs for the bloom-gateway enabled: false # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-gateway PVCs annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for bloom gateway PVCs labels: {} # -- List of the bloom-gateway PVCs # @notationType -- list claims: - name: data # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce # -- Size of persistent disk size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the bloom-planner bloomPlanner: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: false # -- Kind of compactor deployment. StatefulSet and Deployment are supported. kind: StatefulSet # -- Enable creating a Job to recreate the StatefulSet when the StatefulSet configuration is changed. ## Only applicable if `compactor.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # -- Number of replicas for the bloom-planner replicas: 0 # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the bloom-planner hostUsers: null # @schema additionalProperties:true # -- DNSConfig for bloom-planner pods dnsConfig: {} # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for the pattern ingester. strategy: rollingUpdate: partition: 0 image: # @schema type:[string, null] # -- The Docker registry for the bloom-planner image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the bloom-planner image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the bloom-planner image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for bloom-planner pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for bloom-builder labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-builder annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for bloom-planner pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-planner pods podAnnotations: {} # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for bloom-planner pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: bloom-planner app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for bloom-planner service # @deprecated -- This option is deprecated in favor of `bloomPlanner.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for bloom-planner service # @deprecated -- This option is deprecated in favor of `bloomPlanner.service.annotations` serviceAnnotations: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-planner Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for bloom-planner Service labels: {} # -- Service Type for bloom-planner Service type: "ClusterIP" # -- trafficDistribution for bloom-planner Service trafficDistribution: "" # -- Session affinity for bloom-planner Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for bloom-planner Service sessionAffinityConfig: {} # -- ipFamilyPolicy for bloom-planner Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for bloom-planner Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the bloom-planner service. This allows bloom-planner to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the bloom-planner extraArgs: [] # -- Environment variables to add to the bloom-planner pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the bloom-planner pods extraEnvFrom: [] # -- Volume mounts to add to the bloom-planner pods extraVolumeMounts: [] # -- Volumes to add to the bloom-planner pods extraVolumes: [] # @schema skipProperties:true;additionalProperties:true # -- readiness probe settings for bloom-planner pods. If empty, use `loki.readinessProbe` readinessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- liveness probe settings for bloom-planner pods. If empty use `loki.livenessProbe` livenessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- startup probe settings for bloom-planner pods. If empty use `loki.startupProbe` startupProbe: {} # @schema additionalProperties:true # -- Resource requests and limits for the bloom-planner resources: {} # -- Container resize policy for the bloom-planner # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the bloom-planner pods extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the bloom-planner pods initContainers: [] # -- Grace period to allow the bloom-planner to shutdown before it is killed terminationGracePeriodSeconds: 30 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- Node selector for bloom-planner pods nodeSelector: {} # -- Tolerations for bloom-planner pods tolerations: [] # @schema additionalProperties:true;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `bloomPlanner.service.appProtocol` appProtocol: grpc: "" # -- The default is to deploy all pods in parallel. podManagementPolicy: "Parallel" persistence: # -- Enable creating PVCs for the bloom-planner enabled: false # -- List of the bloom-planner PVCs # @notationType -- list claims: - name: data # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce # -- Size of persistent disk size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-planner PVCs annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for bloom planner PVCs labels: {} # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the bloom-builder bloomBuilder: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: false # -- Kind of compactor deployment. StatefulSet and Deployment are supported. kind: Deployment # -- Enable creating a Job to recreate the compactor StatefulSet when the compactor configuration is changed. ## Only applicable if `compactor.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # @schema type:[integer, null] # -- Number of replicas for the bloom-builder. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the boom-builder hostUsers: null # @schema additionalProperties:true # -- DNSConfig for bloom-builder pods dnsConfig: {} autoscaling: # -- Enable autoscaling for the bloom-builder enabled: false # -- Minimum autoscaling replicas for the bloom-builder minReplicas: 1 # -- Maximum autoscaling replicas for the bloom-builder maxReplicas: 3 # @schema type:[integer, null] # -- Target CPU utilisation percentage for the bloom-builder targetCPUUtilizationPercentage: 60 # @schema type:[integer, null] # -- Target memory utilisation percentage for the bloom-builder targetMemoryUtilizationPercentage: null # -- Allows one to define custom metrics using the HPA/v2 schema (for example, Pods, Object or External metrics) customMetrics: [] # - type: Pods # pods: # metric: # name: loki_query_rate # target: # type: AverageValue # averageValue: 100 # @schema skipProperties:true;additionalProperties:true # -- HPA behavior configuration, passed directly as a K8s HPA behavior object. behavior: # -- Enable autoscaling behaviours enabled: false # -- define scale down policies, must conform to HPAScalingRules scaleDown: {} # -- define scale up policies, must conform to HPAScalingRules scaleUp: {} kedaAutoscaling: # -- Enable KEDA autoscaling for the bloom-builder. Mutually exclusive with autoscaling.enabled enabled: false # @schema type:[integer, null] # -- Interval (seconds) to poll each trigger. Defaults to defaults.kedaAutoscaling.pollingInterval if not set. pollingInterval: null # -- Minimum replicas for KEDA autoscaling minReplicas: 1 # -- Maximum replicas for KEDA autoscaling maxReplicas: 3 # @schema type:[integer, null] # -- Period to wait after the last trigger reported active before scaling the resource back to 0 (seconds). # Defaults to defaults.kedaAutoscaling.cooldownPeriod if not set. cooldownPeriod: null # @schema additionalProperties:true # -- Fallback configuration for KEDA ScaledObject. Applied when the trigger metric cannot be retrieved. # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#fallback fallback: {} # @schema skipProperties:true;additionalProperties:true # -- Behavior configuration for KEDA ScaledObject (horizontalPodAutoscalerConfig.behavior). # Ref: https://keda.sh/docs/latest/reference/scaledobject-spec/#advanced behavior: {} # -- KEDA triggers for the bloom-builder. # Ref: https://keda.sh/docs/latest/scalers/ triggers: [] image: # @schema type:[string, null] # -- The Docker registry for the bloom-builder image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the bloom-builder image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the bloom-builder image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for bloom-builder pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for bloom-builder labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-builder annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for bloom-builder pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-builder pods podAnnotations: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for bloom-builder service # @deprecated -- This option is deprecated in favor of `bloomBuilder.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for bloom-builder service # @deprecated -- This option is deprecated in favor of `bloomBuilder.service.annotations` serviceAnnotations: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for bloom-builder Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for bloom-builder Service labels: {} # -- Service Type for bloom-builder Service type: "ClusterIP" # -- trafficDistribution for bloom-builder Service trafficDistribution: "" # -- Session affinity for bloom-builder Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for bloom-builder Service sessionAffinityConfig: {} # -- ipFamilyPolicy for bloom-builder Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for bloom-builder Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the bloom-builder service. This allows bloom-builder to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the bloom-builder extraArgs: [] # -- Environment variables to add to the bloom-builder pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the bloom-builder pods extraEnvFrom: [] # -- Volume mounts to add to the bloom-builder pods extraVolumeMounts: [] # -- Volumes to add to the bloom-builder pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the bloom-builder resources: {} # -- Container resize policy for the bloom-builder # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Init containers to add to the bloom-builder pods initContainers: [] # @schema type:[string, array, null] # -- Containers to add to the bloom-builder pods extraContainers: [] # -- Grace period to allow the bloom-builder to shutdown before it is killed terminationGracePeriodSeconds: 30 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for bloom-builder pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: bloom-builder app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: null # @schema additionalProperties:true # -- Node selector for bloom-builder pods nodeSelector: {} # -- Tolerations for bloom-builder pods tolerations: [] # @schema additionalProperties:true;deprecated:true # -- Adds the appProtocol field to the queryFrontend service. This allows bloomBuilder to work with istio protocol selection. # @deprecated -- This option is deprecated in favor of `bloomBuilder.service.appProtocol` appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # @schema skipProperties:true;additionalProperties:true # -- Update strategy for bloom-builder deployment strategy: rollingUpdate: maxSurge: 0 # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: 1 persistence: # -- Enable generic ephemeral volume-backed storage for the bloom-builder `data` volume. enabled: false # -- Storage type for the bloom-builder. pvc and ephemeral are supported. type: ephemeral # -- Set access modes on the generated volumeClaimTemplate. accessModes: - ReadWriteOnce # -- Size of the generated volumeClaimTemplate. size: 10Gi # @schema type:[string, null] # -- Storage class to be used for the generated volumeClaimTemplate. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is set, choosing the default provisioner. storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used for the generated volumeClaimTemplate. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # @schema type:[object, null] # -- Selector for the generated volumeClaimTemplate. selector: null # @schema additionalProperties:{"type":"string"} # -- Annotations for the generated volumeClaimTemplate. annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the generated volumeClaimTemplate. labels: {} serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the pattern ingester patternIngester: # -- Enable the component. Requires `loki.deploymentMode` to be set to `Distributed`. enabled: false # -- Kind of compactor deployment. StatefulSet and Deployment are supported. kind: StatefulSet # -- EXPERIMENTAL: Enable creating a Job to recreate the compactor StatefulSet when the compactor configuration is changed. ## Only applicable if `compactor.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # @schema type:[integer, null] # -- Number of replicas for the pattern ingester. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # @schema skipProperties:true;additionalProperties:true # -- UpdateStrategy or Strategy for the pattern ingester. strategy: rollingUpdate: partition: 0 # @schema additionalProperties:true # -- DNSConfig for pattern ingester pods dnsConfig: {} # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the pattern ingester hostUsers: null image: # @schema type:[string, null] # -- The Docker registry for the pattern ingester image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the pattern ingester image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the pattern ingester image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for pattern ingester pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for pattern ingester labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for pattern ingester annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for pattern ingester pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for pattern ingester pods podAnnotations: {} # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for pattern ingester pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: pattern-ingester app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: null # -- Additional CLI args for the pattern ingester extraArgs: [] # -- Environment variables to add to the pattern ingester pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the pattern ingester pods extraEnvFrom: [] # -- Volume mounts to add to the pattern ingester pods extraVolumeMounts: [] # -- Volumes to add to the pattern ingester pods extraVolumes: [] # @schema skipProperties:true;additionalProperties:true # -- readiness probe settings for pattern ingester pods. If empty, use `loki.readinessProbe` readinessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- liveness probe settings for pattern ingester pods. If empty use `loki.livenessProbe` livenessProbe: {} # @schema skipProperties:true;additionalProperties:true # -- startup probe settings for pattern ingester pods. If empty use `loki.startupProbe` startupProbe: {} # @schema additionalProperties:true # -- Resource requests and limits for the pattern ingester resources: {} # -- Container resize policy for the pattern ingester # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the pattern ingester pods extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the pattern ingester pods initContainers: [] # -- Grace period to allow the pattern ingester to shutdown before it is killed terminationGracePeriodSeconds: 30 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- Node selector for pattern ingester pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for pattern ingester pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" appProtocol: grpc: "" persistence: # -- Enable creating PVCs for the pattern ingester enabled: false # -- Size of persistent disk size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # -- List of the pattern ingester PVCs # @notationType -- list claims: - name: data # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for pattern ingester PVCs annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for pattern ingester PVCs labels: {} # - name: wal # size: 150Gi # -- Enable StatefulSetAutoDeletePVC feature enableStatefulSetAutoDeletePVC: false whenDeleted: Retain whenScaled: Retain serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the ruler ruler: # -- The ruler component is optional and can be disabled if desired. enabled: true # -- Kind of ruler deployment. StatefulSet and Deployment are supported. kind: StatefulSet # -- EXPERIMENTAL: Enable creating a Job to recreate the ruler StatefulSet when the ruler configuration is changed. ## Only applicable if `ruler.kind` is StatefulSet. Useful for PVC size changes, which require recreating the StatefulSet. statefulSetRecreateJob: enabled: false # -- Whether to enable the rules sidecar sidecar: false # @schema type:[integer, null] # -- Number of replicas for the ruler. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the ruler hostUsers: null image: # @schema type:[string, null] # -- The Docker registry for the ruler image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the ruler image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the ruler image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for ruler pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for ruler labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for ruler annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for ruler pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for ruler pods podAnnotations: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for ruler service # @deprecated -- This option is deprecated in favor of `ruler.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for ruler service # @deprecated -- This option is deprecated in favor of `ruler.service.annotations` serviceAnnotations: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for ruler Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for ruler Service labels: {} # -- Service Type for ruler Service type: "ClusterIP" # -- trafficDistribution for ruler Service trafficDistribution: "" # -- Session affinity for ruler Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for ruler Service sessionAffinityConfig: {} # -- ipFamilyPolicy for ruler Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for ruler Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the ruler service. This allows ruler to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the ruler extraArgs: [] # -- Environment variables to add to the ruler pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the ruler pods extraEnvFrom: [] # -- Volume mounts to add to the ruler pods extraVolumeMounts: [] # -- Volumes to add to the ruler pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the ruler resources: {} # -- Container resize policy for the ruler # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the ruler pods extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the ruler pods initContainers: [] # -- Grace period to allow the ruler to shutdown before it is killed terminationGracePeriodSeconds: 300 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for ruler pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: ruler app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: null # @schema additionalProperties:true # -- Node selector for ruler pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for ruler pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # @schema additionalProperties:true # -- DNSConfig for ruler pods dnsConfig: {} persistence: # -- Enable creating PVCs which is required when using recording rules enabled: false # -- Set access modes on the PersistentVolumeClaim accessModes: - ReadWriteOnce # -- Size of persistent disk size: 10Gi # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # @schema additionalProperties:{"type":"string"} # -- Annotations for ruler PVCs annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for ruler PVCs labels: {} # @schema additionalProperties:true;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `ruler.service.appProtocol` appProtocol: grpc: "" # -- Directories containing rules files. If used, you must also configure `loki.rulerConfig.storage` to use local storage. directories: {} # tenant_foo: # rules1.txt: | # groups: # - name: should_fire # rules: # - alert: HighPercentageError # expr: | # sum(rate({app="foo", env="production"} |= "error" [5m])) by (job) # / # sum(rate({app="foo", env="production"}[5m])) by (job) # > 0.05 # for: 10m # labels: # severity: warning # annotations: # summary: High error rate # - name: credentials_leak # rules: # - alert: http-credentials-leaked # annotations: # message: "{{ $labels.job }} is leaking http basic auth credentials." # expr: 'sum by (cluster, job, pod) (count_over_time({namespace="prod"} |~ "http(s?)://(\\w+):(\\w+)@" [5m]) > 0)' # for: 10m # labels: # severity: critical # rules2.txt: | # groups: # - name: example # rules: # - alert: HighThroughputLogStreams # expr: sum by(container) (rate({job=~"loki-dev/.*"}[1m])) > 1000 # for: 2m # tenant_bar: # rules1.txt: | # groups: # - name: should_fire # rules: # - alert: HighPercentageError # expr: | # sum(rate({app="foo", env="production"} |= "error" [5m])) by (job) # / # sum(rate({app="foo", env="production"}[5m])) by (job) # > 0.05 # for: 10m # labels: # severity: warning # annotations: # summary: High error rate # - name: credentials_leak # rules: # - alert: http-credentials-leaked # annotations: # message: "{{ $labels.job }} is leaking http basic auth credentials." # expr: 'sum by (cluster, job, pod) (count_over_time({namespace="prod"} |~ "http(s?)://(\\w+):(\\w+)@" [5m]) > 0)' # for: 10m # labels: # severity: critical # rules2.txt: | # groups: # - name: example # rules: # - alert: HighThroughputLogStreams # expr: sum by(container) (rate({job=~"loki-dev/.*"}[1m])) > 1000 # for: 2m serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # -- Configuration for the overrides-exporter overridesExporter: # -- The overrides-exporter component is optional and can be disabled if desired. enabled: false # -- Kind of backend workload. StatefulSet and Deployment are supported. kind: Deployment # @schema type:[integer, null] # -- Number of replicas for the overrides-exporter. Set to null to omit spec.replicas from the workload, # allowing an external controller (e.g. HPA, KEDA, rollout-operator) to manage replica counts without Helm resetting them. replicas: 0 # @schema additionalProperties:true # -- DNSConfig for overrides-exporter dnsConfig: {} # -- hostAliases to add hostAliases: [] # @schema type:[boolean, null] # - ip: 1.2.3.4 # hostnames: # - domain.tld # -- Use the host's user namespace in the overrides-exporter hostUsers: null image: # @schema type:[string, null] # -- The Docker registry for the overrides-exporter image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the overrides-exporter image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the overrides-exporter image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for overrides-exporter pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for overrides-exporter labels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for overrides-exporter annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for overrides-exporter pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for overrides-exporter pods podAnnotations: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Labels for overrides-exporter service # @deprecated -- This option is deprecated in favor of `overridesExporter.service.labels` serviceLabels: {} # @schema additionalProperties:{"type":"string"};deprecated:true # -- Annotations for overrides-exporter service # @deprecated -- This option is deprecated in favor of `overridesExporter.service.annotations` serviceAnnotations: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for overrides-exporter Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for overrides-exporter Service labels: {} # -- Service Type for overrides-exporter Service type: "ClusterIP" # -- trafficDistribution for overrides-exporter Service trafficDistribution: "" # -- Session affinity for overrides-exporter Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for overrides-exporter Service sessionAffinityConfig: {} # -- ipFamilyPolicy for overrides-exporter Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for overrides-exporter Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the overrides-exporter service. This allows overrides-exporter to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the overrides-exporter extraArgs: [] # -- Environment variables to add to the overrides-exporter pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the overrides-exporter pods extraEnvFrom: [] # -- Volume mounts to add to the overrides-exporter pods extraVolumeMounts: [] # -- Volumes to add to the overrides-exporter pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the overrides-exporter resources: {} # -- Container resize policy for the overrides-exporter # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the overrides-exporter pods extraContainers: [] # @schema type:[string, array, null] # -- Init containers to add to the overrides-exporter pods initContainers: [] # -- Grace period to allow the overrides-exporter to shutdown before it is killed terminationGracePeriodSeconds: 300 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for overrides-exporter pods. # @default -- Hard node anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: overrides-exporter app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: null # @schema additionalProperties:true # -- Node selector for overrides-exporter pods nodeSelector: {} # @schema item:object # -- Topology Spread Constraints for overrides-exporter pods # The value will be passed through tpl. topologySpreadConstraints: [] tolerations: [] # @schema additionalProperties:true;deprecated:true # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" # @deprecated -- This option is deprecated in favor of `overridesExporter.service.appProtocol` appProtocol: grpc: "" serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true # You can use a self hosted memcached by setting enabled to false and providing addresses. memcached: # -- Enable the built in memcached server provided by the chart enabled: true image: # -- Memcached Docker image registry registry: docker.io # -- Memcached Docker image repository repository: library/memcached # -- Memcached Docker image tag tag: 1.6.45-alpine # -- Memcached Docker image pull policy pullPolicy: IfNotPresent # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext override for memcached pods podSecurityContext: runAsNonRoot: true runAsUser: 11211 runAsGroup: 11211 fsGroup: 11211 seccompProfile: type: RuntimeDefault # @schema type:[string, null] # -- The name of the PriorityClass for memcached pods priorityClassName: null # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for memcached containers containerSecurityContext: readOnlyRootFilesystem: true capabilities: drop: [ALL] allowPrivilegeEscalation: false runAsNonRoot: true seccompProfile: type: RuntimeDefault # @schema skipProperties:true;additionalProperties:true # -- Readiness probe for memcached pods (probe port defaults to container port) readinessProbe: tcpSocket: port: client initialDelaySeconds: 5 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 6 # @schema skipProperties:true;additionalProperties:true # -- Liveness probe for memcached pods livenessProbe: tcpSocket: port: client initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 # @schema skipProperties:true;additionalProperties:true # -- Startup probe for memcached pods startupProbe: {} serviceAccount: # -- Specifies whether a ServiceAccount should be created create: true # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: false memcachedExporter: # -- Whether memcached metrics should be exported enabled: true image: # -- Memcached exporter Docker image registry registry: docker.io # -- Memcached exporter Docker image repository repository: prom/memcached-exporter # -- Memcached exporter Docker image tag tag: v0.17.0 # -- Memcached exporter Docker image pull policy pullPolicy: IfNotPresent # @schema additionalProperties:true resources: requests: {} limits: {} # -- Container resize policy for the memcached exporter # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for memcached exporter containers containerSecurityContext: readOnlyRootFilesystem: true capabilities: drop: [ALL] allowPrivilegeEscalation: false runAsNonRoot: true seccompProfile: type: RuntimeDefault # -- Extra args to add to the exporter container. # Example: # extraArgs: # memcached.tls.enable: true # memcached.tls.cert-file: /certs/cert.crt # memcached.tls.key-file: /certs/cert.key # memcached.tls.ca-file: /certs/ca.crt # memcached.tls.insecure-skip-verify: false # memcached.tls.server-name: memcached extraArgs: {} # @schema skipProperties:true;additionalProperties:true # -- Liveness probe for memcached exporter livenessProbe: httpGet: path: /metrics port: http-metrics initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 # @schema skipProperties:true;additionalProperties:true # -- Readiness probe for memcached exporter readinessProbe: httpGet: path: /metrics port: http-metrics initialDelaySeconds: 5 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 3 # @schema skipProperties:true;additionalProperties:true # -- Startup probe for memcached exporter startupProbe: {} resultsCache: # -- Specifies whether memcached based results-cache should be enabled enabled: true # -- Comma separated addresses list in DNS Service Discovery format addresses: dnssrvnoa+_memcached-client._tcp.{{ include "loki.resourceName" (dict "ctx" $ "component" "results-cache") }}.{{ include "loki.namespace" $ }}.svc.{{ .Values.global.clusterDomain }} # -- Specify how long cached results should be stored in the results-cache before being expired defaultValidity: 12h # -- Memcached operation timeout timeout: 500ms # -- Total number of results-cache replicas replicas: 1 # -- Port of the results-cache service port: 11211 # -- Amount of memory allocated to results-cache for object storage (in MB). allocatedMemory: 1024 # -- Amount of cpu allocated to results-cache for object storage (in integer or millicores). allocatedCPU: 500m # -- Maximum item results-cache for memcached (in MB). maxItemMemory: 5 # -- Maximum number of connections allowed connectionLimit: 16384 # -- Max memory to use for cache write back writebackSizeLimit: 500MB # -- Max number of objects to use for cache write back writebackBuffer: 500000 # -- Number of parallel threads for cache write back writebackParallelism: 1 # -- Extra init containers for results-cache pods initContainers: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the results-cache pods annotations: {} # @schema additionalProperties:true # -- Node selector for results-cache pods nodeSelector: {} # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for results-cache pods affinity: {} # @schema item:object # -- topologySpreadConstraints allows to customize the default topologySpreadConstraints. This can be either a single dict as shown below or a slice of topologySpreadConstraints. # labelSelector is taken from the constraint itself (if it exists) or is generated by the chart using the same selectors as for services. topologySpreadConstraints: [] # topologyKey: kubernetes.io/hostname # whenUnsatisfiable: ScheduleAnyway # -- Tolerations for results-cache pods tolerations: [] # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: 1 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- DNSConfig for results-cache dnsConfig: {} # @schema type:[string, null] # -- The name of the PriorityClass for results-cache pods priorityClassName: null # @schema type:[boolean, null] # -- Use the host's user namespace in results-cache pods hostUsers: null # @schema additionalProperties:{"type":"string"} # -- Labels for results-cache pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for results-cache pods podAnnotations: {} # -- Management policy for results-cache pods podManagementPolicy: Parallel # -- Grace period to allow the results-cache to shutdown before it is killed terminationGracePeriodSeconds: 60 # @schema skipProperties:true;additionalProperties:true # -- Stateful results-cache strategy statefulStrategy: type: RollingUpdate # -- Add extended options for results-cache memcached container. The format is the same as for the memcached -o/--extend flag. # Example: # extraExtendedOptions: 'tls,modern,track_sizes' extraExtendedOptions: "" # -- Additional CLI args for results-cache extraArgs: {} # @schema type:[array, null] # -- Additional containers to be added to the results-cache pod. extraContainers: [] # -- Additional volumes to be added to the results-cache pod (applies to both memcached and exporter containers). # Example: # extraVolumes: # - name: extra-volume # secret: # secretName: extra-volume-secret extraVolumes: [] # -- Additional volume mounts to be added to the results-cache pod (applies to both memcached and exporter containers). # Example: # extraVolumeMounts: # - name: extra-volume # mountPath: /etc/extra-volume # readOnly: true extraVolumeMounts: [] # @schema additionalProperties:true # -- Resource requests and limits for the results-cache # By default a safe memory limit will be requested based on allocatedMemory value (floor (* 1.2 allocatedMemory)). resources: {} # -- Container resize policy for the results-cache # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # -- Service annotations and labels service: # @schema additionalProperties:{"type":"string"} annotations: {} # @schema additionalProperties:{"type":"string"} labels: {} # -- Persistence settings for the results-cache persistence: # -- Enable creating PVCs for the results-cache enabled: false # -- Size of persistent disk, must be in G or Gi storageSize: 10G # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # -- Volume mount path mountPath: /data # @schema additionalProperties:{"type":"string"} # -- PVC additional labels labels: {} chunksCache: # -- Append to the name of the resources to make names different for l1 and l2 suffix: "" # -- Specifies whether memcached based chunks-cache should be enabled enabled: true # -- Comma separated addresses list in DNS Service Discovery format addresses: 'dnssrvnoa+_memcached-client._tcp.{{ include "loki.resourceName" (dict "ctx" $ "component" "chunks-cache" "suffix" $.Values.chunksCache.suffix ) }}.{{ include "loki.namespace" $ }}.svc.{{ .Values.global.clusterDomain }}' # -- Batchsize for sending and receiving chunks from chunks cache batchSize: 4 # -- Parallel threads for sending and receiving chunks from chunks cache parallelism: 5 # -- Memcached operation timeout timeout: 2000ms # -- Specify how long cached chunks should be stored in the chunks-cache before being expired defaultValidity: 0s # -- Total number of chunks-cache replicas replicas: 1 # -- Port of the chunks-cache service port: 11211 # -- Amount of memory allocated to chunks-cache for object storage (in MB). allocatedMemory: 8192 # -- Amount of cpu allocated to chunks-cache for object storage (in integer or millicores). allocatedCPU: 500m # -- Maximum item memory for chunks-cache (in MB). maxItemMemory: 5 # -- Maximum number of connections allowed connectionLimit: 16384 # -- Max memory to use for cache write back writebackSizeLimit: 500MB # -- Max number of objects to use for cache write back writebackBuffer: 500000 # -- Number of parallel threads for cache write back writebackParallelism: 1 # -- Extra init containers for chunks-cache pods initContainers: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the chunks-cache pods annotations: {} # @schema additionalProperties:true # -- Node selector for chunks-cache pods nodeSelector: {} # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for chunks-cache pods affinity: {} # @schema item:object # -- topologySpreadConstraints allows to customize the default topologySpreadConstraints. This can be either a single dict as shown below or a slice of topologySpreadConstraints. # labelSelector is taken from the constraint itself (if it exists) or is generated by the chart using the same selectors as for services. topologySpreadConstraints: [] # topologyKey: kubernetes.io/hostname # whenUnsatisfiable: ScheduleAnyway # -- Tolerations for chunks-cache pods tolerations: [] # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: 1 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # @schema type:[string, integer, null] # -- Pod Disruption Budget minAvailable minAvailable: null # @schema type:[string, integer, null] # -- Pod Disruption Budget maxUnavailable maxUnavailable: null # @schema type:[string, null] # -- Pod Disruption Budget unhealthyPodEvictionPolicy unhealthyPodEvictionPolicy: null # @schema additionalProperties:true # -- DNSConfig for chunks-cache dnsConfig: {} # @schema type:[string, null] # -- The name of the PriorityClass for chunks-cache pods priorityClassName: null # @schema type:[boolean, null] # -- Use the host's user namespace in chunks-cache pods hostUsers: null # @schema additionalProperties:{"type":"string"} # -- Labels for chunks-cache pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for chunks-cache pods podAnnotations: {} # -- Management policy for chunks-cache pods podManagementPolicy: Parallel # -- Grace period to allow the chunks-cache to shutdown before it is killed terminationGracePeriodSeconds: 60 # @schema skipProperties:true;additionalProperties:true # -- Stateful chunks-cache strategy statefulStrategy: type: RollingUpdate # -- Add extended options for chunks-cache memcached container. The format is the same as for the memcached -o/--extend flag. # Example: # extraExtendedOptions: 'tls,no_hashexpand' extraExtendedOptions: "" # -- Additional CLI args for chunks-cache extraArgs: {} # @schema type:[array, null] # -- Additional containers to be added to the chunks-cache pod. extraContainers: [] # -- Additional volumes to be added to the chunks-cache pod (applies to both memcached and exporter containers). # Example: # extraVolumes: # - name: extra-volume # secret: # secretName: extra-volume-secret extraVolumes: [] # -- Additional volume mounts to be added to the chunks-cache pod (applies to both memcached and exporter containers). # Example: # extraVolumeMounts: # - name: extra-volume # mountPath: /etc/extra-volume # readOnly: true extraVolumeMounts: [] # @schema additionalProperties:true # -- Resource requests and limits for the chunks-cache # By default a safe memory limit will be requested based on allocatedMemory value (floor (* 1.2 allocatedMemory)). resources: {} # -- Container resize policy for the chunks-cache # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # -- Service annotations and labels service: # @schema additionalProperties:{"type":"string"} annotations: {} # @schema additionalProperties:{"type":"string"} labels: {} # -- Persistence settings for the chunks-cache persistence: # -- Enable creating PVCs for the chunks-cache enabled: false # -- Size of persistent disk, must be in G or Gi storageSize: 10G # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # -- Volume mount path mountPath: /data # @schema additionalProperties:{"type":"string"} labels: {} # -- l2 memcache configuration l2: # -- Append to the name of the resources to make names different for l1 and l2 suffix: "l2" # -- The age of chunks should be transferred from l1 cache to l2 # 4 days l2ChunkCacheHandoff: 345600s # -- Specifies whether memcached based chunks-cache-l2 should be enabled enabled: false # -- Comma separated addresses list in DNS Service Discovery format addresses: 'dnssrvnoa+_memcached-client._tcp.{{ include "loki.resourceName" (dict "ctx" $ "component" "chunks-cache" "suffix" $.Values.chunksCache.l2.suffix ) }}.{{ include "loki.namespace" $ }}.svc.{{ .Values.global.clusterDomain }}' # -- Batchsize for sending and receiving chunks from chunks cache batchSize: 4 # -- Parallel threads for sending and receiving chunks from chunks cache parallelism: 5 # -- Memcached operation timeout timeout: 2000ms # -- Specify how long cached chunks should be stored in the chunks-cache-l2 before being expired defaultValidity: 0s # -- Total number of chunks-cache-l2 replicas replicas: 1 # -- Port of the chunks-cache-l2 service port: 11211 # -- Amount of memory allocated to chunks-cache-l2 for object storage (in MB). allocatedMemory: 8192 # -- Amount of cpu allocated to chunks-cache-l2 for object storage (in integer or millicores). allocatedCPU: 500m # -- Maximum item memory for chunks-cache-l2 (in MB). maxItemMemory: 5 # -- Maximum number of connections allowed connectionLimit: 16384 # -- Max memory to use for cache write back writebackSizeLimit: 500MB # -- Max number of objects to use for cache write back writebackBuffer: 500000 # -- Number of parallel threads for cache write back writebackParallelism: 1 # -- Extra init containers for chunks-cache-l2 pods initContainers: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the chunks-cache-l2 pods annotations: {} # @schema additionalProperties:true # -- Node selector for chunks-cach-l2 pods nodeSelector: {} # @schema skipProperties:true;additionalProperties:true # -- Affinity for chunks-cache-l2 pods affinity: {} # @schema item:object # -- topologySpreadConstraints allows to customize the default topologySpreadConstraints. This can be either a single dict as shown below or a slice of topologySpreadConstraints. # labelSelector is taken from the constraint itself (if it exists) or is generated by the chart using the same selectors as for services. topologySpreadConstraints: [] # topologyKey: kubernetes.io/hostname # whenUnsatisfiable: ScheduleAnyway # -- Tolerations for chunks-cache-l2 pods tolerations: [] # @schema type:[string, integer, null];deprecated:true # -- Pod Disruption Budget maxUnavailable # @deprecated -- This is deprecated in favor of `podDisruptionBudget.maxUnavailable`. maxUnavailable: 1 podDisruptionBudget: # -- Enable Pod Disruption Budget enabled: true # @schema additionalProperties:{"type":"string"} # -- Annotations for Pod Disruption Budget annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for Pod Disruption Budget labels: {} # minAvailable: 1 # maxUnavailable: 1 # unhealthyPodEvictionPolicy: IfHealthyBudget # @schema additionalProperties:true # -- DNSConfig for chunks-cache-l2 dnsConfig: {} # @schema type:[string, null] # -- The name of the PriorityClass for chunks-cache-l2 pods priorityClassName: null # @schema type:[boolean, null] # -- Use the host's user namespace in chunks-cache-l2 pods hostUsers: null # @schema additionalProperties:{"type":"string"} # -- Labels for chunks-cache-l2 pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for chunks-cache-l2 pods podAnnotations: {} # -- Management policy for chunks-cache-l2 pods podManagementPolicy: Parallel # -- Grace period to allow the chunks-cache-l2 to shutdown before it is killed terminationGracePeriodSeconds: 60 # @schema skipProperties:true;additionalProperties:true # -- Stateful chunks-cache strategy statefulStrategy: type: RollingUpdate # -- Add extended options for chunks-cache-l2 memcached container. The format is the same as for the memcached -o/--extend flag. # Example: # extraExtendedOptions: 'tls,no_hashexpand' extraExtendedOptions: "" # -- Additional CLI args for chunks-cache-l2 extraArgs: {} # @schema type:[array, null] # -- Additional containers to be added to the chunks-cache-l2 pod. extraContainers: [] # -- Additional volumes to be added to the chunks-cache-l2 pod (applies to both memcached and exporter containers). # Example: # extraVolumes: # - name: extra-volume # secret: # secretName: extra-volume-secret extraVolumes: [] # -- Additional volume mounts to be added to the chunks-cache-l2 pod (applies to both memcached and exporter containers). # Example: # extraVolumeMounts: # - name: extra-volume # mountPath: /etc/extra-volume # readOnly: true extraVolumeMounts: [] # @schema additionalProperties:true # -- Resource requests and limits for the chunks-cache-l2 # By default a safe memory limit will be requested based on allocatedMemory value (floor (* 1.2 allocatedMemory)). resources: {} # -- Container resize policy for the chunks-cache-l2 # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # -- Service annotations and labels service: # @schema additionalProperties:{"type":"string"} annotations: {} # @schema additionalProperties:{"type":"string"} labels: {} # -- Persistence settings for the chunks-cache-l2 persistence: # -- Enable creating PVCs for the chunks-cache-l2 enabled: false # -- Size of persistent disk, must be in G or Gi storageSize: 10G # @schema type:[string, null] # -- Storage class to be used. # If defined, storageClassName: . # If set to "-", storageClassName: "", which disables dynamic provisioning. # If empty or set to null, no storageClassName spec is # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack). storageClass: null # @schema type:[string, null] # -- Volume attributes class name to be used. # If empty or set to null, no volumeAttributesClassName spec is set. # Requires Kubernetes 1.31 volumeAttributesClassName: null # -- Volume mount path mountPath: /data # @schema additionalProperties:{"type":"string"} labels: {} ###################################################################################################################### # # Subchart configurations # ###################################################################################################################### # @schema skipProperties:true;additionalProperties:true # -- Setting for the Grafana Rollout Operator https://github.com/grafana/helm-charts/tree/main/charts/rollout-operator rollout_operator: enabled: false # @schema skipProperties:true;additionalProperties:true # -- podSecurityContext is the pod security context for the rollout operator. # When installing on OpenShift, override podSecurityContext settings with # # rollout_operator: # podSecurityContext: # fsGroup: null # runAsGroup: null # runAsUser: null podSecurityContext: fsGroup: 10001 runAsGroup: 10001 runAsNonRoot: true runAsUser: 10001 seccompProfile: type: RuntimeDefault # @schema skipProperties:true;additionalProperties:true # Set the container security context securityContext: readOnlyRootFilesystem: true capabilities: drop: [ALL] allowPrivilegeEscalation: false runAsNonRoot: true seccompProfile: type: RuntimeDefault webhooks: # -- Enable the rollout-operator webhooks. See https://github.com/grafana/rollout-operator/#webhooks. # Note that the webhooks require custom resource definitions. If upgrading, manually apply the files in the `crds` directory. enabled: true # -- Timeout in seconds for the prepare-downscale mutating webhook. Must be between 1 and 30. timeoutSeconds: 10 # -- Validating and mutating webhook failure policy. `Ignore` or `Fail`. failurePolicy: "Ignore" # -- Ignore MinIO deprecation validation when `minio.enabled=true`. This is a temporary compatibility escape hatch. ignoreMinioDeprecation: false # @schema skipProperties:true;additionalProperties:true # -- Configuration for the minio subchart (deprecated) minio: enabled: false replicas: 1 # Minio requires 2 to 16 drives for erasure code (drivesPerNode * replicas) # https://docs.min.io/docs/minio-erasure-code-quickstart-guide # Since we only have 1 replica, that means 2 drives must be used. drivesPerNode: 2 # root user rootUser: root-user rootPassword: supersecretpassword # The first user in the list below is used for Loki authentication. # You can add additional users if desired; they will not impact Loki. # `accessKey` = username, `secretKey` = password users: - accessKey: logs-user secretKey: supersecretpassword policy: readwrite buckets: - name: chunks policy: none purge: false - name: ruler policy: none purge: false persistence: size: 5Gi # @schema additionalProperties:{"type":"string"} annotations: {} # @schema additionalProperties:true resources: requests: cpu: 100m memory: 128Mi # @schema type:[string, null] # Allow the address used by Loki to refer to Minio to be overridden address: null # @schema type:[array, object, string, null] # Create extra manifests via values # Can be a list or dictionary, both are passed through `tpl`. If dict, keys are ignored and only values are used. # Objects can also be defined as multiline strings, useful for templating field names extraObjects: null # - apiVersion: v1 # kind: ConfigMap # metadata: # name: loki-alerting-rules # data: # loki-alerting-rules.yaml: |- # groups: # - name: example # rules: # - alert: example # expr: | # sum(count_over_time({app="loki"} |~ "error")) > 0 # for: 3m # labels: # severity: warning # category: logs # annotations: # message: "loki has encountered errors" # - | # apiVersion: v1 # kind: Secret # type: Opaque # metadata: # name: loki-distributed-basic-auth # data: # {{- range .Values.loki.tenants }} # {{ .name }}: {{ b64enc .password | quote }} # {{- end }} sidecar: image: registry: docker.io # -- The Docker registry and image for the k8s sidecar repository: kiwigrid/k8s-sidecar # -- Docker image tag tag: 2.11.2 # -- Docker image sha. If empty, no sha will be used sha: "" # -- Docker image pull policy pullPolicy: IfNotPresent # @schema additionalProperties:true # -- Resource requests and limits for the sidecar resources: {} # -- Container resize policy for the sidecar # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # limits: # cpu: 100m # memory: 100Mi # requests: # cpu: 50m # memory: 50Mi # @schema skipProperties:true;additionalProperties:true # -- The SecurityContext for the sidecar. securityContext: readOnlyRootFilesystem: true capabilities: drop: - ALL allowPrivilegeEscalation: false seccompProfile: type: RuntimeDefault # -- Set to true to skip tls verification for kube api calls. skipTlsVerify: false # -- Set to true to disable strict x509 verification for kube api calls. disableX509StrictVerification: false # -- Ensure that rule files aren't conflicting and being overwritten by prefixing their name with the namespace they are defined in. enableUniqueFilenames: false # @schema skipProperties:true;additionalProperties:true # -- Readiness probe definition. readinessProbe: enabled: true httpGet: path: /healthz port: http-sidecar periodSeconds: 10 initialDelaySeconds: 3 successThreshold: 1 failureThreshold: 3 timeoutSeconds: 1 # @schema skipProperties:true;additionalProperties:true # -- Liveness probe definition. livenessProbe: enabled: true httpGet: path: /healthz port: http-sidecar periodSeconds: 30 initialDelaySeconds: 30 successThreshold: 1 failureThreshold: 3 timeoutSeconds: 1 # @schema skipProperties:true;additionalProperties:true # -- Startup probe definition. startupProbe: enabled: false rules: # -- Whether or not to create a sidecar to ingest rule from specific ConfigMaps and/or Secrets. enabled: true # -- Label that the configmaps/secrets with rules will be marked with. label: loki_rule # -- Label value that the configmaps/secrets with rules will be set to. labelValue: "" # -- Folder into which the rules will be placed. folder: /rules # @schema type:[string, null] # -- The annotation overwriting the folder value. # The annotation value can be either an absolute or a relative path. Relative paths will be relative to FOLDER. # Useful for multi-tenancy setups. folderAnnotation: null # @schema type:[string, null] # -- Comma separated list of namespaces. 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 request, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds. watchMethod: WATCH # -- Search in configmap, secret, or both. resource: both # @schema type:[string, null] # -- Absolute path to the shell script to execute after a configmap or secret has been reloaded. script: null # -- 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: 60 # # -- 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. watchClientTimeout: 60 # -- Log level of the sidecar container. logLevel: INFO # -- Health Server port of the sidecar container. healthPort: 8080 # -- Monitoring section determines which monitoring features to enable monitoring: # @schema type:[string, null] # -- Alternative namespace to deploy all monitoring resources (ServiceMonitor, PrometheusRule, ConfigMap dashboards) in. # Defaults to the release namespace. namespace: null # -- Label name for the app_instance label injected into scraped metrics and recording rules. appInstanceLabelName: 'app_instance' # -- Value for the app_instance label injected into scraped metrics and recording rules. # Supports Helm templating. appInstanceLabelValue: '{{ include "loki.fullname" . }}' multiCluster: # -- When enabled, shows the cluster variable in dashboards. # If clusterName is also set, the chart adds 'cluster' labels to scraped # metrics, recording rules, and alerts, and includes 'cluster' in recording # rule aggregations. If clusterName is left empty, only dashboard changes # are applied — use this when an external tool (e.g. Grafana Alloy) manages # cluster label injection and PromQL rewriting. enabled: false # -- Value for the 'cluster' label. Supports Helm templating. # When empty, recording rules and alerts are not modified — only dashboards # show the cluster variable. # e.g. clusterName: '{{ .Values.global.clusterName }}' clusterName: "" # Dashboards for monitoring Loki dashboards: # -- If enabled, create configmap resources with dashboards for monitoring Loki enabled: false # @schema additionalProperties:{"type":"string"} # -- Additional annotations for the dashboards ConfigMap resources annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the dashboards ConfigMap resources labels: grafana_dashboard: "1" # -- Timezone for the default dashboards defaultDashboardsTimezone: utc # -- Editable flag for the default dashboards defaultDashboardsEditable: true # -- Default interval for Grafana dashboards defaultDashboardsInterval: 1m grafanaOperator: # -- If enabled, GrafanaOperator resources for Grafana Operator are created to deploy the dashboards. enabled: false # @schema additionalProperties:{"type":"string"} # -- Additional annotations for the GrafanaOperator resources annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for the GrafanaOperator resources labels: {} # -- How frequently the operator should resync resources (in duration format) resyncPeriod: 10m # @schema type:[string, null] # -- Which folder contains all dashboards in Grafana ## This folder will be created on the Root level ## Only one of 'folder', 'folderUID' or 'folderRef' can be set ## folder: General # @schema type:[string, null] # -- Which UID of the target folder contains all dashboards in Grafana ## This allows you to use subfolder hierarchy ## Only one of 'folder', 'folderUID' or 'folderRef' can be set ## folderUID: null # @schema type:[string, null] # -- Which GrafanaFolder reference contains all dashboards in Grafana ## This allows you to use subfolder hierarchy. ## Only one of 'folder', 'folderUID' or 'folderRef' can be set ## folderRef: null # @schema $ref: $k8s/_definitions.json#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector # -- instanceSelector for the GrafanaDashboard resources ## The grafana-operator matches this against the labels on your Grafana CR ## An empty selector (the default) matches every Grafana instance instanceSelector: {} # -- Recording rules for monitoring Loki, required for some dashboards rules: # -- If enabled, create a PrometheusRule resource with Loki recording rules enabled: false # @schema additionalProperties:{"type":"string"} # -- Additional labels for the PrometheusRule resource labels: {} # @schema additionalProperties:{"type":"string"} # -- Additional annotations for the PrometheusRule resource annotations: {} # -- Additional labels applied to all individual recording rules additionalRuleLabels: {} # -- Additional annotations applied to all individual recording rules additionalRuleAnnotations: {} # -- Extra label dimensions added to all by() aggregation clauses in recording rules additionalAggregationLabels: [] # -- Alert rules for monitoring Loki alerts: # -- If enabled, create a PrometheusRule resource with Loki alert rules enabled: false # -- Additional labels for the alerts PrometheusRule resource labels: {} # -- Additional annotations for the alerts PrometheusRule resource annotations: {} # -- Selectively disable individual alerts by name. # e.g.: disabled: { LokiRequestErrors: true } disabled: {} # -- Override for/severity on individual alerts. # e.g.: overrides: { LokiRequestErrors: { for: 5m, severity: warning } } overrides: {} # -- Global keepFiringFor applied to all alert rules keepFiringFor: "" # -- Additional labels applied to all individual alert rules additionalRuleLabels: {} # -- Additional annotations applied to all individual alert rules additionalRuleAnnotations: {} # -- Extra label dimensions added to all by() aggregation clauses in alert expressions additionalAggregationLabels: [] # -- Additional PrometheusRule objects to create alongside the chart-managed ones. # Each key becomes the resource name suffix; the value must contain a 'groups' key # with standard Prometheus rule groups. Can contain both recording rules and alerts. # e.g.: # additionalPrometheusRules: # my-alerts: # groups: # - name: my-loki-alerts # rules: # - alert: MyLokiAlert # expr: 'up{job="loki"} == 0' additionalPrometheusRules: {} # -- ServiceMonitor configuration serviceMonitor: # -- If enabled, ServiceMonitor resources for Prometheus Operator are created enabled: false # -- Namespace selector for ServiceMonitor resources namespaceSelector: {} # @schema additionalProperties:{"type":"string"} # -- ServiceMonitor annotations annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional ServiceMonitor labels labels: {} # -- ServiceMonitor scrape interval # Default is 15s because included recording rules use a 1m rate, and scrape interval needs to be at # least 1/4 rate interval. interval: 15s # @schema type:[string, null] # -- ServiceMonitor scrape timeout in Go duration format (e.g. 15s) scrapeTimeout: null # -- ServiceMonitor relabel configs to apply to samples before scraping # https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#relabelconfig relabelings: [] # -- ServiceMonitor metric relabel configs to apply to samples before ingestion # https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#endpoint metricRelabelings: [] # -- ServiceMonitor will use http by default, but you can pick https as well scheme: http # @schema type:[object, null] # -- ServiceMonitor will use these tlsConfig settings to make the health check requests tlsConfig: null # -- ServiceMonitor job label prefix will be used to generate the job label for the scraped metrics. # -- The job label is required for the included dashboards to work. jobPrefix: '{{ include "loki.namespace" $ }}/' # @schema deprecated # -- DEPRECATED Configuration for the table-manager. The table-manager is only necessary when using a deprecated # index type such as Cassandra, Bigtable, or DynamoDB, it has not been necessary since loki introduced self- # contained index types like 'boltdb-shipper' and 'tsdb'. This will be removed in a future helm chart. tableManager: # -- Specifies whether the table-manager should be enabled enabled: false image: # @schema type:[string, null] # -- The Docker registry for the table-manager image. Overrides `loki.image.registry` registry: null # @schema type:[string, null] # -- Docker image repository for the table-manager image. Overrides `loki.image.repository` repository: null # @schema type:[string, null] # -- Docker image tag for the table-manager image. Overrides `loki.image.tag` tag: null # @schema type:[string, null] # -- Command to execute instead of defined in Docker image command: null # @schema type:[string, null] # -- The name of the PriorityClass for table-manager pods priorityClassName: null # @schema additionalProperties:{"type":"string"} # -- Labels for table-manager pods podLabels: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for table-manager deployment annotations: {} # @schema additionalProperties:{"type":"string"} # -- Annotations for table-manager pods podAnnotations: {} service: # @schema additionalProperties:{"type":"string"} # -- Annotations for table-manager Service annotations: {} # @schema additionalProperties:{"type":"string"} # -- Additional labels for table-manager Service labels: {} # -- Service Type for table-manager Service type: "ClusterIP" # -- trafficDistribution for table-manager Service trafficDistribution: "" # -- Session affinity for table-manager Service sessionAffinity: "" # @schema additionalProperties:true # -- Session affinity config for table-manager Service sessionAffinityConfig: {} # -- ipFamilyPolicy for table-manager Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilyPolicy: "" # -- ipFamilies for table-manager Service # Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services ipFamilies: [] # -- Adds the appProtocol field to the table-manager service. This allows table-manager to work with istio protocol selection. appProtocol: # -- Set the optional grpc service protocol. Ex: "grpc", "http2" or "https" grpc: "" # -- Additional CLI args for the table-manager extraArgs: [] # -- Environment variables to add to the table-manager pods extraEnv: [] # -- Environment variables from secrets or configmaps to add to the table-manager pods extraEnvFrom: [] # -- Volume mounts to add to the table-manager pods extraVolumeMounts: [] # -- Volumes to add to the table-manager pods extraVolumes: [] # @schema additionalProperties:true # -- Resource requests and limits for the table-manager resources: {} # -- Container resize policy for the table-manager # Example: # resizePolicy: # - resourceName: cpu # restartPolicy: NotRequired # - resourceName: memory # restartPolicy: RestartContainer resizePolicy: [] # @schema type:[string, array, null] # -- Containers to add to the table-manager pods extraContainers: [] # -- Grace period to allow the table-manager to shutdown before it is killed terminationGracePeriodSeconds: 30 # @schema type:[boolean, null] # -- Use the host's user namespace in table-manager pods hostUsers: null # @schema type:[object, null];skipProperties:true;additionalProperties:true # -- Affinity for table-manager pods. # @default -- Hard node and anti-affinity # The value will be passed through tpl. affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app.kubernetes.io/component: table-manager app.kubernetes.io/name: '{{ include "loki.name" . }}' app.kubernetes.io/instance: '{{ .Release.Name }}' topologyKey: kubernetes.io/hostname # @schema additionalProperties:true # -- DNS config table-manager pods dnsConfig: {} # @schema additionalProperties:true # -- Node selector for table-manager pods nodeSelector: {} # -- Tolerations for table-manager pods tolerations: [] # -- Enable deletes by retention retention_deletes_enabled: false # @schema type:[string, integer] # -- Set retention period retention_period: 0 serviceAccount: # -- Specifies whether a ServiceAccount should be created create: false # @schema type:[string, null] # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template name: null # @schema item:object;itemProperties:{"name": {"type": "string"}} # -- Image pull secrets for the service account imagePullSecrets: [] # @schema additionalProperties:{"type":"string"} # -- Annotations for the service account annotations: {} # @schema additionalProperties:{"type":"string"} # -- Labels for the service account labels: {} # -- Set this toggle to false to opt out of automounting API credentials for the service account automountServiceAccountToken: true