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).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13dcf6cf6a9fecb3d34ed3c756df2160c35b50488bec7c3d799db64156a7da08
|
|
| MD5 |
bb6c3caa292fc8e01dd6ee706f927563
|
|
| BLAKE2b-256 |
2a6c7d4e75a0d25a5819ea1336b801954889980fc930b3310da33e55f21469bf
|
File details
Details for the file pumpwood_deploy_graph_datalake-0.0.1-py3-none-any.whl.
File metadata
- Download URL: pumpwood_deploy_graph_datalake-0.0.1-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1022-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a52ce309903057dee84717b1ac352783c681ceb0190512401b3a2931aa761ffc
|
|
| MD5 |
a80324de2bbd75e2cba3fe795a5b22e6
|
|
| BLAKE2b-256 |
4be9367deaa7bc0e12b4e78bc3b0a5fc3a8ce08531d18b2de5f7af63989a8f65
|