Configure Quiver

Quiver is the GoodData.CN component that caches analytical data and manages durable storage for both cached datasets and raw exports. You configure it exclusively through Helm values; the chart generates Quiver’s internal configuration files.

For initial setup, follow Production Deployment or use the Configuration Assistant. Both produce a working quiver block for AWS S3 or Azure Blob Storage. This page covers the options beyond that baseline.

Storage Backends

Storage typeValue for durableStorageTypeConfiguration block
AWS S3 or S3-compatibleS3s3DurableStorage
Azure Blob StorageABSabsDurableStorage
Shared filesystemFSfsDurableStorage

Only one durable storage type is active at a time.

Changing the storage type requires an etcd wipe

Quiver caches its storage configuration in etcd. If you change durableStorageType on a running deployment, clear the etcd state before you redeploy, or the Quiver pods crashloop with etcd errors.

Authentication

authType selects how Quiver authenticates to the storage backend.

authTypeApplies toBehavior
aws_defaultS3Uses the default AWS credentials chain. Use this with IRSA on EKS or with an instance profile.
aws_tokensS3Uses the static keys in s3AccessKey and s3SecretKey.
azure_defaultABSUses the Kubernetes-provided managed identity. Set absClientId for a user-assigned identity.
azure_tokensABSUses the static account key in absAccountKey.

Prefer workload identity (IRSA or Azure Workload Identity) over static keys. If you must use static keys, put them in a Kubernetes Secret and reference it rather than writing them into your values file.

Prefixes

s3BucketPrefix and absContainerPrefix organize Quiver data inside a bucket or container, so several environments can share one bucket without colliding. A dedicated bucket or container per environment is still the better isolation boundary.

Quiver and the export-controller share the durable storage for raw exports. The prefix in rawExportsFs.prefix (default raw-exports) must match the prefix configured for the export-controller, otherwise exports complete but are not readable through Quiver.

S3-Compatible Object Stores

For local, on-premises, or air-gapped clusters, run an in-cluster S3 gateway (SeaweedFS, MinIO) and point Quiver at it with endpointOverride and static keys. This is what the local platform of the Terraform evaluation module deploys.

quiver:
  durableStorageType: "S3"
  s3DurableStorage:
    s3Region: "us-east-1"
    s3Bucket: "quiver-cache"
    endpointOverride: "http://seaweedfs-all-in-one.seaweedfs.svc.cluster.local:8333"
    scheme: "http"
    authType: "aws_tokens"
    s3AccessKey: "gdcn"
    s3SecretKey: "<secret>"

Use the same endpoint, scheme, and keys (with separate buckets) for quiver.s3DatasourceFsStorage (with quiver.datasourceFs.storageType: "S3"), exportController.exportS3Storage, and exportController.s3.accessKey/exportController.s3.secretKey.

Shared Filesystem

For test and single-cluster deployments without object storage:

quiver:
  durableStorageType: "FS"
  fsDurableStorage:
    storageClassName: "nfs-rwx"

This requires a storage class that provides the ReadWriteMany access mode. Cache size is capped by resultCache.totalCacheLimit.

Tuning Parameters

Set these under quiver only when the defaults do not fit your workload.

ParameterDescriptionDefault
cacheCountLimitMaximum number of caches per shard.5000
limitFlightCountTotal number of cached datasets (flights). Raise storage.serverWorkDirSize with it — the flight catalog lives there.50000
concurrentPutRequestsMaximum number of concurrent uploads.Auto (based on CPU)
putThrottlingKeyLimitLimits concurrent uploads per organization.None
putQueueSizeQueue size for uploads waiting for slots.256
serverCriticalRssGraceGrace period for high memory usage, in seconds.15
serverMallocTrimIntervalFrequency of releasing unused memory, in seconds.5
etcdRegistrationTtlTTL for Quiver’s etcd registration, in seconds.30

If you raise concurrency, raise the memory limits of the Quiver pods with it.

Troubleshooting

SymptomPossible causeResolution
Quiver pods crashloop with etcd errorsdurableStorageType changed without clearing etcdClear the etcd state and redeploy.
Raw exports missingQuiver and export-controller prefixes differAlign rawExportsFs.prefix with the export-controller prefix.
Quiver PVCs stay Pending with “no matching storage class” (FS durable storage)quiver.fsDurableStorage.storageClassName names a class the cluster does not haveRun kubectl get storageclass, then set quiver.fsDurableStorage.storageClassName to a class that exists and provides the ReadWriteMany access mode.