e6data Kubernetes Operator¶
The e6data Kubernetes Operator automates the lifecycle of e6data analytics platform components inside a Kubernetes cluster. It turns declarative resources (CRDs) into a running, production-grade e6data deployment with minimal manual wiring.
Instead of hand-crafting Deployments, Services, configuration, and IAM wiring, you express your intent as custom resources:
| CRD | Purpose |
|---|---|
| NamespaceConfig | Shared infrastructure settings (cloud, storage, scheduling) for a namespace |
| MetadataServices | Storage and Schema services for metadata management |
| QueryService | Query execution cluster (Planner, Queue, Executor) |
| E6Catalog | External data catalog registration (Hive, Glue, Unity, Iceberg, Delta) |
| CatalogRefresh | One-time catalog metadata refresh |
| CatalogRefreshSchedule | Scheduled catalog refresh (cron-based) |
| Pool | Shared compute pool for burst capacity |
| Governance | Data access control policies |
| GreptimeDBCluster | Time-series database for query history |
| MonitoringServices | Logs and metrics collection (Vector-based) |
The operator continuously reconciles these resources towards the desired state, creating and updating the underlying Kubernetes primitives and cloud integrations.
Architecture Overview¶
┌─────────────────────────────────────────────────────────────────────────────────┐
│ KUBERNETES CLUSTER │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ e6-operator-system namespace │ │
│ │ ┌─────────────────────────────────────────────────────────────────┐ │ │
│ │ │ E6 OPERATOR (Deployment) │ │ │
│ │ │ • Watches CRDs across all namespaces │ │ │
│ │ │ • Reconciles desired state → actual state │ │ │
│ │ │ • Exposes autoscaling API (:8082) │ │ │
│ │ │ • Validation webhooks (:9443) │ │ │
│ │ └─────────────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ Creates & manages │ │
│ ┌───────────────────┼───────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ workspace-prod namespace │ │
│ │ │ │
│ │ ┌──────────────────────┐ ┌──────────────────────────────────────┐ │ │
│ │ │ MetadataServices │ │ QueryService │ │ │
│ │ │ ┌────────────────┐ │ │ ┌─────────┐ ┌─────────┐ │ │ │
│ │ │ │Storage Service │ │◄───┤ │ Envoy │ │ Planner │ │ │ │
│ │ │ │(Blue/Green) │ │ │ │ (xDS) │──│ + gRPC │ │ │ │
│ │ │ └────────────────┘ │ │ └─────────┘ └────┬────┘ │ │ │
│ │ │ ┌────────────────┐ │ │ │ │ │ │
│ │ │ │Schema Service │ │ │ ┌─────────┐ ┌────┴────┐ │ │ │
│ │ │ │(Blue/Green) │ │ │ │ Queue │ │Executors│ ◄── Autoscale │ │
│ │ │ └────────────────┘ │ │ │Scheduler│ │ (1..N) │ or Pool│ │ │
│ │ └──────────────────────┘ │ └─────────┘ └─────────┘ │ │ │
│ │ └──────────────────────────────────────┘ │ │
│ │ ┌──────────────────────┐ ┌──────────────────────────────────────┐ │ │
│ │ │ E6Catalog │ │ Pool (optional) │ │ │
│ │ │ • HIVE / GLUE │ │ • Burst compute capacity │ │ │
│ │ │ • UNITY / ICEBERG │ │ • Karpenter NodePool │ │ │
│ │ │ • DELTA │ │ • Warmup DaemonSet │ │ │
│ │ └──────────────────────┘ └──────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ greptime-system namespace (optional) │ │
│ │ ┌──────────────────────────────────────────────────────────────────┐ │ │
│ │ │ GreptimeDBCluster │ │ │
│ │ │ • Frontend (SQL/gRPC/Prometheus endpoints) │ │ │
│ │ │ • Datanode (query execution) │ │ │
│ │ │ • Meta (coordination) │ │ │
│ │ │ • ETCD (metadata persistence) │ │ │
│ │ └──────────────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────────┘
│
Connects to │
┌──────────────────────────────┼──────────────────────────────┐
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Object Storage │ │ Metastore │ │ Query Clients │
│ ┌────────────┐ │ │ ┌────────────┐ │ │ ┌────────────┐ │
│ │ S3 / GCS │ │ │ │ AWS Glue │ │ │ │ JDBC/ODBC │ │
│ │ Azure Blob │ │ │ │ Hive HMS │ │ │ │ REST API │ │
│ │ Linode Obj │ │ │ │ Unity Cat │ │ │ │ Python SDK │ │
│ └────────────┘ │ │ │ Iceberg │ │ │ └────────────┘ │
└──────────────────┘ └──────────────────┘ └──────────────────┘
Data Flow¶
- User applies CRs → Operator watches and reconciles
- MetadataServices creates Storage + Schema services (blue-green deployment)
- E6Catalog registers external catalogs with Storage service via HTTP API
- QueryService creates query execution stack (Planner → Queue → Executors), traffic routed via Envoy
- Executors read data from object storage, query metastore for schema
- Pool (optional) provides burst compute via Karpenter-provisioned nodes
- GreptimeDB (optional) stores query history and metrics
Quickstart¶
Prerequisites¶
| Component | Version | Purpose |
|---|---|---|
| Kubernetes | 1.24+ | Container orchestration |
| Helm | 3.8+ | Package management |
| cert-manager | 1.10+ | Webhook TLS certificates |
| Object Storage | - | S3/GCS/Azure Blob for data |
For detailed prerequisites and cloud-specific setup, see the Prerequisites Guide and Installation Guide.
For AWS: Follow the complete AWS Onboarding Guide for step-by-step deployment instructions.
Installation¶
# 1. Install cert-manager (required)
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.2/cert-manager.yaml
# 2. Wait for cert-manager
kubectl wait --for=condition=Available --timeout=120s -n cert-manager \
deployment/cert-manager deployment/cert-manager-webhook deployment/cert-manager-cainjector
# 3. Install CRDs
kubectl apply -f config/crd/bases/
# 4. Install the operator
helm install e6-operator ./helm/e6-operator \
--namespace e6-operator-system \
--create-namespace \
--set image.repository=us-docker.pkg.dev/e6data-analytics/e6data/e6-operator \
--set image.tag=1.0.201 \
--set imagePullSecrets[0].name=gcr-json-key
# 5. Verify installation
kubectl get pods -n e6-operator-system
For production installations with custom values, see Helm Values Reference.
Deploy Your First Workspace¶
# Create namespace
kubectl create namespace workspace-demo
# Deploy MetadataServices
cat <<EOF | kubectl apply -f -
apiVersion: e6data.io/v1alpha1
kind: MetadataServices
metadata:
name: demo
namespace: workspace-demo
spec:
workspace: demo
tenant: my-company
storageBackend: s3a://my-data-lake-bucket
storage:
imageTag: "3.0.217"
resources:
memory: "8Gi"
cpu: "4"
schema:
imageTag: "3.0.217"
resources:
memory: "8Gi"
cpu: "4"
EOF
# Check status
kubectl get mds demo -n workspace-demo -w
Register a Data Catalog¶
cat <<EOF | kubectl apply -f -
apiVersion: e6data.io/v1alpha1
kind: E6Catalog
metadata:
name: data-lake
namespace: workspace-demo
spec:
catalogType: GLUE
metadataServicesRef: demo
isDefault: true
connectionMetadata:
catalogConnection:
glueConnection:
region: us-east-1
EOF
# Check catalog registration
kubectl get e6cat data-lake -n workspace-demo
Deploy Query Service¶
cat <<EOF | kubectl apply -f -
apiVersion: e6data.io/v1alpha1
kind: QueryService
metadata:
name: demo-cluster
namespace: workspace-demo
spec:
alias: demo
workspace: demo
planner:
image:
tag: "3.0.217"
resources:
memory: "4Gi"
cpu: "2"
queue:
image:
tag: "3.0.217"
resources:
memory: "4Gi"
cpu: "2"
executor:
replicas: 2
image:
tag: "3.0.217"
resources:
memory: "16Gi"
cpu: "8"
EOF
# Watch deployment
kubectl get qs demo-cluster -n workspace-demo -w
Key Features¶
Blue-Green Deployments¶
All stateful components (MetadataServices, QueryService) use blue-green deployment strategy: - Zero-downtime updates - Automatic rollback on failure - Release history tracking
Auto-Detection & Configuration¶
The operator auto-detects and configures: - Cloud provider from cluster nodes - Storage endpoints from MetadataServices - Java heap settings from resource limits - Service discovery between components
Multi-Cloud Support¶
| Cloud | Object Storage | Metastore | Node Provisioning |
|---|---|---|---|
| AWS | S3 | Glue | Karpenter |
| GCP | GCS | Hive/BigQuery | Karpenter |
| Azure | Blob | Hive/Unity | Karpenter |
| Linode | S3-compatible | Hive | LKE Pools |
Validation Webhooks¶
All CRDs have comprehensive validation: - Required field checks - Format validation (storage paths, resources) - Cross-field validation (cloud/storage compatibility) - Update safety checks (immutable fields)
Next Steps¶
| Task | Link |
|---|---|
| AWS complete deployment | AWS Onboarding Guide |
| Infrastructure prerequisites | Prerequisites Guide |
| Detailed installation | Installation Guide |
| Helm configuration | Helm Values Reference |
| Understand all CRDs | CRD Catalog |
| Production setup | MetadataServices |
| Query cluster deployment | QueryService |
| Catalog integration | E6Catalog |
| Burst scaling | Pool |
| Logs and metrics | MonitoringServices |
| Query history | Query History Guide |
| Autoscaling | Autoscaling Guide |
| RBAC permissions | RBAC Permissions Guide |
| Status & diagnostics | Status & Diagnostics Guide |
| Common issues | Troubleshooting |
Support¶
- GitHub Issues: https://github.com/e6data/e6-operator/issues
- Documentation: https://docs.e6data.io
- Slack: #e6data-operator on community Slack