Last Updated: 5/8/2026
These instructions explain how to install and run Feldera Enterprise
on a Kubernetes cluster. It requires a valid Feldera Enterprise license
— please request one at learnmore@feldera.com if you are interested.
Prerequisites
-
kubectl:
kubectl versionUsed to interact with the Kubernetes cluster
-
helm:
helm versionPackage manager to conveniently manage deployments on Kubernetes
-
Feldera license, notably the account id and license key. They are required in the installation. Please reach out to us at
learnmore@feldera.comif you are interested. -
The Feldera Helm chart and Docker images are hosted on AWS ECR public registry . We will use the chart and multi-arch images by referring to their online repository naming
public.ecr.aws/feldera/<image>:<version>.
Kubernetes Cluster Configuration
Node Sizing
| Resource | Recommendation |
|---|---|
| CPU | 32–48 CPUs per node |
| RAM | At least 32 GiB per node |
By default, the Feldera control plane and pipelines run on the same nodes. Use nodeSelectors to run them on different nodes or node types.
RAM requirements vary by workload. See the memory usage documentation for detailed guidance.
Persistent Volume Sizing
Persistent volumes should meet the following specifications:
- Volume Size: At least the size of the input data. Feldera stores state to perform incremental computations, so the volume must be large enough to hold it. Users can expand pipeline storage on demand.
- IOPS: At least 16,000
- Throughput: At least 1,000 MB/s
Recommended disk types by cloud provider:
| Cloud Provider | Disk Type |
|---|---|
| AWS | gp3 |
| Azure | Ultra Disk |
| GCP | Hyperdisk Balanced |
Installing Feldera Enterprise
-
Kubernetes access: check that your
kubectlis configured to your Kubernetes cluster.kubectl cluster-info kubectl get namespace -
Version: Visit https://gallery.ecr.aws/feldera/feldera-chart , click on the “Image tags” tab for a list of versions, and choose a version. The most recent version should be at the top of the list and is normally the right choice.
-
Installation: we use our Helm chart, which internally refers to the other images, to perform the installation in namespace
felderawith release namefeldera.ACCOUNT_ID="00000000-0000-0000-0000-000000000000" # Set to own LICENSE_KEY="00000000-0000-0000-0000-000000000000" # Set to own VERSION=0.88.0 # Replace with previously chosen version helm upgrade --install feldera \ oci://public.ecr.aws/feldera/feldera-chart --version "${VERSION}" \ --namespace feldera --create-namespace \ --set felderaVersion="${VERSION}" \ --set felderaAccountId="${ACCOUNT_ID}" \ --set felderaLicenseKey="${LICENSE_KEY}" \ --set felderaDatabaseSecretRef="feldera-db-insecure-secret"Note: the license verification is done by interacting with our online license server at
cloud.feldera.com.Note: how to configure your own database credentials is explained in a further section.
-
Check: check the status of the deployment.
kubectl get pods -n feldera… which should output approximately the following:
NAME READY STATUS RESTARTS AGE feldera-db-0 1/1 Running 0 3m9s feldera-kubernetes-runner-6447b8f56d-86j4w 1/1 Running 0 3m9s feldera-compiler-server-0 1/1 Running 0 3m9s feldera-api-server-c546499bc-wdpkm 1/1 Running 0 3m9s -
Usage:
Interaction with Feldera happens through the API server, which has an associated service named
<release name>-api-server.<namespace>.svc.cluster.local:8080. With kubectl, this can be port-forwarded to be accessible locally:kubectl port-forward -n feldera svc/feldera-api-server 8080:8080… after which you can (leaving the forwarding running in a terminal):
- Visit Web Console in browser: http://127.0.0.1:8080
- Interact with the API: http://127.0.0.1:8080/v0/…
Note: access through kubectl port-forwarding is mostly useful for test and development. In other cases, setting up an ingress (e.g., in EKS) is likely preferable.
Extra
Retrieving the Feldera values file
The values.yaml file can be retrieved for an existing Feldera release or from the remote Feldera registry.
Remote Feldera registry: Run helm show values oci://public.ecr.aws/feldera/feldera-chart --version {version} >> values.yaml where version is the Feldera platform version for which you want to retrieve values.
Existing Feldera release: Run helm get values {feldera-release-name} --all -o yaml >> values.yaml where feldera-release-name is the name of your release. The value is usually feldera, unless the value has been configured during the installation process.
Configure custom database credentials
Instead of the insecure default DB credentials, you can supply your own custom database credentials.
-
Secret configuration file: create a file
feldera-db-secret.yamlwith custom database credentials.# Filename: feldera-db-secret.yaml apiVersion: v1 kind: Secret type: Opaque metadata: name: feldera-db-secret stringData: .user: "..." # Fill in .password: "..." # Fill in -
Create secret: with the configuration file, create the secret:
#kubectl create namespace feldera # If the namespace does not exist yet kubectl apply -n feldera -f feldera-db-secret.yaml -
Specify secret during installation: in the
helminstallation command, set the following:--set felderaDatabaseSecretRef="feldera-db-secret"Note: it must be a new installation.
Connect to an external database service
You can connect to an external PostgreSQL database with the following steps:
- Secret configuration file: create a file
feldera-db-secret.yamlwith the.connection_url
# Filename: feldera-db-secret.yaml
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: feldera-db-secret
stringData:
.connection_url: "postgresql://username:password@db-name.cluster-name.region.rds.amazonaws.com/db_name?sslmode=require"-
Create secret: with the configuration file, create the secret:
#kubectl create namespace feldera # If the namespace does not exist yet kubectl apply -n feldera -f feldera-db-secret.yaml -
Optional: Add the TLS Certificate (
.pemfile) in a configmap:wget https://example.com/your-bundle.pem kubectl create configmap postgres-pem -n feldera --from-file=postgresql-ca.pem=your-bundle.pemThis step is optional, if no certificate is provided feldera will use the system certificates (
ca-certificatespackage from Ubuntu 24.04 and the Amazon RDSglobal-bundle.pemfile) to validate the TLS connection.Note: If necessary, you can override the file (
postgresql-ca.pem) and configmap (postgres-pem) names by adjustingpostgresTlsCertificateFileandpostgresTlsConfigMapRefinvalues.yaml. -
Specify secret and external postgres configuration during installation: in the
helminstallation command, set the following:--set postgresExternal=true --set felderaDatabaseSecretRef="feldera-db-secret" --set postgresTlsConfigMapRef="postgres-pem"Note: it must be a new installation. If you skip step 3, you must not set the
postgresTlsConfigMapRefvariable.
Feldera installation overview
Services:
$ kubectl get svc -n feldera
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
feldera-kubernetes-runner ClusterIP 10.43.175.228 <none> 8080/TCP 5m10s
feldera-api-server ClusterIP 10.43.176.120 <none> 8080/TCP 5m10s
feldera-db ClusterIP 10.43.60.190 <none> 5431/TCP 5m10s
feldera-compiler-server ClusterIP 10.43.60.125 <none> 8085/TCP 5m10sPods:
$ kubectl get pods -n feldera
NAME READY STATUS RESTARTS AGE
feldera-db-0 1/1 Running 0 5m31s
feldera-kubernetes-runner-6447b8f56d-86j4w 1/1 Running 0 5m31s
feldera-compiler-server-0 1/1 Running 0 5m31s
feldera-api-server-c546499bc-wdpkm 1/1 Running 0 5m31sStatefulSets:
$ kubectl get sts -n feldera
NAME READY AGE
feldera-db 1/1 5m41s
feldera-compiler-server 1/1 5m41sDeployments:
$ kubectl get deployments -n feldera
NAME READY UP-TO-DATE AVAILABLE AGE
feldera-kubernetes-runner 1/1 1 1 5m55s
feldera-api-server 1/1 1 1 5m55sPersistent volume claims:
$ kubectl get pvc -n feldera
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
db-storage-feldera-db-0 Bound pvc-a5acb4ef-1d3c-4773-ad42-528657f11c94 20Gi RWO local-path 6m11s
compiler-storage-feldera-compiler-server-0 Bound pvc-07369993-c20a-4f8a-abd1-52bf3be413c3 20Gi RWO local-path 6m11sUninstallation
If you installed Feldera in its own dedicated namespace,
the most thorough way to uninstall Feldera is to delete the entire namespace:
kubectl delete namespace feldera
If you wish to preserve the namespace, it can be uninstalled through
the usual helm method:
helm uninstall -n feldera felderaThis does not delete the persistent volumes, which need to be deleted separately:
kubectl get pvc -n feldera
kubectl delete pvc -n feldera db-storage-feldera-db-0
kubectl delete pvc -n feldera compiler-storage-feldera-compiler-server-0
kubectl get pvc -n felderaTroubleshooting
Incorrect license
If an incorrect account id and/or license key was provided, the kubernetes-runner will fail to start:
$ kubectl get pods -n feldera
NAME READY STATUS RESTARTS AGE
feldera-db-0 1/1 Running 0 2m34s
feldera-compiler-server-0 1/1 Running 0 2m34s
feldera-kubernetes-runner-854446fb84-rg66z 0/1 CrashLoopBackOff 1 (9s ago) 2m34s
feldera-api-server-7bb757f685-jwn5v 1/1 Running 0 2m34s… and an explanation will be visible in its log:
$ kubectl logs -n feldera deployment/feldera-kubernetes-runner
...
FAIL: license verification failed: a valid license is required for the Enterprise version of Feldera. Please contact Feldera support (support@feldera.com) to resolve this issue.
...To resolve this, provide a correct account id and license key
during the helm installation.
If you do not have a license, please reach out to us at support@feldera.com.