Skip to content

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

  1. User applies CRs → Operator watches and reconciles
  2. MetadataServices creates Storage + Schema services (blue-green deployment)
  3. E6Catalog registers external catalogs with Storage service via HTTP API
  4. QueryService creates query execution stack (Planner → Queue → Executors), traffic routed via Envoy
  5. Executors read data from object storage, query metastore for schema
  6. Pool (optional) provides burst compute via Karpenter-provisioned nodes
  7. 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