---
id: w1/m3/t003
title: Wire cluster-autoscaler (clusterapi provider)
worker: worker1
status: done
estimate: 30m
depends_on: []
---

## Objective

Fill in the placeholder autoscaler app so pending pods add a node and empty nodes are removed.

## Context

- `deploy/gitops/base/autoscaler.yaml` is currently a placeholder → cluster-autoscaler Helm app, `cloudProvider: clusterapi`, `autoDiscovery.clusterName: bex`.

## Files

- `deploy/gitops/base/autoscaler.yaml`

## Acceptance criteria

- [x] The cluster-autoscaler pod runs and discovers the `bex` MachineDeployment(s). _Met 2026-07-09_ on the mock mgmt cluster (chart 9.58.0, `kubeconfig-incluster` mode, CAPI `bex-kubeconfig` secret): logs show the worker in nodegroup `MachineDeployment/default/bex-worker-0-*`. Decision: installs beside CAPI on the MGMT cluster via `scripts/install-autoscaler.sh` (called by app-cluster.yml and mock-cluster.sh; owns the chart pin), NOT an Argo app — the decision record is the header of `infra/clusterapi/autoscaler-values.yaml` (+ `rbac.additionalRules` for the infrastructure group).

## Out of scope

- min/max annotations (t004); verification (t005).
