Helm values
Values for the oci://ghcr.io/loopholelabs/architect-chart chart. The
console install flow sets the required ones for
you. Run helm show values oci://ghcr.io/loopholelabs/architect-chart to print
the live defaults.
Required
| Value | Type | Default | Description |
|---|---|---|---|
clusterName | string | "" | Identifier for this cluster in the console. Must be set. |
Authentication
Provide the token inline with machineToken, or reference a Secret that holds it
with secretRef. Prefer secretRef for any non-interactive or GitOps install:
--set machineToken writes the token into your shell history and into the stored
Helm release values (helm get values), whereas a referenced Secret keeps it out
of both (and works with External Secrets, Sealed Secrets, and similar).
| Value | Type | Default | Description |
|---|---|---|---|
machineToken | string | "" | Install token, set inline. Mutually exclusive with secretRef. |
secretRef | string | "" | Name of an existing Secret holding the token. The key inside it must be named machineToken. |
secretRefDefault | string | architectd-secrets | Name of the Secret the chart creates when secretRef is unset. |
Cluster
| Value | Type | Default | Description |
|---|---|---|---|
kubernetesDistro | string | kind | The cluster's distribution (the console sets this). |
apiUrl | string | https://api.architect.io | Endpoint Architect authenticates against and sends heartbeats to. |
imagePullPolicy | string | IfNotPresent | Pull policy for all Architect images. |
Persistent checkpoint storage (S3)
Optional. Enables the daemon to store checkpoints for the
start-from-persistent-checkpoint
annotation in an S3-compatible bucket. Set s3Bucket and s3Region to turn it
on; everything else depends on where the bucket lives and how you authenticate.
When secretRef is unset, these values are written into the chart-created
Secret.
| Value | Type | Default | Description |
|---|---|---|---|
s3Bucket | string | "" | Bucket name. Required to enable S3. |
s3Region | string | "" | Bucket region. Required to enable S3. |
s3Endpoint | string | "" | Endpoint URL for an S3-compatible store (MinIO, Garage). Leave empty for real AWS S3. |
s3AccessKeyID | string | "" | Static access key ID. Leave empty to use workload identity (see below). |
s3SecretAccessKey | string | "" | Static secret access key. Leave empty to use workload identity (see below). |
Credentials
The daemon picks its credential source from what you set:
- Static keys — set
s3AccessKeyIDands3SecretAccessKey. Required for S3-compatible stores (MinIO, Garage) and works against AWS S3. - Workload identity — leave both keys empty and the daemon resolves credentials via the AWS SDK default chain (IRSA, EKS Pod Identity, instance profile, environment). Use this on EKS when a policy forbids long-lived keys. The daemon logs the resolved credential mode at startup.
Because leaving the keys empty now means "use ambient credentials" rather than "S3 off", a bucket set with keys half-configured is treated as enabled and would fail at the first upload rather than at startup. Set both keys or neither.
For IRSA, attach the role ARN to the daemon ServiceAccount via
architectdServiceAccountAnnotations:
architectdServiceAccountAnnotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/architect-s3For EKS Pod Identity, no chart change is needed: create the Pod Identity
association on the AWS side against the architectd-installer-daemon
ServiceAccount in the release namespace.
The IAM role (IRSA or Pod Identity) needs these actions on the bucket and its objects, since the transfer manager does concurrent multipart transfers:
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}Service account
| Value | Type | Default | Description |
|---|---|---|---|
architectdServiceAccountAnnotations | map | {} | Annotations added to the daemon (architectd-installer-daemon) ServiceAccount, e.g. the IRSA eks.amazonaws.com/role-arn. |
Placement and sizing
Each component (architectd, architectAdmissionController, architectControlPlane)
takes a node selector, tolerations, and resource requests/limits.
| Value pattern | Type | Default | Description |
|---|---|---|---|
<component>NodeSelector | map | {} | Node selector for the component's pods. |
<component>Tolerations | list | [] | Tolerations for the component's pods. |
<component>Resources | map | {} | Resource requests and limits for the component. |
architectdHostAliases | list | [] | Extra host aliases for architectd pods. |
Images
Each component image can be overridden; leave blank to use the pinned default.
| Value | Type | Default |
|---|---|---|
architectdImage | string | ghcr.io/loopholelabs/architectd:latest |
architectdInstallerImage | string | ghcr.io/loopholelabs/architectd-installer:latest |
architectShimRuncImage | string | ghcr.io/loopholelabs/architect-shim-runc:latest |
architectAdmissionControllerImage | string | ghcr.io/loopholelabs/architect-admission-controller:latest |
architectAdmissionControllerInstallerImage | string | ghcr.io/loopholelabs/architect-admission-controller-installer:latest |
architectControlPlaneImage | string | ghcr.io/loopholelabs/architect-control-plane:latest |
architectHealthCheckProxyImage | string | ghcr.io/loopholelabs/architect-health-check-proxy:latest |
Self-test
The self-test component deploys short-lived workloads into a dedicated
testing namespace and runs core-functionality checks on demand from the
Console. It is enabled by default; set
architectSelfTestEnabled: false to opt out. See
Testing your application for how to
use it.
| Value | Type | Default | Description |
|---|---|---|---|
architectSelfTestEnabled | bool | true | Deploy the self-test component and advertise it to the Console. |
architectSelfTestNamespace | string | architect-self-test | Namespace the component creates test workloads in (created by the chart). |
architectSelfTestPollInterval | duration | 5s | How often the component polls the API for a pending run. |
architectSelfTestImage | string | ghcr.io/loopholelabs/architect-self-test:latest | Self-test component image override. |
architectSelfTestWorkloadImage | string | ghcr.io/loopholelabs/example-go:latest | Test workload image override. |
architectSelfTestNodeSelector | map | {} | Node selector for the component's pod. |
architectSelfTestResources | map | 50m/64Mi req, 250m/128Mi lim | Component resource requests and limits. |
architectSelfTestTolerations | list | [] | Tolerations for the component's pod. |
Experimental
Only enable these when advised by Loophole Labs.
| Value | Type | Default | Description |
|---|---|---|---|
features.liveMigrationBuffering | bool | false | Buffers in-flight traffic across a live migration. |
architectRouterAddr | string | /ip4/0.0.0.0/tcp/8080 | Router listen multiaddr. |
architectRouterPort | int | 8080 | Router port. |
architectRouterGenericXDP | bool | true | Use generic XDP (for drivers without native XDP). |
architectRouterIngressIface | string | eth0 | Interface the router attaches to. |
architectRouterPassthroughPorts | string | "" | Ports that bypass the router. |
architectRouterResources | map | 250m/256Mi req, 1/512Mi lim | Router resource requests and limits. |
architectRouterShimPort | int | 8081 | Router-shim port. |
architectRouterShimResources | map | 100m/128Mi req, 500m/256Mi lim | Router-shim resource requests and limits. |
architectRouterShimTimeout | duration | 10s | Router-shim request timeout. |
architectRouterImage | string | ghcr.io/loopholelabs/architect-router:latest | Router image override. |
architectRouterShimImage | string | ghcr.io/loopholelabs/architect-router-shim:latest | Router-shim image override. |
architectShadowServiceEnabled | bool | false | Enable shadow Services for live network migration. |
architectShadowServicePortMin | int | 30000 | Low end of the shadow-service port range. |
architectShadowServicePortMax | int | 32767 | High end of the shadow-service port range. |
architectShadowServiceRouterPodLabelSelector | string | app.kubernetes.io/name=architect-router | Selector for router pods. |