Skip to main content

pumpwood-deploy-graph-datalake

Satellite deploy package for the Pumpwood Graph Datalake microservice on Kubernetes. It generates manifests for the API application, unified dataloader worker, and Graph 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)


Objective and motivation

This package turns Graph Datalake image tags into Kubernetes manifests that DeployPumpWood can apply in a Pumpwood cluster.

Why this exists

Graph Datalake lives in its own image repository (pumpwood-graph-datalake). Deploy scripts need a small, versioned Python package that knows the correct Secret, Deployment, and Service templates — without embedding YAML in every customer deploy repo.

How it is used

Project deploy scripts import PumpWoodGraphDatalakeMicroservice, pass image versions and DB credentials, register it with DeployPumpWood.add_microservice, then call deploy_microservices().

Scope

In scope: app + one unified dataloader worker + secrets. Out of scope: Postgres/PgBouncer, auth, storage ConfigMap, and the legacy split num/text edge workers.


What it deploys

Manifest Kubernetes resources
pumpwood_graph_datalake__secrets Secret pumpwood-graph-datalake
pumpwood_graph_datalake__deploy Deployment + Service pumpwood-graph-datalake-app
pumpwood_graph_datalake_dataloader__worker Deployment pumpwood-graph-datalake-worker-dataloader

Graph Datalake stores graph-oriented variables and edges. The app serves HTTP APIs; the dataloader worker consumes RabbitMQ messages and uploads data in parallel chunks.

flowchart LR
    subgraph pkg [pumpwood-deploy-graph-datalake]
        A[PumpWoodGraphDatalakeMicroservice]
    end
    subgraph core [pumpwood-deploy]
        B[DeployPumpWood]
    end
    subgraph cluster [Cluster]
        S[pumpwood-graph-datalake Secret]
        APP[pumpwood-graph-datalake-app]
        W[dataloader 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 Graph 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 Graph 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 PumpWoodGraphDatalakeMicroservice.

For local or CI dev databases, deploy Postgres/PgBouncer from pumpwood-deploy instead of an embedded test database.


Installation

pip install pumpwood-deploy-graph-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_graph_datalake import (
    PumpWoodGraphDatalakeMicroservice)

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-graph-datalake",
        postgres_database="pumpwood_graph_datalake",
        postgres_secret="postgres-main",
        postgres_host="postgres-main",
    ))

deploy.add_microservice(
    PumpWoodGraphDatalakeMicroservice(
        app_version=os.getenv("PUMPWOOD_GRAPH_DATALAKE_APP"),
        worker_version=os.getenv("PUMPWOOD_GRAPH_DATALAKE_WORKER"),
        repository="my-registry.example.com",
        db_host="pgbouncer-pumpwood-graph-datalake",
        db_database="pumpwood_graph_datalake",
        db_password=secrets["postgres_password"],
        microservice_password=secrets["microservice--graph-datalake"],
        app_replicas=1,
        app_debug="FALSE",
        worker_replicas=1,
        worker_n_parallel=4,
    ))

deploy.create_deploy_files()
deploy.deploy_microservices()

Environment variables

PUMPWOOD_GRAPH_DATALAKE_APP=1.0.0
PUMPWOOD_GRAPH_DATALAKE_WORKER=1.0.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-graph-datalake-app
worker_version Image tag for pumpwood-graph-datalake-worker-dataloader

Database

Parameter Default Description
db_host pgbouncer-pumpwood-graph-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--graph-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

Dataloader worker

Parameter Default Description
worker_replicas 1 Worker pod count
worker_debug FALSE Worker debug flag
worker_n_parallel 4 Parallel upload requests
worker_chunk_size 1000 Rows per parallel batch
worker_query_limit 1000000 Max rows per upload cycle
worker_limits_memory 60Gi Worker memory limit
worker_limits_cpu 12000m Worker CPU limit
worker_requests_memory 20Mi Worker memory request
worker_requests_cpu 1m Worker CPU request

Health check

The app Deployment exposes a readiness probe at:

GET /health-check/pumpwood-graph-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_graph_datalake.deploy import (
    PumpWoodGraphDatalakeMicroservice)

# After
from pumpwood_deploy_graph_datalake import (
    PumpWoodGraphDatalakeMicroservice)

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

  • bucket_name — now from storage ConfigMap
  • test_db_* / embedded Postgres — use PostgresDatabase / PGBouncerDatabase from core
  • worker_num_version / worker_text_version — replaced by a single worker_version for the unified dataloader image

The monolithic package deployed five manifests (optional Postgres + two edge workers). This satellite deploys three (app + unified worker + secrets).


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_graph_datalake/tests -p "test_*.py" -v

ruff check src/

Bump VERSION via ./build.sh before publishing (same flow as sibling satellite deploy packages).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pumpwood_deploy_graph_datalake-0.0.1.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pumpwood_deploy_graph_datalake-0.0.1-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file pumpwood_deploy_graph_datalake-0.0.1.tar.gz.

File metadata

  • Download URL: pumpwood_deploy_graph_datalake-0.0.1.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1022-azure

File hashes

Hashes for pumpwood_deploy_graph_datalake-0.0.1.tar.gz
Algorithm Hash digest
SHA256 13dcf6cf6a9fecb3d34ed3c756df2160c35b50488bec7c3d799db64156a7da08
MD5 bb6c3caa292fc8e01dd6ee706f927563
BLAKE2b-256 2a6c7d4e75a0d25a5819ea1336b801954889980fc930b3310da33e55f21469bf

See more details on using hashes here.

File details

Details for the file pumpwood_deploy_graph_datalake-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pumpwood_deploy_graph_datalake-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a52ce309903057dee84717b1ac352783c681ceb0190512401b3a2931aa761ffc
MD5 a80324de2bbd75e2cba3fe795a5b22e6
BLAKE2b-256 4be9367deaa7bc0e12b4e78bc3b0a5fc3a8ce08531d18b2de5f7af63989a8f65

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page