garage: controllers: server-1: type: deployment replicas: 1 strategy: Recreate revisionHistoryLimit: 3 pod: labels: garage-type: server affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: garage-type operator: In values: - server topologyKey: kubernetes.io/hostname containers: main: image: repository: dxflrs/garage tag: v2.1.0 pullPolicy: IfNotPresent envFrom: - secretRef: name: garage-token-secret resources: requests: cpu: 10m memory: 128Mi debug: image: repository: ubuntu tag: resolute-20251208 pullPolicy: IfNotPresent command: - "sleep" - "infinity" resources: requests: cpu: 10m memory: 32Mi server-2: type: deployment replicas: 1 strategy: Recreate revisionHistoryLimit: 3 pod: labels: garage-type: server affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: garage-type operator: In values: - server topologyKey: kubernetes.io/hostname containers: main: image: repository: dxflrs/garage tag: v2.1.0 pullPolicy: IfNotPresent envFrom: - secretRef: name: garage-token-secret resources: requests: cpu: 10m memory: 128Mi server-3: type: deployment replicas: 1 strategy: Recreate revisionHistoryLimit: 3 pod: labels: garage-type: server affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: garage-type operator: In values: - server topologyKey: kubernetes.io/hostname containers: main: image: repository: dxflrs/garage tag: v2.1.0 pullPolicy: IfNotPresent envFrom: - secretRef: name: garage-token-secret resources: requests: cpu: 10m memory: 128Mi webui: type: deployment replicas: 1 strategy: Recreate revisionHistoryLimit: 3 containers: main: image: repository: khairul169/garage-webui tag: 1.1.0 pullPolicy: IfNotPresent env: - name: API_BASE_URL value: http://garage-main.garage:3903 - name: S3_ENDPOINT_URL value: http://garage-main.garage:3900 - name: API_ADMIN_KEY valueFrom: secretKeyRef: name: garage-token-secret key: GARAGE_ADMIN_TOKEN resources: requests: cpu: 10m memory: 128Mi configMaps: config: enabled: true data: garage-1.toml: | replication_factor = 3 metadata_dir = "/var/lib/garage/meta" data_dir = "/var/lib/garage/data" metadata_snapshots_dir = "/var/lib/garage/snapshots" db_engine = "lmdb" metadata_auto_snapshot_interval = "6h" compression_level = 3 rpc_bind_addr = "[::]:3901" rpc_public_addr = "garage-1:3901" allow_world_readable_secrets = false [s3_api] s3_region = "us-east-1" api_bind_addr = "[::]:3900" root_domain = ".garage-s3.alexlebens.net" [s3_web] bind_addr = "[::]:3902" root_domain = ".garage-s3.alexlebens.net" [admin] api_bind_addr = "[::]:3903" metrics_require_token = true garage-2.toml: | replication_factor = 3 metadata_dir = "/var/lib/garage/meta" data_dir = "/var/lib/garage/data" metadata_snapshots_dir = "/var/lib/garage/snapshots" db_engine = "lmdb" metadata_auto_snapshot_interval = "6h" compression_level = 3 rpc_bind_addr = "[::]:3901" rpc_public_addr = "garage-2:3901" allow_world_readable_secrets = false [s3_api] s3_region = "us-east-1" api_bind_addr = "[::]:3900" root_domain = ".garage-s3.alexlebens.net" [s3_web] bind_addr = "[::]:3902" root_domain = ".garage-s3.alexlebens.net" [admin] api_bind_addr = "[::]:3903" metrics_require_token = true garage-3.toml: | replication_factor = 3 metadata_dir = "/var/lib/garage/meta" data_dir = "/var/lib/garage/data" metadata_snapshots_dir = "/var/lib/garage/snapshots" db_engine = "lmdb" metadata_auto_snapshot_interval = "6h" compression_level = 3 rpc_bind_addr = "[::]:3901" rpc_public_addr = "garage-3:3901" allow_world_readable_secrets = false [s3_api] s3_region = "us-east-1" api_bind_addr = "[::]:3900" root_domain = ".garage-s3.alexlebens.net" [s3_web] bind_addr = "[::]:3902" root_domain = ".garage-s3.alexlebens.net" [admin] api_bind_addr = "[::]:3903" metrics_require_token = true service: garage-main: forceRename: garage-main controller: server-2 ports: s3: port: 3900 targetPort: 3900 protocol: HTTP rpc: port: 3901 targetPort: 3901 protocol: HTTP web: port: 3902 targetPort: 3902 protocol : HTTP admin: port: 3903 targetPort: 3903 protocol: HTTP server-1: forceRename: garage-1 controller: server-1 ports: s3: port: 3900 targetPort: 3900 protocol: HTTP rpc: port: 3901 targetPort: 3901 protocol: HTTP web: port: 3902 targetPort: 3902 protocol: HTTP admin: port: 3903 targetPort: 3903 protocol: HTTP server-2: forceRename: garage-2 controller: server-2 ports: s3: port: 3900 targetPort: 3900 protocol: HTTP rpc: port: 3901 targetPort: 3901 protocol: HTTP web: port: 3902 targetPort: 3902 protocol: HTTP admin: port: 3903 targetPort: 3903 protocol: HTTP server-3: forceRename: garage-3 controller: server-3 ports: s3: port: 3900 targetPort: 3900 protocol: HTTP rpc: port: 3901 targetPort: 3901 protocol: HTTP web: port: 3902 targetPort: 3902 protocol: HTTP admin: port: 3903 targetPort: 3903 protocol: HTTP webui: controller: webui ports: webui: port: 3909 targetPort: 3909 protocol: HTTP serviceMonitor: main: selector: matchLabels: app.kubernetes.io/name: garage app.kubernetes.io/instance: garage serviceName: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}' endpoints: - port: admin interval: 1m scrapeTimeout: 30s path: /metrics bearerTokenSecret: name: garage-token-secret key: GARAGE_METRICS_TOKEN route: webui: kind: HTTPRoute parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: traefik-gateway namespace: traefik hostnames: - garage-webui.alexlebens.net rules: - backendRefs: - group: '' kind: Service name: garage-webui port: 3909 weight: 100 matches: - path: type: PathPrefix value: / s3: kind: HTTPRoute parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: traefik-gateway namespace: traefik hostnames: - garage-s3.alexlebens.net rules: - backendRefs: - group: '' kind: Service name: garage-main port: 3900 weight: 100 matches: - path: type: PathPrefix value: / persistence: config: enabled: true type: configMap name: garage advancedMounts: server-1: main: - path: /etc/garage.toml readOnly: true mountPropagation: None subPath: garage-1.toml debug: - path: /etc/garage.toml readOnly: true mountPropagation: None subPath: garage-1.toml server-2: main: - path: /etc/garage.toml readOnly: true mountPropagation: None subPath: garage-2.toml server-3: main: - path: /etc/garage.toml readOnly: true mountPropagation: None subPath: garage-3.toml webui: main: - path: /etc/garage.toml readOnly: true mountPropagation: None subPath: garage-1.toml # db-1: # forceRename: garage-db-1 # storageClass: ceph-block # accessMode: ReadWriteOnce # size: 50Gi # retain: true # advancedMounts: # server-1: # main: # - path: /var/lib/garage/meta # readOnly: false # debug: # - path: /var/lib/garage/meta # readOnly: false db-2: forceRename: garage-db-2 storageClass: ceph-block accessMode: ReadWriteOnce size: 50Gi retain: true advancedMounts: server-2: main: - path: /var/lib/garage/meta readOnly: false db-3: forceRename: garage-db-3 storageClass: ceph-block accessMode: ReadWriteOnce size: 50Gi retain: true advancedMounts: server-3: main: - path: /var/lib/garage/meta readOnly: false data-1: forceRename: garage-data storageClass: synology-iscsi-delete accessMode: ReadWriteOnce size: 800Gi retain: true advancedMounts: server-1: main: - path: /var/lib/garage/data readOnly: false debug: - path: /var/lib/garage/data readOnly: false data-2: forceRename: garage-data-2 storageClass: synology-iscsi-delete accessMode: ReadWriteOnce size: 800Gi retain: true advancedMounts: server-2: main: - path: /var/lib/garage/data readOnly: false data-3: forceRename: garage-data-3 storageClass: synology-iscsi-delete accessMode: ReadWriteOnce size: 800Gi retain: true advancedMounts: server-3: main: - path: /var/lib/garage/data readOnly: false snapshots: forceRename: garage-snapshots storageClass: synology-iscsi-delete accessMode: ReadWriteOnce size: 50Gi retain: true advancedMounts: server-1: main: - path: /var/lib/garage/snapshots readOnly: false