Skip to main content

pumpwood-deploy-complex-datalake

Satellite deploy package for the Pumpwood Complex Datalake microservice on Kubernetes. It generates manifests for the API application, complex-database dataloader worker, and complex-datalake secrets — then hands them to pumpwood-deploy for apply.

Developed by Murabei Data Science. BSD-3-Clause.


Pumpwood is a native Brazilian tree with a symbiotic relation to ants (Murabei)


What it deploys

Manifest Kubernetes resources
pumpwood_complex__datalake__secrets Secret pumpwood-complex-datalake
pumpwood_complex__datalake__deploy Deployment + Service pumpwood-complex-datalake-app
pumpwood_complex__datalake_dataloader_worker Deployment pumpwood-complex-datalake-worker-complex-database

Complex Datalake extends Pumpwood storage with hierarchical and annotated datasets. The app serves HTTP APIs; the complex-database worker consumes RabbitMQ messages and uploads data in parallel chunks.

flowchart LR
    subgraph pkg [pumpwood-deploy-complex-datalake]
        A[PumpWoodComplexDatalakeMicroservice]
    end
    subgraph core [pumpwood-deploy]
        B[DeployPumpWood]
    end
    subgraph cluster [Cluster]
        S[pumpwood-complex-datalake Secret]
        APP[pumpwood-complex-datalake-app]
        W[complex-database worker]
        RMQ[rabbitmq-main]
    end
    A --> B
    B --> S
    B --> APP
    B --> W
    RMQ --> APP
    RMQ --> W

Prerequisites

This package does not stand alone. Before complex-datalake pods can start, the cluster must already provide:

Resource Provided by
storage ConfigMap StandardMicroservices in pumpwood-deploy
general-secrets StandardMicroservices
rabbitmq-main-secrets StandardMicroservices
Storage keys (GCP / Azure / AWS) DeployPumpWood storage config
Postgres for complex datalake PostgresDatabase + PGBouncerDatabase
Auth (typical) pumpwood-deploy-auth

Storage bucket name and type are read from the cluster storage ConfigMap — they are not passed to PumpWoodComplexDatalakeMicroservice.

For local or CI dev databases, deploy Postgres/PgBouncer from pumpwood-deploy instead of an embedded test database (removed from this satellite package).


Installation

pip install pumpwood-deploy-complex-datalake

Requires pumpwood-deploy.


Quick start

import os
import simplejson as json
from dotenv import load_dotenv
from pumpwood_deploy.deploy import DeployPumpWood
from pumpwood_deploy.microservices.postgres.deploy import (
    PostgresDatabase, PGBouncerDatabase)
from pumpwood_deploy_complex_datalake import (
    PumpWoodComplexDatalakeMicroservice)

with open("secrets/production.json", "r") as file:
    secrets = json.loads(file.read())
load_dotenv()

deploy = DeployPumpWood(
    model_user_password=secrets["microservices--model"],
    rabbitmq_secret=secrets["rabbitmq_secret"],
    hash_salt=secrets["hash_salt"],
    storage_type="aws_s3",
    storage_deploy_args={
        "storage_bucket_name": "my-pumpwood-bucket",
        "access_key_id": secrets["aws_access_key_id"],
        "secret_access_key": secrets["aws_secret_access_key"],
    },
    k8_provider="aws",
    k8_deploy_args={
        "region": "us-east-1",
        "cluster_name": "my-cluster",
    },
    k8_namespace="pumpwood",
)

deploy.add_microservice(
    PostgresDatabase(
        db_username="pumpwood",
        db_password=secrets["postgres_password"],
        name="postgres-main",
        disk_name="postgres-disk",
        disk_size="150Gi",
    ))

deploy.add_microservice(
    PGBouncerDatabase(
        name="pgbouncer-pumpwood-complex-datalake",
        postgres_database="pumpwood_complex_datalake",
        postgres_secret="postgres-main",
        postgres_host="postgres-main",
    ))

deploy.add_microservice(
    PumpWoodComplexDatalakeMicroservice(
        app_version=os.getenv("PUMPWOOD_COMPLEX_DATALAKE_APP"),
        worker_datalake_dataloader_version=os.getenv(
            "PUMPWOOD_COMPLEX_DATALAKE_WORKER"),
        repository="my-registry.example.com",
        db_host="pgbouncer-pumpwood-complex-datalake",
        db_database="pumpwood_complex_datalake",
        db_password=secrets["postgres_password"],
        microservice_password=secrets["microservice--complex-datalake"],
        app_replicas=1,
        app_debug="FALSE",
        datalake_dataloader_replicas=1,
        datalake_dataloader_n_parallel=4,
    ))

deploy.create_deploy_files()
deploy.deploy_microservices()

Environment variables

PUMPWOOD_COMPLEX_DATALAKE_APP=2.1.0
PUMPWOOD_COMPLEX_DATALAKE_WORKER=1.4.0

If the rendered manifest matches what is already on the cluster, kubectl apply produces no changes — safe for rolling image updates.


Configuration reference

Required

Parameter Description
app_version Image tag for pumpwood-complex-datalake-app
worker_datalake_dataloader_version Image tag for pumpwood-complex-datalake-worker-complex-database

Database

Parameter Default Description
db_host pgbouncer-pumpwood-complex-datalake Postgres host (use PgBouncer in prod)
db_port 5432 Postgres port
db_database pumpwood Database name
db_username pumpwood Database user
db_password pumpwood Database password
microservice_password microservice--complex-datalake Service user password
repository GCR default Docker registry for app and worker

Application

Parameter Default Description
app_replicas 1 Number of app pods
app_debug FALSE Debug flag
app_workers 10 Granian workers (GRANIAN_WORKERS)
app_timeout 300 Request timeout (seconds)
app_limits_memory 60Gi Memory limit
app_limits_cpu 12000m CPU limit
app_requests_memory 20Mi Memory request
app_requests_cpu 1m CPU request

Complex-database dataloader worker

Parameter Default Description
datalake_dataloader_replicas 1 Worker pod count
datalake_dataloader_debug FALSE Worker debug flag
datalake_dataloader_n_parallel 4 Parallel upload requests
datalake_dataloader_chunk_size 1000 Rows per parallel batch
datalake_dataloader_query_limit 1000000 Max rows per upload cycle
datalake_dataloader_limits_memory 60Gi Worker memory limit
datalake_dataloader_limits_cpu 12000m Worker CPU limit
datalake_dataloader_requests_memory 20Mi Worker memory request
datalake_dataloader_requests_cpu 1m Worker CPU request

Health check

The app Deployment exposes a readiness probe at:

GET /health-check/pumpwood-complex-datalake-app/  (port 5000)

Use this path for ingress and load balancer health checks.


Migration note

Older deploy scripts imported from the monolithic package:

# Before
from pumpwood_deploy.microservices.pumpwood_complex_datalake.deploy import (
    PumpWoodComplexDatalakeMicroservice)

# After
from pumpwood_deploy_complex_datalake import (
    PumpWoodComplexDatalakeMicroservice)

Removed from the satellite API (use cluster-level config instead):

  • bucket_name — now from storage ConfigMap
  • test_db_* — use PostgresDatabase / PGBouncerDatabase from core
  • worker_simple_dataloader_version — simple-annotation worker not included in this satellite package
  • worker_complex_dataloader_version — complex-annotation worker not included in this satellite package

The monolithic package deployed five manifests (three workers). This satellite deploys three (app + complex-database worker + secrets). Add annotation workers in a follow-up package if still required.


Related packages

Package Role
pumpwood-deploy Orchestrator, Kong, RabbitMQ, Postgres
pumpwood-deploy-datalake Standard datalake microservice
pumpwood-deploy-auth Authorization microservice

Full platform documentation: Murabei Open Source — pumpwood-deploy.


Development

pip install -e ../pumpwood-deploy
pip install -e .

PYTHONPATH="src:../pumpwood-deploy/src" \
  python3 -m unittest discover \
  -s src/pumpwood_deploy_complex_datalake/tests -p "test_*.py" -v

ruff check src/

License

BSD-3-Clause — see LICENSE.

Metadata

Release files for pumpwood-deploy-complex-datalake 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pumpwood-deploy-complex-datalake 0.0.2
File Size Uploaded
pumpwood_deploy_complex_datalake-0.0.2.tar.gz 11.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pumpwood-deploy-complex-datalake 0.0.2
File Interpreter ABI Platform
pumpwood_deploy_complex_datalake-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 24.1 kB

Release files / pumpwood_deploy_complex_datalake-0.0.2.tar.gz

Download URL pumpwood_deploy_complex_datalake-0.0.2.tar.gz
Size 11.7 kB
Tags Source
SHA-256 checksum
How to use checksums
6a088935273b52b9e5c1c2d37d8675ff013e9ea05a2be5f55e5f92ba4d87a4a2
BLAKE2b-256 checksum
How to use checksums
4228eccfd380bd51095dfc98dc436352b0196fe721bb2e99d1f5f29702aeb27d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1022-azure

Release files / pumpwood_deploy_complex_datalake-0.0.2-py3-none-any.whl

Download URL pumpwood_deploy_complex_datalake-0.0.2-py3-none-any.whl
Size 12.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6ea0010cca11ca344cd68c6cbd62f23a7184a3afcc1fad468e56ecda903532e7
BLAKE2b-256 checksum
How to use checksums
5d4bae3643204286986e9f2149de3052aaa16a3af29661ba8057cd41dbd28bd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1022-azure

Release history Release notifications | RSS feed

0.0.3

2 release files

This release

0.0.2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page