These docs are for a previous release (v1.8). See the latest release (v1.9)
Quick start
Architect scales Kubernetes pods to zero without unscheduling them, and wakes or migrates them instantly with complete state. No code changes required.
Prerequisites:
- Kubernetes 1.33+ with at least 2 nodes
- Helm 3+
- On Amazon EKS: AL2023 AMI required (AL2 not supported)
Install Architect
Sign into console.architect.io, click
+ Add Cluster, and follow the instructions. The console provides a
pre-filled helm install command with your machine token, cluster name,
and Kubernetes distribution.
Verify the installation:
kubectl get pods -n architectYou should see architect-admission-controller, architect-control-plane, and
architectd on each labeled node. For GitOps setup, prerequisites, and
advanced Helm chart options, see the full Installation
guide.
Deploy Valkey as an example
helm install \
example-valkey oci://ghcr.io/loopholelabs/example-valkey-chart --waitWatch Valkey scale down and wake up
Watch the pod scale down after 10 seconds of inactivity:
watch "kubectl get pod -l app=example-valkey-valkey \
-o custom-columns=\"\
NAME:.metadata.name,\
ARCHITECT:.metadata.labels['status\.architect\.loopholelabs\.io/valkey'],\
CPU:.spec.containers[0].resources.requests.cpu,\
MEM:.spec.containers[0].resources.requests.memory\""Wake the pod up:
kubectl exec -it deployment/example-valkey-valkey \
-c valkey -- valkey-cli pingForce Valkey migration across nodes
Find the initial node where the Valkey pod runs:
NODE=$(kubectl get pod -l app=example-valkey-valkey \
-o jsonpath='{.items[0].spec.nodeName}')Store a Valkey message in memory, on the initial node:
kubectl exec -it deployment/example-valkey-valkey -c valkey -- \
valkey-cli set architect-quick-start \
"This Valkey message was stored in memory on node: $NODE"Confirm that the message can be read:
kubectl exec -it deployment/example-valkey-valkey -c valkey -- \
sh -c "valkey-cli --raw get architect-quick-start; \
echo \"Valkey pod is running on node: $NODE\""Cordon the node and delete the Valkey pod:
kubectl cordon $NODE
kubectl delete pod -l app=example-valkey-valkeyWait for the new pod to be running before continuing:
kubectl wait pod -l app=example-valkey-valkey \
--for=condition=Ready --timeout=60sFind the new node where the Valkey pod migrated to:
NEW_NODE=$(kubectl get pod -l app=example-valkey-valkey \
-o jsonpath='{.items[0].spec.nodeName}')Verify that Valkey message is still in memory, on the new node:
kubectl exec -it deployment/example-valkey-valkey -c valkey -- \
sh -c "valkey-cli --raw get architect-quick-start; \
echo \"Valkey pod is running on node: $NEW_NODE\""Uncordon the initial node and delete the Valkey example:
kubectl uncordon $NODE
helm uninstall example-valkeyTakeaways
You've now seen Architect's two core capabilities in action:
- Valkey scaled to zero CPU and memory after 10 seconds of inactivity, then woke up instantly when you ran a command against it; all without being unscheduled.
- You then forced a Valkey migration to a different node by cordoning and deleting the pod: the message you stored in memory was still there on the new node. No code changes and no special client logic needed. Valkey's in-memory state survived the move intact.
More examples
Each chart below deploys a small workload with Architect annotations already applied, so it scales down after a short idle period and wakes instantly. Install any of them the same way, swapping in the chart name:
helm upgrade example-go \
oci://ghcr.io/loopholelabs/example-go-chart --install --waitAvailable charts: example-go, example-java-tomcat, example-kafka,
example-php-wordpress, example-postgres, example-python, example-ruby,
example-rust-miniserve, example-spring-boot.