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 type | Value for durableStorageType | Configuration block |
|---|---|---|
| AWS S3 or S3-compatible | S3 | s3DurableStorage |
| Azure Blob Storage | ABS | absDurableStorage |
| Shared filesystem | FS | fsDurableStorage |
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.
authType | Applies to | Behavior |
|---|---|---|
aws_default | S3 | Uses the default AWS credentials chain. Use this with IRSA on EKS or with an instance profile. |
aws_tokens | S3 | Uses the static keys in s3AccessKey and s3SecretKey. |
azure_default | ABS | Uses the Kubernetes-provided managed identity. Set absClientId for a user-assigned identity. |
azure_tokens | ABS | Uses 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.
| Parameter | Description | Default |
|---|---|---|
cacheCountLimit | Maximum number of caches per shard. | 5000 |
limitFlightCount | Total number of cached datasets (flights). Raise storage.serverWorkDirSize with it — the flight catalog lives there. | 50000 |
concurrentPutRequests | Maximum number of concurrent uploads. | Auto (based on CPU) |
putThrottlingKeyLimit | Limits concurrent uploads per organization. | None |
putQueueSize | Queue size for uploads waiting for slots. | 256 |
serverCriticalRssGrace | Grace period for high memory usage, in seconds. | 15 |
serverMallocTrimInterval | Frequency of releasing unused memory, in seconds. | 5 |
etcdRegistrationTtl | TTL for Quiver’s etcd registration, in seconds. | 30 |
If you raise concurrency, raise the memory limits of the Quiver pods with it.
Troubleshooting
| Symptom | Possible cause | Resolution |
|---|---|---|
| Quiver pods crashloop with etcd errors | durableStorageType changed without clearing etcd | Clear the etcd state and redeploy. |
| Raw exports missing | Quiver and export-controller prefixes differ | Align 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 have | Run kubectl get storageclass, then set quiver.fsDurableStorage.storageClassName to a class that exists and provides the ReadWriteMany access mode. |