# Default values for garage. # This is a YAML-formatted file. # Declare variables to be passed into your templates. # Garage configuration. These values go to garage.toml garage: # Can be changed for better performance on certain systems # https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/#db-engine-since-v0-8-0 dbEngine: "lmdb" # Defaults is 1MB # An increase can result in better performance in certain scenarios # https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/#block-size blockSize: "1048576" # Default to 3 replicas, see the replication_mode section at # https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/#replication-mode replicationMode: "3" # zstd compression level of stored blocks # https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/#compression-level compressionLevel: "1" rpcBindAddr: "[::]:3901" # If not given, a random secret will be generated and stored in a Secret object rpcSecret: "" # This is not required if you use the integrated kubernetes discovery bootstrapPeers: [] kubernetesSkipCrd: false s3: api: region: "garage" rootDomain: ".s3.garage.tld" web: rootDomain: ".web.garage.tld" index: "index.html" # Template for the garage configuration # Values can be templated # ref: https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/ garage.toml: |- metadata_dir = "/mnt/meta" data_dir = "/mnt/data" db_engine = "{{ .Values.garage.dbEngine }}" block_size = {{ .Values.garage.blockSize }} replication_mode = "{{ .Values.garage.replicationMode }}" compression_level = {{ .Values.garage.compressionLevel }} rpc_bind_addr = "{{ .Values.garage.rpcBindAddr }}" # rpc_secret will be populated by the init container from a k8s secret object rpc_secret = "__RPC_SECRET_REPLACE__" bootstrap_peers = {{ .Values.garage.bootstrapPeers }} [kubernetes_discovery] namespace = "{{ .Release.Namespace }}" service_name = "{{ include "garage.fullname" . }}" skip_crd = {{ .Values.garage.kubernetesSkipCrd }} [s3_api] s3_region = "{{ .Values.garage.s3.api.region }}" api_bind_addr = "[::]:3900" root_domain = "{{ .Values.garage.s3.api.rootDomain }}" [s3_web] bind_addr = "[::]:3902" root_domain = "{{ .Values.garage.s3.web.rootDomain }}" index = "{{ .Values.garage.s3.web.index }}" [admin] api_bind_addr = "[::]:3903" {{- if .Values.monitoring.tracing.sink }} trace_sink = "{{ .Values.monitoring.tracing.sink }}" {{- end }} # Data persistence persistence: enabled: true meta: # storageClass: "fast-storage-class" size: 100Mi # used only for daemon sets hostPath: /var/lib/garage/meta data: # storageClass: "slow-storage-class" size: 100Mi # used only for daemon sets hostPath: /var/lib/garage/data # Deployment configuration deployment: # Switchable to DaemonSet kind: StatefulSet # Number of StatefulSet replicas/garage nodes to start replicaCount: 3 # If using statefulset, allow Parallel or OrderedReady (default) podManagementPolicy: OrderedReady image: repository: dxflrs/amd64_garage # please prefer using the chart version and not this tag tag: "" pullPolicy: IfNotPresent initImage: repository: busybox tag: stable pullPolicy: IfNotPresent imagePullSecrets: [] nameOverride: "" fullnameOverride: "" serviceAccount: # Specifies whether a service account should be created create: true # Annotations to add to the service account annotations: {} # The name of the service account to use. # If not set and create is true, a name is generated using the fullname template name: "" podAnnotations: {} podSecurityContext: runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 runAsNonRoot: true securityContext: # The default security context is heavily restricted # feel free to tune it to your requirements capabilities: drop: - ALL readOnlyRootFilesystem: true service: # You can rely on any service to expose your cluster # - ClusterIP (+ Ingress) # - NodePort (+ Ingress) # - LoadBalancer type: ClusterIP s3: api: port: 3900 web: port: 3902 # NOTE: the admin API is excluded for now as it is not consistent across nodes ingress: s3: api: enabled: false # Rely either on the className or the annotation below but not both # replace "nginx" by an Ingress controller # you can find examples here https://kubernetes.io/docs/concepts/services-networking/ingress-controllers # className: "nginx" annotations: {} # kubernetes.io/ingress.class: "nginx" # kubernetes.io/tls-acme: "true" labels: {} hosts: - host: "s3.garage.tld" # garage S3 API endpoint paths: - path: / pathType: Prefix - host: "*.s3.garage.tld" # garage S3 API endpoint, DNS style bucket access paths: - path: / pathType: Prefix tls: [] # - secretName: my-garage-cluster-tls # hosts: # - kubernetes.docker.internal web: enabled: false # Rely either on the className or the annotation below but not both # replace "nginx" by an Ingress controller # you can find examples here https://kubernetes.io/docs/concepts/services-networking/ingress-controllers # className: "nginx" annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" labels: {} hosts: - host: "*.web.garage.tld" # wildcard website access with bucket name prefix paths: - path: / pathType: Prefix - host: "mywebpage.example.com" # specific bucket access with FQDN bucket paths: - path: / pathType: Prefix tls: [] # - secretName: my-garage-cluster-tls # hosts: # - kubernetes.docker.internal resources: {} # The following are indicative for a small-size deployement, for anything serious double them. # limits: # cpu: 100m # memory: 1024Mi # requests: # cpu: 100m # memory: 512Mi nodeSelector: {} tolerations: [] affinity: {} environment: {} extraVolumes: {} extraVolumeMounts: {} monitoring: metrics: # If true, a service for monitoring is created with a prometheus.io/scrape annotation enabled: false serviceMonitor: # If true, a ServiceMonitor CRD is created for a prometheus operator # https://github.com/coreos/prometheus-operator enabled: false path: /metrics # namespace: monitoring (defaults to use the namespace this chart is deployed to) labels: {} interval: 15s scheme: http tlsConfig: {} scrapeTimeout: 10s relabelings: [] tracing: sink: ""