Browse OpenForge documentation
Beluga · OSS Project

Beluga

A local Kubernetes data platform connecting Kafka, CDC, Flink, Iceberg, Trino, Superset, and Airflow, with its unified control plane (manager/) in the same repository

Kubernetesk3sData PlatformKafkaDebeziumFlinkIcebergTrinoAirflowGitOpsControl Plane
RepositoryGitHub ↗
Documentation9 sections
Updated2026-10-15T00:00:00.000Z
ECOSYSTEM ROLE
Data Platform Reference

A reference data platform that connects and verifies the Kafka/CDC, Flink, Iceberg, Trino, Superset and Airflow lifecycle end to end on local Kubernetes. The manager/ directory in the same repository holds the Pipeline, Data Asset, Service and Operations control plane.

CDC & streamingLakehouse lifecycleE2E validationmanager/ control plane
PROJECT CONFORMANCE

Repository evidence checklist

3 present · 6 missing

Present means an explicit repository or site artifact was observed. Missing means this audit did not observe that artifact; it does not prove the underlying practice does not exist. Tracked links point to the closest existing backlog owner and do not create issues automatically.

CONTRIBUTING
Missing
CODE_OF_CONDUCT
Missing
SECURITY.md
Missing
SBOM evidence
Missing
Provenance / attestation
Missing
GitHub Release
Present
Evidence observed
Project detail docs
Present
9 sections
Evidence observed
Community contributor signal
Present
2 contributors
Evidence observed
repository audit not indexed
Problem

Each modern data-platform component is easy to deploy in isolation, but reproducing CDC, streaming, lakehouse, query, BI, and orchestration boundaries consistently is difficult on a local machine

Approach

A reproducible k3s-based reference platform using Vagrant, Helm, and Argo CD GitOps, validated through real end-to-end clickstream and PostgreSQL CDC flows

ENGINEERING EVIDENCE

Show reviewable engineering evidence instead of relying on headline numbers.

Data flow
CDC → BI

Connects Kafka/Debezium, Flink, Iceberg, Trino, Superset, and Airflow across one reproducible environment.

Validation
2 E2E paths

Uses synthetic clickstream and PostgreSQL CDC scenarios to verify actual data movement across system boundaries.

Deployment
GitOps

Uses Helm and Argo CD App-of-Apps as the deployment contract rather than one-off local installation steps.

Scale
32GB+ host

Documents realistic local resource requirements instead of presenting the full stack as a lightweight demo.

Control plane
manager/ · read-first

Pipeline, Data Asset, Service, and Operations domains behind adapters; most data is still stub-backed, with opt-in read-only Flink, Trino, and Lakekeeper adapters.

START HERE

You do not need to read the README from top to bottom.

ENGINEERING PRINCIPLES
Source-driven

Keep project explanations grounded in repository source, architecture, tests, releases, and operating records.

Independently useful

Even inside one ecosystem, keep boundaries independently installable, verifiable, and releasable whenever possible.

Evidence over claims

Prefer reproducible verification, incident knowledge, upgrade gates, and operating evidence over feature-count claims.

Project Overview

Beluga is a self-hosted, learning-scale modern data platform for reproducing the end-to-end data lifecycle on local Kubernetes.

It intentionally focuses on integration evidence, not production-scale infrastructure. The platform demonstrates how CDC, streaming, stream processing, lakehouse storage, SQL analytics, BI, and orchestration can work together under one GitOps-managed environment.

Platform Components

AreaComponentsRole
Clusterk3s, Cilium, MetalLBLocal Kubernetes base
GatewayAPISIX, etcdHTTP entrypoint
GitOpsArgo CDApp-of-Apps deployment
IdentityKeycloak, OpenLDAPAuthentication and groups
PolicyOPA, OpenFGAPolicy and authorization
StreamingStrimzi Kafka, DebeziumEvents and CDC
ProcessingFlink Kubernetes OperatorStateful stream processing
CatalogLakekeeperIceberg REST catalog
StorageSeaweedFSS3-compatible object storage
DatabaseCloudNativePGPostgreSQL source and metadata
QueryTrinoDistributed SQL over Iceberg
BISupersetAnalytics and dashboards
OrchestrationAirflow 3DAG-based workflows
Optional governanceOpenMetadata, OpenSearchCatalog and lineage
ObservabilityPrometheus StackPlatform metrics

The single source of truth for exact versions/images/licenses is the repository's VERSIONS.md. Notable pins: Kubernetes v1.36 (k3s channel), Strimzi Kafka Operator 1.1.0 (KRaft, Kafka 4.3.0), Debezium 3.6.1.Final, Flink Kubernetes Operator 1.15.0 (runtime Flink 1.20.0), Lakekeeper v0.13.1, Trino 483, Airflow 3.3.0, Superset 6.1.0, Keycloak 26.7.1, CloudNativePG (PostgreSQL 17.6).

Integration Model

The platform is split into beluga-platform and beluga-data Helm layers, both deployed through Argo CD. This keeps platform services and data workloads independently understandable while maintaining a single bootstrap path.

Two real data demonstrations provide validation:

  • Synthetic clickstream — generated events through streaming and lakehouse processing
  • PostgreSQL CDC — source DB changes captured by Debezium and processed into the lakehouse

Architecture

Local Resource Profile

Beluga is not a tiny demo. It provisions four VMs and a full data stack.

  • 32GB host RAM minimum
  • 48GB+ enables larger profiles and OpenMetadata/Trino workers
  • 64GB+ adds further worker memory
  • VMware Fusion on ARM64 or VirtualBox on AMD64
  • profile selection is based on detected host resources

This makes Beluga a reference environment for studying the integration cost of a complete data platform, rather than a lightweight sample app.

Verification

The repository deliberately separates rendering from real runtime verification:

The scripts inspect real cluster/API state instead of treating successful Helm rendering as proof of a working platform.

Security and Credentials

Passwords are not committed to the repository. Bootstrap generates credentials and stores them in Kubernetes Secrets, while Helm values use placeholders/references rather than static credentials.

The repository also keeps policy declarations under policies/ so identity, authorization, and database policy generation can remain aligned.

Operations Agent (read-only PoC)

As the first safe-execution slice for issue #108, scripts/agent/operations_agent.py inspects the cluster, collects failure signals, and produces remediation proposals only, without mutating the cluster.

  • The execution path follows OpenForge Agent Execution Security principles: request → resolve fixed tool/target → canonical invocation digest → risk classification → request-side authorization → fixed argv executor (read-only only) → result hashing/findings → evidence record.
  • configs/operations-agent-policy.json declares a risk class per tool — cluster.nodes/cluster.pods/cluster.events/gitops.applications are read-only-diagnostic and executable, while data.mutate/external.http/platform.privileged are approvalRequired: true and executable: false in the PoC. An approval flag does not make a disabled class executable.
  • Safety invariants: no free-form shell/model-generated kubectl arguments reach execution — only code-owned argv defined in the script does; an isolated kubeconfig is required instead of the shared ~/.kube/config; the Kubernetes context must always be beluga; evidence stores hashes/byte counts/status rather than raw output.
  • The design has seven roles (cluster-inspector, data-service-inspector, identity-inspector, storage-inspector, observability-inspector, hypothesis-agent, verifier), but the current implementation covers only the shared read-only inspection boundary — per-role graph orchestration remains future work.
  • make test-agent verifies the policy/security suite without a live cluster, backed by a permanent CI workflow (operations-agent-security.yml).

Current Status

Beluga is a personal / learning-scale reference platform.

  • Core Kafka/CDC → Flink → Iceberg → Trino/Superset/Airflow flow is implemented toward clean-install E2E validation and marked done (docs/IMPLEMENTATION-STATUS.md, verified 2026-09-14).
  • The local cluster is not continuously running (vagrant status shows all 4 VMs stopped), so not every latest change has live-cluster validation.
  • The policy compiler now lives in manager/ and runs from the same tree; governance continues to evolve.
  • The Operations Agent only runs its read-only diagnostic profile; data-mutation, external-egress, and privileged-operation execution remain contractually disabled.
  • Cluster-stability fixes have continued since 2026-08-28: scoping MetalLB's L2Advertisement to the private network interface, unblocking the ArgoCD/OpenMetadata UIs behind APISIX, setting explicit key usages on internal-CA certificates, renaming the VMware provider to vagrant-vmware-desktop (vmware_desktop), and tuning the VM RAM profile for 64GB hosts.

Beluga Manager (manager/)

Beluga Manager is the unified control plane of the Beluga data platform. It used to be the separate repository dasomel/beluga-manager; on 2026-10-15, under ADR-0005, it was consolidated with full history into the manager/ directory of this repository, and the old repository was archived.

Kafka, Flink, Iceberg, Trino, and Airflow remain authoritative for their own resources. Manager does not clone their UIs; it connects their APIs through adapters to answer platform-level questions (which topic leads to which job and table, which service is degraded).

DomainRole
PipelineCross-service correlation of the Kafka → Flink → Iceberg → Trino flow
Data AssetCatalog, schema, table, and query context
ServiceEach OSS as a platform capability (identity, version, health, dependencies)
OperationsHealth, events, resources, and dependencies in one context

Repository layout — manager/ is an npm workspace (packages/domain-api, packages/policy-compiler, packages/web) with its own package.json and lockfile; .github/workflows/manager-ci.yml runs CI only for manager/** changes. It releases independently of the platform.

Policy compiler seam — manager/packages/policy-compiler compiles the YAML in policies/ into Keycloak configuration, Trino OPA Rego (trino.rego), and PostgreSQL DDL (db-roles.sql). Before consolidation, two workflows used external checkouts pinned to different SHAs; now test 14 and ci.yml/release.yml run the compiler from manager/ in the same tree, so a compiler change and its regenerated artifacts land in one PR.

Current maturity (checked 2026-10-15) — The Domain API, the web console (Overview, Services, Pipelines, Data Catalog, Query Workspace, Policy, and more), and the policy compiler are implemented and tested. However, the Domain API answers from in-repo fixtures (stubs) by default; the only opt-in read-only adapters are Flink, Trino query history, and Lakekeeper, and only the Flink adapter has a recorded live-cluster check. There are no Kafka, Debezium, or Airflow adapters, no authentication/authorization middleware, and no cluster deployment chart. Upstream hosts are hardcoded to *.local.beluga.internal. It is at a read-first stage, not a finished operations console.

The 22 open beluga-manager issues were transferred to #239-#260 in this repository (label area:manager). See the overview, architecture, development, and operations docs. The background is covered in the blog post Why we consolidated beluga-manager into the beluga monorepo.

Getting Started

git clone https://github.com/dasomel/beluga.git
cd beluga
make up
make status
make test

Documentation Index

TopicDocumentPurpose
OverviewPlatform OverviewScope and product model
ArchitecturePipeline ArchitectureComponent boundaries and data flow
Getting StartedCluster SetupVM → k3s → GitOps bootstrap
OperationsData OperationsLifecycle and operational runbooks
TroubleshootingTroubleshootingCluster, Kafka, Flink, and query issues
ManagerManager OverviewScope and implementation state of the manager/ control plane
Manager ArchitectureControl Plane ArchitectureAdapters, correlation, policy seam
Manager DevelopmentLocal Developmentcd manager && npm install
Manager OperationsDeployment & OperationsCurrent deployment boundary

Project Relationship