Installing an Edge on Kubernetes

Each release provides a container image and Helm chart:

ghcr.io/plakarkorp/plakar-edge
oci://ghcr.io/plakarkorp/charts/plakar-edge

The Helm chart runs each edge as an independent StatefulSet replica. Each replica receives its own identity when it enrolls with the Control Plane.

The edge stores its identity and package cache on persistent storage. This is important because restarting a pod should not cause it to enroll as a new edge.

Each replica also has a stable hostname, which is used as its edge name by default.

Store the enrollment key

Store the enrollment key in a Kubernetes Secret rather than putting it directly in the Helm values:

$ kubectl create secret generic plakar-edge-enroll-key \
  --from-literal=enroll-key=<enrollment-key>

The chart references the Secret by name, keeping the enrollment key out of values.yaml, rendered manifests, and Helm history.

Install the chart

For example, to run three edges:

$ helm install my-edges oci://ghcr.io/plakarkorp/charts/plakar-edge \
  --set controlPlane=https://plakman.example.com \
  --set organization=<organization-id> \
  --set enrollKey.secretName=plakar-edge-enroll-key \
  --set replicaCount=3

Each replica enrolls independently and appears as a separate edge in the Control Plane.

Without --version, Helm installs the latest published chart. To pin a release, specify the chart version:

--version <version>

The chart automatically uses the image version associated with the selected chart release.

Configure the chart

The main values for an edge deployment are:

Value Default Description
controlPlane "" Base URL of the Plakar Control Plane. Required.
organization "" Identifier of the organization the edges should join. Required.
enrollKey.secretName "" Existing Secret containing the enrollment key. Required.
enrollKey.secretKey enroll-key Key containing the enrollment key inside the Secret.
replicaCount 1 Number of independent edges to run.
pollHold "" Long-poll duration. An empty value uses the binary default.
persistence.size 5Gi Storage allocated to each edge.
persistence.storageClassName "" StorageClass used for the edge volume. An empty value uses the cluster default.
persistence.mountPath /data Mount point for the edge’s persistent data.
image.repository ghcr.io/plakarkorp/plakar-edge Edge container image repository.
image.tag "" Edge image tag. An empty value uses the chart’s application version.
scripts.configMapName "" Existing ConfigMap whose entries are the hook scripts. Empty refuses every hook.
scripts.mountPath /scripts Mount point of the hook scripts, passed to the edge as -scripts-dir.

The chart also supports standard Kubernetes scheduling and resource settings such as resources, serviceAccount, nodeSelector, tolerations, and affinity.

To run edges that include the tools required by integrations such as MySQL or PostgreSQL, set image.repository and image.tag to a custom image.

To see all available values:

$ helm show values oci://ghcr.io/plakarkorp/charts/plakar-edge