Skip to main content
This runbook covers deployment, monitoring, and day-to-day operation of the Autopilot platform. It applies to both the controller (CRD-driven, runs as a Kubernetes controller-manager) and the autoscaler (standalone GKE-focused autoscaling loop).
For scale-down behavior see Node Scale-Down; for problem diagnosis see Troubleshooting; for emergency procedures see Disaster Recovery.

Deployment

Controller (Helm)

Common value overrides:

Autoscaler (Helm)

Common value overrides:

CRD installation

CRDs are installed automatically when crds.install=true (default) in the controller chart. To install manually:
Expected output:

GKE Workload Identity

If using Workload Identity instead of node-level service account keys:
The GCP service account needs these roles:
  • 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 via controller.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.
Individual CRD resources also have a 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):
Via CRD (per-policy):

Adjust scale cooldown

Change log level at runtime

Valid levels: 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):
Pinned to the pool node: Protected by PDB (GKE-managed, can’t pin): Verify:

CRD reference

For the full CRD schemas (RebalancePolicy, NodeScalingPolicy, PodResizePolicy) with all fields and examples, see CRD Reference.