Kubernetes
ArcadeDB officially supports deployment on Kubernetes via the arcadedb-helm chart, published at https://helm.arcadedb.com/.
The chart deploys ArcadeDB as a StatefulSet and, when replicaCount is greater than 1, automatically configures a Raft-based High Availability cluster.
The reference for the configuration values below targets chart version 26.4.2; confirm against your installation with helm show values arcadedb/arcadedb.
Prerequisites
-
Kubernetes 1.19 or later
-
Helm 3.0 or later
-
kubectlconfigured for your target cluster -
(Optional)
kindand Docker for the local quickstart below
Quickstart with kind
This walkthrough mirrors ArcadeData/arcadedb-deployments/kubernetes and produces a 3-node ArcadeDB cluster on a local kind cluster in roughly five minutes.
-
Create a local Kubernetes cluster:
kind create cluster --name arcadedb -
Create the secret holding the
rootuser password (replace<password>):kubectl create secret generic arcadedb-credentials \ --from-literal=rootPassword='<password>' -
Add the ArcadeDB Helm repository and update:
helm repo add arcadedb https://helm.arcadedb.com/ helm repo update -
Save the following overrides to
values.yaml:replicaCount: 3 image: tag: "26.4.2" service: http: type: ClusterIP arcadedb: credentials: rootPassword: secret: name: arcadedb-credentials key: rootPassword -
Install the chart:
helm install my-arcadedb arcadedb/arcadedb -f values.yaml --wait -
Forward the HTTP port to your laptop:
kubectl port-forward svc/my-arcadedb-http 2480:2480 -
Open http://localhost:2480 in a browser to reach Studio, or use
curl:curl -u root:<password> http://localhost:2480/api/v1/server
For a scripted version (with start.sh, stop.sh, and test.sh), see the reference deployment.
Installing the chart
For production deployments, follow the same broad shape as the quickstart but tailor values.yaml to your environment.
-
Add the Helm repository:
helm repo add arcadedb https://helm.arcadedb.com/ helm repo update -
Create a
Secretcontaining therootpassword. The chart references this secret by name — it does not store the password in the chart values:kubectl create secret generic arcadedb-credentials \ --from-literal=rootPassword='<password>' -
Prepare a
values.yamloverride file that fits your environment. At a minimum, setreplicaCount,image.tag, and thearcadedb.credentials.rootPassword.secretblock. See the configuration reference for the full set of options including persistence, ingress, resources, autoscaling, and security context. -
Install the chart:
helm install my-arcadedb arcadedb/arcadedb \ --namespace arcadedb --create-namespace \ --values values.yaml \ --wait -
Verify the deployment:
kubectl -n arcadedb get statefulset kubectl -n arcadedb get pods kubectl -n arcadedb get svc
The pods are named my-arcadedb-0, my-arcadedb-1, … and reach the Ready state once the readiness probe succeeds.
Configuration reference
The values exposed by the chart are grouped below. This reference targets chart version 26.4.2; confirm the current set against your installation with:
helm show values arcadedb/arcadedb
The complete and authoritative source is the chart’s values.yaml.
The example snippets below show keys at the top level (the chart is installed directly as arcadedb/arcadedb); if you consume the chart as a subchart under a parent named arcadedb, wrap each snippet under a top-level arcadedb: key.
Image
Selects the container image, pull policy, and pull secrets.
Override image.tag to pin to a specific ArcadeDB release; otherwise the chart’s appVersion is used.
| Key | Default | Description |
|---|---|---|
|
|
Container registry hosting the image |
|
|
Image repository name |
|
(chart |
Image tag; pin to a specific ArcadeDB version for reproducible deployments |
|
|
Kubernetes image pull policy |
|
|
List of |
|
|
Overrides the chart name used in resource names |
|
|
Overrides the fully-qualified app name used in resource names |
Example override:
image:
tag: "26.4.2"
pullPolicy: IfNotPresent
imagePullSecrets:
- name: my-registry-secret
Replicas
replicaCount controls how many ArcadeDB pods the StatefulSet runs.
A single replica (1) gives a standalone instance; three replicas is the smallest cluster that tolerates one node failure under Raft majority quorum.
See High Availability on Kubernetes for the implications of running a multi-replica cluster.
| Key | Default | Description |
|---|---|---|
|
|
Number of ArcadeDB pods. Values greater than 1 enable Raft HA automatically; the minimum recommended HA size is 3. |
Example override:
replicaCount: 3
Credentials
The chart never stores the root password in its own values; it reads it from a Kubernetes Secret at install time.
If arcadedb.credentials.rootPassword.secret.name is null, a 32-character random password is auto-generated in a Secret named arcadedb-credentials-secret — note that GitOps tools such as ArgoCD regenerate this secret on every render, so supply your own secret for production.
Pods that start without a resolvable secret crash-loop immediately; see Troubleshooting for the symptom and fix.
| Key | Default | Description |
|---|---|---|
|
|
Name of an existing |
|
|
Key within the named |
Create the secret first (see the Quickstart for the full command), then reference it in your values.yaml:
arcadedb:
credentials:
rootPassword:
secret:
name: arcadedb-credentials
key: rootPassword
Database
These keys control where ArcadeDB stores databases inside the container, which databases to create at startup, additional JVM arguments, and arbitrary environment variables passed to the container process.
| Key | Default | Description |
|---|---|---|
|
|
Path inside the container where database files are stored. Must match the |
|
|
Databases to create automatically at first startup. Use the form |
|
|
List of additional JVM |
|
|
List of extra environment variables (in |
Example override:
arcadedb:
extraCommands:
- -Darcadedb.server.mode=production
- -Darcadedb.tx.walFiles=2
extraEnvironment:
- name: JAVA_TOOL_OPTIONS
value: "-XX:+UseG1GC"
Plugins
ArcadeDB supports multiple wire protocols alongside its native HTTP API; each protocol is enabled by adding the corresponding key under arcadedb.plugins.
The chart ships with named slots for gremlin, postgres, mongo, redis, and prometheus, plus support for any user-supplied key (e.g. myPlugin) for custom plugins.
By default, arcadedb.plugins is an empty map ({}), meaning no wire-protocol plugins are activated.
| Key | Default | Description |
|---|---|---|
|
(absent) |
Enable the Apache TinkerPop Gremlin server plugin. |
|
(absent — see example) |
Port the Gremlin plugin listens on; conventionally |
|
(absent) |
Enable the PostgreSQL wire-protocol plugin. |
|
(absent — see example) |
Port the PostgreSQL plugin listens on; conventionally |
|
(absent) |
Enable the MongoDB wire-protocol plugin. |
|
(absent — see example) |
Port the MongoDB plugin listens on; conventionally |
|
(absent) |
Enable the Redis wire-protocol plugin. |
|
(absent — see example) |
Port the Redis plugin listens on; conventionally |
|
(absent) |
Enable the Prometheus metrics endpoint. |
Example override (enabling the PostgreSQL and MongoDB wire protocols):
arcadedb:
plugins:
postgres:
enabled: true
port: 5432
mongo:
enabled: true
port: 27017
Service
The chart creates two Kubernetes Service objects for each ArcadeDB deployment.
The HTTP service (named <release>-http) exposes port 2480 where Studio and all REST/HTTP clients connect; its type is configurable below.
The RPC service is a headless ClusterIP service used only for Raft peer discovery between pods — it is internal-only and not directly controlled by these values.
| Key | Default | Description |
|---|---|---|
|
|
Kubernetes service type for the HTTP service. Use |
|
|
Port exposed by the HTTP service. Studio and all REST/HTTP clients connect to this port. |
|
|
Raft gRPC port used for HA peer communication. This port is exposed only on the headless internal service; do not expose it externally. |
Example override:
service:
http:
type: LoadBalancer
port: 2480
Ingress
Use an Ingress resource when you want a single external entry point with host-based routing and TLS termination at the edge controller, without assigning a cloud load-balancer IP per service.
For simpler setups or clouds where a managed load-balancer IP is acceptable, service.http.type: LoadBalancer is the lower-configuration alternative.
| Key | Default | Description |
|---|---|---|
|
|
Set to |
|
|
IngressClass name (e.g. |
|
|
Annotations added to the |
|
(see description) |
List of host rules. Each entry has a |
|
|
TLS configuration. Each entry specifies a |
Example override (single-host ingress with TLS via cert-manager):
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- host: arcadedb.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: arcadedb-tls
hosts:
- arcadedb.example.com
Persistence
ArcadeDB stores its database files under arcadedb.databaseDirectory (default /home/arcadedb/databases).
The chart uses a volumeClaimTemplates block in the StatefulSet, so Kubernetes provisions one PersistentVolumeClaim per pod rather than sharing a single volume across replicas.
|
PVCs created by the StatefulSet survive
|
| Key | Default | Description |
|---|---|---|
|
|
Enable PVC-backed storage. Set to |
|
|
Requested PVC capacity. Size the volume to hold your databases plus headroom for growth. |
|
|
PVC access mode. |
|
|
StorageClass name. Empty string uses the cluster-default class (e.g. |
Example override (50 Gi PVC on the gp3 storage class on AWS EKS):
persistence:
enabled: true
size: 50Gi
storageClass: gp3
Resources
Container resource requests and limits are deliberately left unset in the chart defaults (resources: {}), so you must supply them for any production deployment.
Size the memory request to match your JVM heap (-Xms) so the scheduler places the pod on a node with enough RAM, and set a memory limit slightly above the heap to catch unexpected off-heap growth.
|
Do not set a CPU limit on ArcadeDB pods. Kubernetes CPU throttling operates on a 100 ms accounting window; when a CPU limit is hit mid-GC cycle, the JVM thread is suspended until the next window, turning a millisecond collection into a multi-hundred-millisecond pause. Set a CPU request so the scheduler reserves the right amount of CPU for scheduling purposes, and rely on node-level CPU sharing — not a hard limit — to bound consumption. Memory limits are safe and recommended: the JVM respects its heap ceiling, and a hard memory limit prevents a runaway process from affecting other pods on the node. |
| Key | Default | Description |
|---|---|---|
|
(absent) |
CPU request used by the scheduler to place the pod. Recommended starting point: |
|
(absent) |
Memory request. Should equal or slightly exceed the JVM |
|
(absent) |
Memory limit. Set to the JVM |
Example override (2 Gi heap, 4 Gi limit, CPU request only — no CPU limit):
resources:
requests:
cpu: 500m
memory: 2Gi
limits:
memory: 4Gi
Probes
Kubernetes uses liveness probes to decide when to kill and restart a container, and readiness probes to decide when a pod is safe to receive traffic.
Both probes matter for ArcadeDB: on a cold start the JVM and optional persistence rehydration can take several seconds, so tuning initialDelaySeconds prevents premature restarts before the server is ready.
The chart configures both probes to poll GET /api/v1/ready on the HTTP port (2480).
Only httpGet.path and httpGet.port are set by default; all other sub-keys (initialDelaySeconds, periodSeconds, timeoutSeconds, failureThreshold, successThreshold) are absent and fall back to Kubernetes defaults (0 s delay, 10 s period, 1 s timeout, 3 failures, 1 success).
| Key | Default | Description |
|---|---|---|
|
|
HTTP path polled by the liveness probe. Returns 200 when the server is alive. |
|
|
Named port ( |
|
(absent — Kubernetes default: |
Seconds to wait after container start before the first liveness check. Increase for slow-start environments (cold JVM + persistence rehydration). |
|
(absent — Kubernetes default: |
How often (in seconds) to run the liveness probe. |
|
(absent — Kubernetes default: |
Seconds after which a probe attempt times out. |
|
(absent — Kubernetes default: |
Number of consecutive failures before the container is killed and restarted. |
|
(absent — Kubernetes default: |
Consecutive successes required to mark the container as live again after a failure. |
|
|
HTTP path polled by the readiness probe. Returns 200 when the server is ready to accept traffic. |
|
|
Named port ( |
|
(absent — Kubernetes default: |
Seconds to wait after container start before the first readiness check. Increase when the server needs time to rehydrate databases from a PVC before accepting connections. |
|
(absent — Kubernetes default: |
How often (in seconds) to run the readiness probe. |
|
(absent — Kubernetes default: |
Seconds after which a probe attempt times out. |
|
(absent — Kubernetes default: |
Number of consecutive failures before the pod is removed from Service endpoints. |
|
(absent — Kubernetes default: |
Consecutive successes required to add the pod back to Service endpoints. |
Example override (bumping the initial delay for a slow-start environment with large persisted databases):
livenessProbe:
httpGet:
path: /api/v1/ready
port: http
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
httpGet:
path: /api/v1/ready
port: http
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
Autoscaling
The chart supports Kubernetes HorizontalPodAutoscaler (HPA) to scale the number of ArcadeDB pods based on CPU utilization.
Autoscaling is disabled by default; enable it only after verifying that your storage class supports ReadWriteOnce volumes on all potential target nodes, and that your HA configuration can tolerate dynamic replica counts.
|
When autoscaling is enabled in an HA configuration, ensure The chart also pre-sizes the internal server list to |
| Key | Default | Description |
|---|---|---|
|
|
Set to |
|
|
Minimum number of replicas the HPA will scale down to. In an HA cluster this must be at least |
|
|
Maximum number of replicas the HPA will scale up to. Set conservatively — the chart pre-sizes the peer list to this value. |
|
|
Average CPU utilization target (as a percentage of the pod’s CPU request) that triggers scale-out. Lower values scale out earlier; higher values pack more load per pod. |
Example override (autoscaling with Raft-safe quorum bounds):
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 5
targetCPUUtilizationPercentage: 70
Security context
The chart sets a restrictive security posture by default.
At the pod level, podSecurityContext ensures all processes run as a non-root user and that the filesystem group matches the arcadedb user (1000) created in the Docker image, so mounted volumes are writable without chmod.
At the container level, securityContext pins the UID/GID to 1000, blocks privilege escalation, and drops all Linux capabilities — the server needs none.
| Key | Default | Description |
|---|---|---|
|
|
Require that the pod’s entry-point process runs as a non-root UID. Kubernetes rejects the pod if the image’s |
|
|
Supplemental GID applied to mounted volumes. Set to match the |
|
|
UID used by the container process. Matches the |
|
|
Primary GID used by the container process. |
|
|
Prevents the container process from gaining more privileges than its parent (blocks |
|
|
Drops every Linux capability from the container. ArcadeDB requires none of the default capabilities. |
Example override (adding readOnlyRootFilesystem for maximum hardening — ArcadeDB writes only to its data directory, which is a mounted volume):
podSecurityContext:
runAsNonRoot: true
fsGroup: 1000
securityContext:
runAsUser: 1000
runAsGroup: 1000
allowPrivilegeEscalation: false
capabilities:
drop: [ALL]
readOnlyRootFilesystem: true
|
|
Service account
The chart creates a dedicated ServiceAccount for ArcadeDB pods by default.
Disable creation and supply an existing ServiceAccount name when you manage service accounts outside Helm — for example, to attach an IRSA annotation (AWS EKS) or a Workload Identity annotation (GKE) that grants the pod cloud-provider permissions such as reading secrets from AWS Secrets Manager or Google Secret Manager.
| Key | Default | Description |
|---|---|---|
|
|
Create a |
|
|
Mount the service account token into pods. ArcadeDB does not call the Kubernetes API, so the token is unnecessary; keeping it unmounted reduces the attack surface. |
|
|
Annotations applied to the |
|
|
Name of the |
Example override (reusing an existing service account with a GKE Workload Identity annotation):
serviceAccount:
create: false
name: arcadedb-wi-sa
annotations:
iam.gke.io/gcp-service-account: [email protected]
Scheduling
nodeSelector, tolerations, and affinity control which nodes the ArcadeDB pods are placed on.
The chart ships with a default podAntiAffinity rule (weight 100) that prefers scheduling each pod on a different node — the most useful pattern for Raft-based HA clusters, since it distributes quorum peers across failure domains and keeps the cluster alive when a single node goes down.
| Key | Default | Description |
|---|---|---|
|
|
Map of node labels that pods must match. Use to restrict ArcadeDB to a specific node pool (e.g. |
|
|
List of Kubernetes |
|
(pod anti-affinity — see below) |
Full |
The chart’s built-in affinity default:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- arcadedb
topologyKey: kubernetes.io/hostname
Example override (required anti-affinity across availability zones — stricter than the default preference-based rule):
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/instance
operator: In
values:
- my-arcadedb
topologyKey: topology.kubernetes.io/zone
|
Switching from |
Pod metadata
podAnnotations and podLabels attach metadata directly to the pod objects created by the StatefulSet.
Annotations are the standard integration point for cluster tooling: Prometheus scrape configuration, secret injection sidecars (Vault Agent, External Secrets), and service mesh proxy injection all rely on pod annotations.
Labels supplement the chart-generated selectors and are useful for observability grouping, cost allocation, or policy enforcement tools that filter by label.
| Key | Default | Description |
|---|---|---|
|
|
Annotations applied to every pod. Common uses: Prometheus scrape hints, Vault Agent injection, Datadog APM tracing, Istio sidecar policy. |
|
|
Extra labels applied to every pod. Merged with the chart-generated labels ( |
Example override (Prometheus scrape annotations):
podAnnotations:
prometheus.io/scrape: "true"
prometheus.io/port: "2480"
prometheus.io/path: "/metrics"
|
The Prometheus annotations shown above work with the community |
Network policy
Setting networkPolicy.enabled: true creates a Kubernetes NetworkPolicy that restricts traffic to and from ArcadeDB pods: the HTTP port (2480) accepts connections from any pod in the cluster, while the Raft gRPC port (2434) is locked down to ArcadeDB pods only.
This requires a CNI plugin that enforces NetworkPolicy resources — Calico, Cilium, Weave Net, and most managed Kubernetes offerings (GKE, EKS with VPC CNI + policy, ASK Azure CNI) support this; vanilla kubenet does not.
| Key | Default | Description |
|---|---|---|
|
|
Create |
Example override:
networkPolicy:
enabled: true
|
Enabling |
Extras
The escape-hatch keys let you attach resources that the named chart values do not cover: extra Kubernetes manifests rendered alongside the chart, extra volumes and volume mounts injected into the container spec, and additional volumeClaimTemplates for the StatefulSet.
These are advanced options intended for cases where a named value does not exist — for example, mounting a ConfigMap as a configuration file, adding a sidecar’s shared emptyDir, or provisioning a separate PVC for WAL logs.
| Key | Default | Description |
|---|---|---|
|
|
Map of arbitrary Kubernetes manifests rendered as part of the Helm release. Use to co-deploy |
|
|
List of extra |
|
|
List of extra |
|
|
Extra |
Example override (mounting an extra ConfigMap as a config file):
volumes:
- name: custom-config
configMap:
name: arcadedb-extra-config
volumeMounts:
- name: custom-config
mountPath: /home/arcadedb/config/custom.json
subPath: custom.json
readOnly: true
The corresponding ConfigMap can be co-deployed via extraManifests:
extraManifests:
arcadedb-extra-config:
apiVersion: v1
kind: ConfigMap
metadata:
name: arcadedb-extra-config
data:
custom.json: |
{
"key": "value"
}
Operating the cluster
Scaling
Use helm upgrade to change the replica count persistently:
helm upgrade my-arcadedb arcadedb/arcadedb \
--namespace arcadedb \
--reuse-values \
--set replicaCount=5
kubectl scale statefulset also works for an immediate, one-off change:
kubectl -n arcadedb scale statefulset my-arcadedb --replicas=5
A kubectl scale change is reverted on the next helm upgrade because Helm reapplies the replicaCount from the chart values.
For persistent changes, prefer helm upgrade --set replicaCount=N (or update the values file).
Scaling does not pause the workload.
New pods auto-join the Raft cluster, and pods removed during scale-down auto-leave via the preStop hook (see High Availability on Kubernetes).
Upgrading the chart
helm repo update
helm upgrade my-arcadedb arcadedb/arcadedb \
--namespace arcadedb \
--reuse-values
Pin image.tag to a specific ArcadeDB version for reproducible upgrades.
Uninstalling
helm uninstall my-arcadedb --namespace arcadedb
Persistent volume claims survive uninstall by design. To remove them too:
kubectl -n arcadedb delete pvc -l app.kubernetes.io/name=arcadedb
The Secret holding the root password is not managed by Helm and is also retained.
Delete it explicitly if no longer needed.
High Availability on Kubernetes
ArcadeDB on Kubernetes uses the standard StatefulSet + headless Service pattern (the same pattern used by etcd, CockroachDB, and Apache Ozone).
The chart pre-computes the full peer list from replicaCount and injects it into each pod via environment variables, so users do not configure arcadedb.ha.serverList by hand.
The chart sets the equivalent of:
arcadedb.ha.enabled=true
arcadedb.ha.k8s=true
arcadedb.ha.k8sSuffix=.my-arcadedb.arcadedb.svc.cluster.local
arcadedb.ha.serverList=my-arcadedb-0.my-arcadedb.arcadedb.svc.cluster.local:2434:2480,my-arcadedb-1.my-arcadedb.arcadedb.svc.cluster.local:2434:2480,my-arcadedb-2.my-arcadedb.arcadedb.svc.cluster.local:2434:2480
(Substitute your release name and namespace.)
- Auto-join on scale-up (since
26.4.1) -
When
arcadedb.ha.k8s=trueand a new pod starts without an existing Raft storage directory, the server automatically joins the existing cluster via the RaftSetConfiguration(ADD)admin API. This enables zero-downtime scale-up:helm upgrade --set replicaCount=N(orkubectl scale statefulset) adds new pods that join the existing cluster without restarting any existing peer. - Auto-leave on scale-down
-
The chart installs a
preStophook that callsPOST /api/v1/cluster/leaveso the terminating pod cleanly transfers leadership (if it holds it) and removes itself from the Raft group before shutdown.
For the rest of the Raft semantics — quorum, named peers, snapshot threshold, election timeouts, cluster token, replication failure handling — see High Availability.
Pre-staging the database on every pod (from v26.5.1)
When you want to scale a single-pod ArcadeDB deployment up to N pods after importing a large (1+ GB) database, pre-stage identical database files on every pod’s PVC and let the cluster recognise the matching state at first formation, rather than letting the leader stream the full database to every new replica over HTTP.
The chart leaves the bootstrap feature enabled by default (arcadedb.ha.bootstrapFromLocalDatabase=true).
Operator workflow:
-
Install the chart with
replicaCount: 1(no HA) and import the dataset. -
After import is complete, tar the database directory or take a regular full ArcadeDB backup.
-
Distribute the archive into every pod’s PVC. Common patterns: an init container that pulls from S3/GCS, an
nfs:volume mount with the archive, baking the archive into the container image, orkubectl cpfor one-off operator workflows. Each pod’s PVC must contain the same database files underarcadedb.databaseDirectory. -
helm upgradethe release withreplicaCount: 3(or more). The new pods come up with non-empty databases and the same fingerprint; the cluster elects the bootstrap source automatically and forms in seconds.
For the underlying protocol and edge cases (different-age peers, late newer joiner, cluster restart with stale data on a node), see Offline Cluster Bootstrap.
Troubleshooting
The most common deployment failure is a missing or incorrectly named rootPassword Secret — pods crash-loop with an authentication-related error in the log.
Verify the secret exists and that the chart’s arcadedb.credentials.rootPassword.secret.name and .key match it.
Inspect a pod’s events:
kubectl -n arcadedb describe pod my-arcadedb-0
Read the server log:
kubectl -n arcadedb logs my-arcadedb-0
(Replace my-arcadedb-0 with the pod name you want to inspect.)
To tear down a stuck cluster and start over:
helm uninstall my-arcadedb --namespace arcadedb
kubectl -n arcadedb delete pvc -l app.kubernetes.io/name=arcadedb
Then re-run helm install with corrected values.
Reference deployment
The ArcadeData/arcadedb-deployments repository hosts a working, scripted reference deployment under kubernetes/.
It pairs a kind cluster with the official chart and provides:
-
start.sh— creates the kind cluster, runshelm dependency update+helm install --wait, and starts a port-forward tolocalhost:2480. -
stop.sh— terminates the port-forward, runshelm uninstall, and destroys the kind cluster. -
test.sh— validates that the cluster is functional. -
values.yaml— the values overrides used bystart.sh. Note that this file wraps overrides under a top-levelarcadedb:key because it consumes the chart as a subchart; when installing the chart directly (the path documented above), use the same overrides at the top level.
Use this repository as a starting point for your own setup and as a reproducible bug-report environment.