This document describes how the Splunk AI Operator chooses the object storage backend and how to configure AWS S3, MinIO, SeaweedFS, or any S3-compatible storage.
The operator selects the storage backend only by the path scheme in spec.objectStorage.path:
| Path scheme | Backend behavior | cloudProvider | artifactsProvider |
|---|---|---|---|
s3:// |
AWS S3 (region, IRSA, no custom endpoint) | aws |
s3 |
s3compat:// |
S3-compatible (generic; requires endpoint + secretRef) | s3compat |
s3 |
minio:// |
MinIO (alias for S3-compatible) | s3compat |
s3 |
seaweedfs:// |
SeaweedFS (alias for S3-compatible) | s3compat |
s3 |
gs:// / gcs:// |
GCP Cloud Storage | gcp |
gcs |
azure:// |
Azure Blob Storage | azure |
azure |
- Path scheme is the only decision input; there is no separate "provider type" switch in the operator logic.
- For S3-compatible backends (MinIO, SeaweedFS, Ceph, or any custom S3 API), use
s3compat://bucket/prefixwithendpointandsecretRefset. You can also useminio://orseaweedfs://as aliases; all use the same implementation (AWS S3 SDK with custom endpoint and path-style).
- cloudProvider: Identifies the platform (e.g.
awsfor native AWS S3,s3compatfor MinIO/SeaweedFS/other S3-compatible). Used for telemetry and any logic that needs to distinguish "real AWS" from "custom S3-compatible". - artifactsProvider: The protocol used to access artifacts. For all S3 API backends (AWS S3, MinIO, SeaweedFS) the protocol is the S3 API, so
artifactsProvideris alwayss3for those. Only GCS and Azure use different protocols (gcs,azure).
-
s3://bucket/prefix- Use for AWS S3 only.
- Set
region. Optionally usesecretReffor static credentials; otherwise IRSA or default AWS credential chain is used. Do not setendpointfor native S3.
-
s3compat://bucket/prefix- Use for any S3-compatible backend (MinIO, SeaweedFS, Ceph, etc.).
- Required:
endpoint(e.g.http://minio.namespace.svc:9000orhttp://seaweedfs-s3:8333),region(any value),secretRefwiths3_access_keyands3_secret_key.
-
minio://bucket/prefix- Alias for S3-compatible; use for MinIO (in-cluster or external). Same requirements as
s3compat://.
- Alias for S3-compatible; use for MinIO (in-cluster or external). Same requirements as
-
seaweedfs://bucket/prefix- Alias for S3-compatible; use for SeaweedFS (bring your own). Same requirements as
s3compat://.
- Alias for S3-compatible; use for SeaweedFS (bring your own). Same requirements as
spec.objectStorage.provider is an optional hint for documentation and tooling. Allowed values: aws, minio, seaweedfs, s3compat, gcs, azure. The operator does not use this field to select the backend; behavior is derived only from the path scheme (and for s3://, absence of endpoint). Use it for clarity in manifests or scripts.
spec:
objectStorage:
path: s3://my-ai-bucket/artifacts
region: us-east-2
# secretRef optional when using IRSAspec:
objectStorage:
path: minio://ai-platform-bucket/artifacts
endpoint: http://minio.minio.svc.cluster.local:9000
region: us-east-1
secretRef: minio-credentialsspec:
objectStorage:
path: minio://ai-platform-bucket/artifacts
endpoint: http://10.0.1.50:9000
region: us-east-1
secretRef: minio-credentialsspec:
objectStorage:
path: seaweedfs://my-bucket/artifacts
endpoint: http://seaweedfs-s3.my-namespace.svc:8333
region: us-east-1
secretRef: minio-credentialsspec:
objectStorage:
path: s3compat://my-bucket/artifacts
endpoint: http://s3-gateway.my-namespace.svc:8333
region: us-east-1
secretRef: minio-credentialsThe same Kubernetes secret format is used for all S3-compatible backends: keys s3_access_key and s3_secret_key. Pods receive S3COMPAT_OBJECT_STORE_ENDPOINT_URL (when endpoint is set), S3COMPAT_OBJECT_STORE_ACCESS_KEY, and S3COMPAT_OBJECT_STORE_SECRET_KEY from the operator.
Any storage that exposes an S3-compatible API (e.g. Ceph, DigitalOcean Spaces) can be used by using s3compat://bucket with the appropriate endpoint and secretRef. No new client code or scheme is required; minio:// and seaweedfs:// remain as optional aliases for clarity.