Installation
IceGate is deployed on Kubernetes using Helm charts, with Kustomize overlays for environment-specific customizations.
Prerequisites
- Kubernetes >= 1.28 with Helm 3
- Object Storage: AWS S3 or S3-compatible (RustFS)
- Iceberg Catalog: the built-in S3 catalog (default, no external service), or Nessie (REST), AWS S3 Tables, or AWS Glue
Helm Chart
The Helm chart deploys all IceGate components: Ingest, Query, and a Migrate job (schema creation as a pre-install/pre-upgrade hook).
Install from OCI Registry
helm install icegate oci://ghcr.io/icegatetech/charts/icegate \
--version 0.1.0 \
--namespace icegate \
--create-namespace \
-f values.yaml
Install from Local Charts
git clone https://github.com/icegatetech/icegate.git
helm install icegate ./icegate/config/helm/icegate \
--namespace icegate \
--create-namespace \
-f values.yaml
Minimal values.yaml
Note
Helm values use camelCase and flat keys (e.g., backend: s3 + s3.warehouse). The chart translates these into the native serde tagged enum config format (backend: !s3) that IceGate binaries expect. See Configuration for the native config reference.
A minimal values.yaml using the default built-in S3 catalog with S3-compatible storage. No external catalog service is involved - the catalog state is a root.json object in the warehouse bucket:
catalog:
backend: s3
s3:
warehouse: catalog
warehouse: "s3://warehouse/"
storage:
s3:
bucket: warehouse
region: us-east-1
endpoint: "http://rustfs:9000"
queue:
common:
basePath: "s3://queue/"
aws:
existingSecret: icegate-aws-credentials
region: us-east-1
REST Catalog (Nessie)
Use this only if you already run a Nessie or other Iceberg REST catalog - it adds an external service the default deployment does not need:
catalog:
backend: rest
rest:
uri: http://nessie:19120/iceberg
warehouse: "s3://warehouse/"
storage:
s3:
bucket: warehouse
region: us-east-1
endpoint: "http://rustfs:9000"
aws:
existingSecret: icegate-aws-credentials
region: us-east-1
AWS Glue Catalog
catalog:
backend: glue
glue:
catalogId: "123456789012"
warehouse: "s3://my-bucket/warehouse/"
storage:
s3:
bucket: my-bucket
region: eu-central-1
aws:
existingSecret: icegate-aws-credentials
region: eu-central-1
AWS S3 Tables Catalog
catalog:
backend: s3tables
s3tables:
tableBucketArn: "arn:aws:s3tables:eu-central-1:123456789012:bucket/my-tables"
storage:
s3:
region: eu-central-1
aws:
existingSecret: icegate-aws-credentials
region: eu-central-1
Key Helm Values
| Value | Default | Description |
|---|---|---|
catalog.backend |
s3 |
Catalog type: s3, rest, s3tables, or glue |
storage.s3.bucket |
warehouse |
S3 bucket name |
storage.s3.endpoint |
"" |
Custom S3 endpoint (RustFS). Omit for real AWS S3 |
aws.existingSecret |
"" |
Secret with aws-access-key-id and aws-secret-access-key keys |
query.replicaCount |
1 |
Query service replicas |
ingest.replicaCount |
1 |
Ingest service replicas |
query.cache.enabled |
true |
Enable hybrid disk+memory cache for query reads |
query.engine.walQueryEnabled |
false |
Include WAL data in query results for real-time access |
serviceMonitor.enabled |
false |
Create Prometheus ServiceMonitor resources |
migrate.enabled |
true |
Run schema migration as Helm hook |
Container Images
| Component | Image |
|---|---|
| Query | ghcr.io/icegatetech/icegate-query |
| Ingest | ghcr.io/icegatetech/icegate-ingest |
| Migrate | ghcr.io/icegatetech/icegate-maintain |
Kustomize Overlays
For environment-specific customizations, IceGate provides Kustomize overlays that compose the Helm chart with infrastructure dependencies.
Available Overlays
| Overlay | Description | Infrastructure |
|---|---|---|
skaffold |
Local development with Skaffold | RustFS, observability stack |
orbstack |
OrbStack container runtime | RustFS, observability stack |
aws-glue |
AWS Glue catalog | Observability stack (external S3) |
aws-s3tables |
AWS S3 Tables catalog | Observability stack (external S3) |
external-s3 |
External S3 + Nessie catalog | Nessie, observability stack |
All overlays share a common base (config/kustomize/base/) that deploys the observability stack: Prometheus (kube-prometheus-stack), Grafana with pre-built IceGate dashboards, and Jaeger for distributed tracing.
Usage
# Apply an overlay directly
kubectl apply -k config/kustomize/overlays/aws-glue
# Or use Skaffold for development (see Development Setup)
skaffold dev
Customizing an Overlay
Each overlay contains:
kustomization.yaml- declares Helm charts and patchesvalues-icegate.yaml- IceGate Helm values for this environmentsecret-aws.yaml- AWS credentials Secret (edit before applying)
To create a custom overlay:
cp -r config/kustomize/overlays/orbstack config/kustomize/overlays/my-env
vi config/kustomize/overlays/my-env/values-icegate.yaml
vi config/kustomize/overlays/my-env/secret-aws.yaml
kubectl apply -k config/kustomize/overlays/my-env
Verify Installation
# Check pods are running
kubectl get pods -n icegate
# Port-forward to query service
kubectl port-forward -n icegate svc/icegate-query 3100:3100
# Test readiness
curl http://localhost:3100/ready
Next Steps
- Continue to Quick Start to ingest your first data
- See Configuration for detailed configuration options
- Set up a Development Environment for contributing