Already installed via the Quick Start? Skip to Introspection or Examples.
Prerequisites
- Kubernetes 1.32+ (1.33+ required for automatic resource reduction on hibernation)
- Helm 3+
- On Amazon EKS: AL2023 AMI required (AL2 not supported)
Install
Sign into console.architect.io, click
+ Add Cluster, and follow the instructions. The console walks you through
node labeling and provides a pre-filled helm install command with your
machine token, cluster name, and Kubernetes distribution.
For GitOps, create a secret and reference it via --set secretRef=architect-secrets:
kubectl create secret generic architect-secrets \
--from-literal=machineToken="YOUR_MACHINE_TOKEN" \
--namespace=architect \
--output=yaml \
--dry-run=client \
| kubectl apply --filename -Verify with kubectl get pods -n architect. You should see
architect-manager, architect-control-plane, and architectd on each
labeled node. Then deploy an example application.
Once your workloads are running, the console will look something like this:

Helm Chart Options
To see all available values:
helm show values oci://ghcr.io/loopholelabs/architect-chart# End user-facing configuration
kubernetesDistro: kind # Kubernetes distribution that Architect is going to be installed on
apiUrl: "https://api.architect.io" # API endpoint that Architect should push metrics to and authenticate with
clusterName: "" # Required: Identifier for this cluster
# Either set an installation machine token as an inline value OR
machineToken: ""
# reference machineToken from an existing secret (e.g. if using External Secrets, Sealed Secrets, etc.)
# The key inside this secret **must** be named machineToken
secretRef: ""
secretRefDefault: "architectd-secrets"
# Advanced configuration for images
architectAdmissionControllerImage: ""
architectAdmissionControllerImageDefault: ghcr.io/loopholelabs/architect-admission-controller:1.0.0
architectAdmissionControllerInstallerImage: ""
architectAdmissionControllerInstallerImageDefault: ghcr.io/loopholelabs/architect-admission-controller-installer:1.0.0
architectAdmissionControllerNodeSelector: {}
architectAdmissionControllerResources: {}
architectAdmissionControllerTolerations: []
architectControlPlaneImage: ""
architectControlPlaneImageDefault: ghcr.io/loopholelabs/architect-control-plane:1.0.0
architectControlPlaneNodeSelector: {}
architectControlPlaneResources: {}
architectControlPlaneTolerations: []
architectHealthCheckProxyImage: ""
architectHealthCheckProxyImageDefault: ghcr.io/loopholelabs/architect-health-check-proxy:1.0.0
architectShimRuncImage: ""
architectShimRuncImageDefault: ghcr.io/loopholelabs/architect-shim-runc:1.0.0
architectShimRunscImage: ""
architectShimRunscImageDefault: ghcr.io/loopholelabs/architect-shim-runsc:1.0.0
architectdHostAliases: []
architectdImage: ""
architectdImageDefault: ghcr.io/loopholelabs/architectd:1.0.0
architectdInstallerImage: ""
architectdInstallerImageDefault: ghcr.io/loopholelabs/architectd-installer:1.0.0
architectdNodeSelector: {}
architectdTolerations: []
imagePullPolicy: IfNotPresent
# ⚠️ Feature flags for experimental features
# ⚠️ Only enable when advised by Loophole Labs, Inc.
features:
liveMigrationBuffering: false
# ⚠️ EXPERIMENTAL FEATURE: Network migrations
architectRouterAddr: "/ip4/0.0.0.0/tcp/8080"
architectRouterGenericXDP: false
architectRouterImage: ""
architectRouterImageDefault: ghcr.io/loopholelabs/architect-router:1.0.0
architectRouterIngressIface: "eth0"
architectRouterPassthroughPorts: ""
architectRouterPort: 8080
architectRouterResources: {}Node Selectors
--set 'architectdNodeSelector.custom-label=value' \
--set 'architectAdmissionControllerNodeSelector.zone=us-east-1a' \
--set 'architectControlPlaneNodeSelector.tier=critical'Tolerations
--set 'architectdTolerations[0].key=dedicated' \
--set 'architectdTolerations[0].operator=Equal' \
--set 'architectdTolerations[0].value=architect' \
--set 'architectdTolerations[0].effect=NoSchedule'Resource Requests and Limits
--set 'architectAdmissionControllerResources.requests.cpu=100m' \
--set 'architectAdmissionControllerResources.requests.memory=128Mi' \
--set 'architectAdmissionControllerResources.limits.cpu=500m' \
--set 'architectAdmissionControllerResources.limits.memory=512Mi' \
--set 'architectControlPlaneResources.requests.cpu=200m' \
--set 'architectControlPlaneResources.requests.memory=256Mi'