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 fromstorageConfigMaptest_db_*/ embedded Postgres — usePostgresDatabase/PGBouncerDatabasefrom coreworker_num_version/worker_text_version— replaced by a singleworker_versionfor 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).
Metadata
Release files for pumpwood-deploy-graph-datalake 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pumpwood_deploy_graph_datalake-0.0.1.tar.gz | 12.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pumpwood_deploy_graph_datalake-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.8 kB
Release files / pumpwood_deploy_graph_datalake-0.0.1.tar.gz
| Download URL | pumpwood_deploy_graph_datalake-0.0.1.tar.gz |
|---|---|
| Size | 12.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
13dcf6cf6a9fecb3d34ed3c756df2160c35b50488bec7c3d799db64156a7da08
|
|
BLAKE2b-256 checksum How to use checksums |
2a6c7d4e75a0d25a5819ea1336b801954889980fc930b3310da33e55f21469bf
|
| 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_graph_datalake-0.0.1-py3-none-any.whl
| Download URL | pumpwood_deploy_graph_datalake-0.0.1-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a52ce309903057dee84717b1ac352783c681ceb0190512401b3a2931aa761ffc
|
|
BLAKE2b-256 checksum How to use checksums |
4be9367deaa7bc0e12b4e78bc3b0a5fc3a8ce08531d18b2de5f7af63989a8f65
|
| 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
|