PuppyGraph Helm Chart Installation Guide
This guide walks you through installing PuppyGraph using Helm Charts.
Install Helm
Helm is a package manager for Kubernetes that simplifies deployment and management of applications. Install Helm by following the instructions for your operating system:
# macOS (Homebrew)
brew install helm
# Linux (via script)
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Windows (Chocolatey)
choco install kubernetes-helm
For more installation details, refer to the official guide: Installing Helm
Verify Helm installation:
Run:
If the command executes successfully and outputs version information such asversion.BuildInfo, Helm is installed correctly.
Add the PuppyGraph Helm Repository
Add the PuppyGraph Helm repository to access the latest charts:
# Add PuppyGraph Helm repository
helm repo add puppygraph https://puppygraph.github.io/puppygraph-helm-chart/
# Update local Helm chart repository cache
helm repo update
Custom Deployment Guide
Deploy PuppyGraph on any Kubernetes cluster by customizing configuration values.
Deploying a specific version?
If you want to deploy a specific version of PuppyGraph, please refer to the Customize Configuration section.
Generate Default Values
A sample of the key components of the default values file is shown below:
nameOverride: ""
image:
repository: docker.io/puppygraph/puppygraph
pullPolicy: Always
# PuppyGraph image tag to deploy; leave empty to use Chart.appVersion.
# In production, pin a specific version (e.g. "1.0.0").
# Available tags: https://hub.docker.com/r/puppygraph/puppygraph/tags
tag: "latest"
imagePullSecret: ""
rootless: false
serviceAccount:
create: false
automount: true
annotations: {}
name: "default"
# additional node selectors
nodeSelectors:
# cloud.google.com/machine-family: "c3d"
# service customizations
service:
controlplane:
# Set to LoadBalancer to expose the web UI externally (may incur cloud costs).
type: ClusterIP
# Optional LoadBalancer class, for example "service.k8s.aws/nlb" for AWS Load Balancer Controller.
# Only used when type is LoadBalancer.
loadBalancerClass: ""
annotations: {}
query:
# Set to LoadBalancer to expose the query service externally (may incur cloud costs).
type: ClusterIP
# Optional LoadBalancer class, for example "service.k8s.aws/nlb" for AWS Load Balancer Controller.
# Only used when type is LoadBalancer.
loadBalancerClass: ""
annotations: {}
leader:
annotations: {}
compute:
annotations: {}
# Please refer to "System Requirements" in PuppyGraph docs. https://docs.puppygraph.com/installation/
# resource for controlplane node (web UI and registry)
controlplane:
replicas: 1
# Controlplane readiness probe tuning.
# Increase initialDelaySeconds/timeoutSeconds/failureThreshold when startup
# phases are heavy and may briefly fail health checks.
# readinessProbe:
# # Set to false to disable rendering readinessProbe for controlplane pods.
# enabled: true
# # Wait time before the first probe after container starts.
# initialDelaySeconds: 30
# # Maximum time for one probe request before it is treated as failed.
# timeoutSeconds: 3
# # Probe interval.
# periodSeconds: 10
# # Consecutive failures required to mark the pod Unready.
# failureThreshold: 5
# inject extra Kubernetes PodSpec fields into spec.template.spec
extraPodSpec: {}
# inject extra fields into the controlplane container spec
# examples: securityContext, lifecycle, livenessProbe, startupProbe
# NOTE: these fields are rendered after chart defaults and may override resources,
# readinessProbe, lifecycle, and securityContext.
extraContainerSpec: {}
# workload-targeted pod annotations rendered into spec.template.metadata.annotations
# (not on the StatefulSet metadata). Use for things that must live on the pod
# template, e.g. Datadog Agent Kubernetes autodiscovery (ad.datadoghq.com/...).
podAnnotations: {}
# override controlplane image; inherit from global image when empty
image:
repository: ""
pullPolicy: ""
tag: ""
resources:
requests:
cpu: "2"
memory: "4Gi"
limits:
memory: "4Gi"
storage:
size: "10Gi"
# resource for leader nodes
leader:
replicas: 3
# Leader readiness probe tuning.
# Increase initialDelaySeconds/timeoutSeconds/failureThreshold when startup,
# scaling, or indexing phases are heavy and may briefly fail health checks.
# readinessProbe:
# # Set to false to disable rendering readinessProbe for leader pods.
# enabled: true
# # Wait time before the first probe after container starts.
# initialDelaySeconds: 30
# # Maximum time for one probe request before it is treated as failed.
# timeoutSeconds: 3
# # Probe interval.
# periodSeconds: 10
# # Consecutive failures required to mark the pod Unready.
# failureThreshold: 5
# inject extra Kubernetes PodSpec fields into spec.template.spec
# examples: affinity, tolerations, topologySpreadConstraints, hostAliases, priorityClassName
# NOTE: these fields are rendered after chart defaults and may override securityContext,
# serviceAccountName, imagePullSecrets, and nodeSelector.
extraPodSpec: {}
# inject extra fields into the leader container spec
# examples: securityContext, lifecycle, livenessProbe, startupProbe
# NOTE: these fields are rendered after chart defaults and may override resources,
# readinessProbe, lifecycle, and securityContext.
extraContainerSpec: {}
# workload-targeted pod annotations rendered into spec.template.metadata.annotations
# (not on the StatefulSet metadata). Use for things that must live on the pod
# template, e.g. Datadog Agent Kubernetes autodiscovery (ad.datadoghq.com/...).
podAnnotations: {}
# override leader image; inherit from global image when empty
image:
repository: ""
pullPolicy: ""
tag: ""
resources:
requests:
cpu: "8"
memory: "32Gi"
ephemeral-storage: "10Gi"
limits:
memory: "32Gi"
# resource for compute nodes
compute:
replicas: 3
# Compute readiness probe tuning.
# Increase initialDelaySeconds/timeoutSeconds/failureThreshold when startup
# phases are heavy and may briefly fail health checks.
# readinessProbe:
# # Set to false to disable rendering readinessProbe for compute pods.
# enabled: true
# # Wait time before the first probe after container starts.
# initialDelaySeconds: 30
# # Maximum time for one probe request before it is treated as failed.
# timeoutSeconds: 3
# # Probe interval.
# periodSeconds: 10
# # Consecutive failures required to mark the pod Unready.
# failureThreshold: 5
# inject extra Kubernetes PodSpec fields into spec.template.spec
# examples: affinity, tolerations, topologySpreadConstraints, hostAliases, priorityClassName
# NOTE: these fields are rendered after chart defaults and may override securityContext,
# serviceAccountName, imagePullSecrets, and nodeSelector.
extraPodSpec: {}
# inject extra fields into the compute container spec
# examples: securityContext, lifecycle, livenessProbe, startupProbe
# NOTE: these fields are rendered after chart defaults and may override resources,
# readinessProbe, lifecycle, and securityContext.
extraContainerSpec: {}
# workload-targeted pod annotations rendered into spec.template.metadata.annotations
# (not on the StatefulSet metadata). Use for things that must live on the pod
# template, e.g. Datadog Agent Kubernetes autodiscovery (ad.datadoghq.com/...).
podAnnotations: {}
# override compute image; inherit from global image when empty
image:
repository: ""
pullPolicy: ""
tag: ""
resources:
requests:
cpu: "8"
memory: "64Gi"
ephemeral-storage: "10Gi"
limits:
memory: "64Gi"
# define data storage
# if provisioner is not provided, will use preset storage class by name
# other key value pairs are parameters compatible with the provisioner
storage:
name: ""
size: "200Gi"
provisioner: ""
type: ""
env:
# applied to both leader and compute pods
common:
PRIORITY_IP_CIDR: ""
# applied to controlplane pods only
controlplane: {}
# applied to leader pods only
leader:
# This is the number of data replicas for PuppyGraph metadata and local storage (default: 3).
# Set to 1 if running a single compute node (non-HA) deployment.
# DATAACCESS_DATA_REPLICATIONNUM: "3"
CLUSTER_ID: "1000"
# these files will be mounted to /etc/config/puppygraph/
config:
# Built-in schema content. Set via --set-file config.presetSchema=/path/to/puppygraph-schema.json
# This will be mounted as /etc/config/puppygraph/schema.json
presetSchema: ""
# additional files to mount: map of filename -> file content
# can be set via --set-file config.files.key\\.json=/path/to/key.json
files: {}
# If existingSecretName is set, use that Secret and skip creating a new one.
# If `create` is true and existingSecretName is empty, create a Secret from values below.
# `PUPPYGRAPH_USERNAME` and `PUPPYGRAPH_PASSWORD` are for login puppygraph.
# `AUTHENTICATION_JWT_SECRETKEY` is for JWT token signing between controlplane and other nodes.
# More secrets may be needed by schema as environment variables and we can set them here.
secrets:
existingSecretName: ""
create: true
PUPPYGRAPH_USERNAME: "puppygraph"
PUPPYGRAPH_PASSWORD: "puppygraph123"
AUTHENTICATION_JWT_SECRETKEY: ""
# SOME_OTHER_KEY:
Customize Configuration
Edit values.yaml to match your environment. Key configurations include:
-
Image Version: To deploy a specific version of PuppyGraph, update the
image.tagfield in your values.yaml.Example for specifying PuppyGraph version
To find out the latest versions, please check released PuppyGraph versions.To install a specific chart version, pass an explicit version:
-
Network CIDR: Set
env.common.PRIORITY_IP_CIDRto match your cluster node IP range. -
Storage Size: Adjust
storage.sizebased on data requirements (default: 50Gi).Storage Auto-Detection
If you don't specify
storage.provisionerandstorage.type, the chart will automatically use the default storage class configured in your Kubernetes cluster. -
Resources: Adjust CPU and memory requests/limits based on cluster capacity.
- Replicas: Set appropriate replica counts for leader and compute pods.
- Environment Variables: Configure PuppyGraph-specific settings under
env.*.
Deploy with Custom Configuration
# Set environment variables
export RELEASE_NAME=puppygraph-test
export NAMESPACE=default
# Deploy with custom configuration
helm upgrade --install $RELEASE_NAME puppygraph/puppygraph \
--namespace $NAMESPACE \
--create-namespace \
-f values.yaml
Override Specific Values
You can also override specific values without editing the file using --set flags:
Verify Deployment
# Check pod status
kubectl get pods -n $NAMESPACE
# Check persistent volumes
kubectl get pvc -n $NAMESPACE
# Check services
kubectl get svc -n $NAMESPACE
Access PuppyGraph
The chart deploys four services:
$RELEASE_NAME-controlplane-serviceexposes the Web UI (port8081) and the controlplane gRPC endpoint (port8082). Configurable viaservice.controlplane.type(defaultClusterIP).$RELEASE_NAME-query-serviceexposes the openCypher Bolt endpoint (port7687). Configurable viaservice.query.type(defaultClusterIP).$RELEASE_NAME-leader-serviceis a headless service used for inter-leader communication; it also exposes the Gremlin port (8182) for direct Gremlin access.$RELEASE_NAME-compute-serviceis a headless service used for inter-cluster communication.
To access the Web UI locally, port-forward the controlplane service:
kubectl -n $NAMESPACE port-forward --address 0.0.0.0 svc/$RELEASE_NAME-controlplane-service 8081:8081
Then open http://localhost:8081 in your browser.
For Bolt access, port-forward the query service:
For Gremlin access, port-forward the leader service:
Access Method
LoadBalancer services are supported on cloud platforms (AWS EKS, GCP GKE, Azure AKS). Set service.controlplane.type=LoadBalancer (or service.query.type=LoadBalancer) in values.yaml to expose externally. For local development with Docker Desktop, use the port-forward method.
Uninstall and Clean Up
Data Loss Warning
These steps will permanently delete all PuppyGraph data.