~/DOCS/

Installation

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:

Console cluster overview showing pods with 30-day event sparklines, total events, and active connections

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'