For scale-down behavior see Node Scale-Down; for problem
diagnosis see Troubleshooting; for emergency procedures see
Disaster Recovery.
Deployment
Controller (Helm)
Autoscaler (Helm)
CRD installation
CRDs are installed automatically whencrds.install=true (default) in the controller chart.
To install manually:
GKE Workload Identity
If using Workload Identity instead of node-level service account keys:roles/container.clusterAdmin(for node pool management)roles/compute.instanceAdmin.v1(for node operations)
Health checks
Controller
The controller exposes health endpoints on port 8081 (configurable viacontroller.probeAddr):
Autoscaler
The autoscaler exposes health and metrics on port 8080:Kubernetes probes
Both Helm charts configure probes automatically:- Liveness:
GET /healthz, initial delay 15s, period 20s - Readiness:
GET /readyz, initial delay 5s, period 10s
Metrics and monitoring
Prometheus metrics
The controller and autoscaler expose Prometheus metrics on port 8080:ServiceMonitor setup
Key metrics to watch
Set up alerts for these conditions:- Controller pod not ready for more than 5 minutes
- Leader election lost (check logs for “leader election lost”)
- High error rate in reconciliation loops
- Scaling operations consistently failing
- Rebalance plans generated but never executed (stuck in dry-run when not intended)
Common operational tasks
Enable/disable dry-run mode
Dry-run prevents the controller and autoscaler from making any changes. All analysis and planning still runs; only execution is skipped.spec.dryRun field. Setting it true on a specific
RebalancePolicy disables execution for that policy only, even if the global dry-run is
false.
Adjust rebalance thresholds
Via Helm (global):Adjust scale cooldown
Change log level at runtime
debug, info, warn, error.
Exclude namespaces from rebalancing
Controller pool node management
Infrastructure pinning
Critical monitoring infrastructure is pinned to the Autopilot controller pool node so it survives managed node scale-downs and rebalances. GKE-managed kube-system components (kube-dns, metrics-server, konnectivity) cannot be pinned — GKE’s control plane reconciler resets their Deployment specs within seconds. These are protected by PDBs instead. Re-apply after GKE upgrades (GKE may delete PDBs or reset monitoring Deployments):
Protected by PDB (GKE-managed, can’t pin):
Verify: