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 architect

You 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 --wait

Watch 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 ping

Force 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-valkey

Wait for the new pod to be running before continuing:

kubectl wait pod -l app=example-valkey-valkey \
  --for=condition=Ready --timeout=60s

Find 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-valkey

Takeaways

You've now seen Architect's two core capabilities in action:

  1. 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.
  2. 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 --wait

Available charts: example-go, example-java-tomcat, example-kafka, example-php-wordpress, example-postgres, example-python, example-ruby, example-rust-miniserve, example-spring-boot.