Oct 30, 20265 min read

GKE Autopilot vs Standard: Which Mode Should Your Cluster Use

How GKE Autopilot and GKE Standard differ on billing, node management, workload restrictions and operations, and how to deploy a backend to either with Encore.

Once you decide to run a backend on Google Kubernetes Engine, the next question is the mode. Autopilot hands node management to Google and bills you for what your Pods request. Standard gives you node pools to size and tune, and bills you for the VMs. The choice changes your bill, what workloads you are allowed to run, and how much of the cluster you have to look after.

This guide compares the two modes for a typical backend with several services and a database, and shows how Encore deploys the same code to either one without hand-written manifests.

Autopilot vs Standard at a glance

EncoreGKE AutopilotGKE Standard
NodesAutopilot or Standard, set per environmentManaged by GoogleNode pools you size and upgrade
BillingResources in your GCP projectPod CPU, memory and storage requestsCompute Engine VMs
Cluster feeGKE's fee applies$0.10 per cluster per hour$0.10 per cluster per hour
Privileged workloadsNot neededRestrictedAllowed
ManifestsGenerated from codeYou write themYou write them
Database and queuesCloud SQL and Pub/Sub from codeSet up separatelySet up separately

Each option is covered below, starting with Encore.

Deploying services to GKE Autopilot or Standard with Encore

Encore combines an open source infrastructure SDK for TypeScript and Go with a platform that provisions and deploys into your own AWS or GCP account. In a GCP environment you can choose GKE Autopilot or a Standard cluster with managed node pools, with nodes in private subnets. Each service becomes a Kubernetes Deployment with its own service account, and Encore creates the Service and Ingress resources that connect it to Google Cloud Load Balancing with managed TLS certificates.

Application code passes through Encore and infrastructure guardrails to resources provisioned in your own AWS or GCP account.
Encore provisions the infrastructure your application needs in your own AWS or GCP account.

What you write is the service:

// reports/reports.ts import { api } from "encore.dev/api"; import { CronJob } from "encore.dev/cron"; import { SQLDatabase } from "encore.dev/storage/sqldb"; // Cloud SQL for PostgreSQL on GCP, a local Postgres under encore run. const db = new SQLDatabase("reports", { migrations: "./migrations" }); export const daily = api( { expose: true, method: "GET", path: "/reports/daily" }, async (): Promise<{ day: string; signups: number }> => { const row = await db.queryRow<{ day: string; signups: number }>` SELECT day::text, signups FROM daily_stats ORDER BY day DESC LIMIT 1`; return row ?? { day: "", signups: 0 }; }, ); // Recomputes yesterday's numbers. Safe to run twice because of the upsert. export const rollup = api({}, async (): Promise<void> => { await db.exec` INSERT INTO daily_stats (day, signups) SELECT current_date - 1, count(*) FROM signups WHERE created_at >= current_date - 1 AND created_at < current_date ON CONFLICT (day) DO UPDATE SET signups = EXCLUDED.signups`; }); const _ = new CronJob("daily-rollup", { title: "Roll up yesterday's signups", schedule: "0 2 * * *", endpoint: rollup, });

The migration in reports/migrations creates the signups and daily_stats tables the queries use:

-- reports/migrations/1_create_tables.up.sql CREATE TABLE signups ( id BIGSERIAL PRIMARY KEY, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE TABLE daily_stats ( day DATE PRIMARY KEY, signups INTEGER NOT NULL );
Get started
brew install encoredev/tap/encore &&
encore app create
Copy

Run in your terminal to get started locally.

On deploy, this becomes a Deployment on the cluster mode you picked, a database on the environment's Cloud SQL instance, and a cron schedule that calls rollup every night. encore run starts Postgres locally so the endpoints and migrations can be tested there. Cron jobs do not run locally, but rollup is a normal endpoint you can call by hand while developing.

The cluster mode is an environment setting, so a team can keep staging on Autopilot and run production on Standard with tuned node pools, or the other way around, with no change to the service code.

GKE Autopilot: pay for Pods, not nodes

In Autopilot, Google provisions and manages nodes based on your workloads. General-purpose Pods are billed per second for the CPU, memory and ephemeral storage they request, per GKE pricing, with no charge for unused node capacity or system Pods. Workloads that select specific hardware, such as GPUs, switch to node-based billing with an Autopilot premium.

Autopilot trades away control: it enforces security defaults that block privileged containers and most host access, adjusts resource requests that fall below its minimums, and limits which DaemonSets and node settings you can use. Most application backends never hit those rules, though security agents, custom CNI plugins and some observability tools do.

GKE Standard: node pools you own

In Standard mode, you create node pools, choose machine types and configure autoscaling. You pay for the Compute Engine VMs per second with a one-minute minimum, whether your Pods fill them or not, and committed use discounts apply to those VMs.

That suits large steady workloads that pack nodes well, and anything needing privileged access or specific kernel settings. It also means you handle bin packing, node pool upgrades and capacity planning, or you pay for headroom you do not use.

Good to know

The mode is fixed when the cluster is created, so switching means a new cluster and moving workloads. Standard clusters can also run individual workloads on Autopilot through compute classes, which narrows the gap for mixed clusters.

How to choose

Pick Encore when you want to run on GKE in your own GCP project, with Cloud SQL, Pub/Sub, secrets and cron created from the same code as the services.

Pick Autopilot for most application backends, especially small or uneven ones, where paying for Pod requests and not managing nodes outweighs the restrictions. Pick Standard when you need privileged workloads, specific machine types, or large steady workloads where packing your own nodes is cheaper.

Frequently asked questions

What is the difference between GKE Autopilot and GKE Standard?

In Autopilot, Google manages the nodes and you pay for the CPU, memory and ephemeral storage your Pods request. In Standard, you create and size node pools yourself and pay for the underlying Compute Engine VMs whether Pods use them or not. Both charge the same $0.10 per cluster per hour management fee.

Is GKE Autopilot cheaper than Standard?

For small or uneven workloads it usually is, because you pay only for Pod requests and not for idle node capacity. Standard can be cheaper for large, steady workloads that pack nodes tightly, especially with committed use discounts on the VMs.

How do I deploy a backend to GKE Autopilot with Encore?

With Encore, you write TypeScript or Go services and choose GKE Autopilot or Standard when creating a GCP environment. Encore creates the cluster, a Deployment and service account per service, the Service and Ingress resources for Google Cloud Load Balancing, plus Cloud SQL, Pub/Sub and Secret Manager for the resources your code declares.

Deploy to your cloud on AWS and Google Cloud
without managing infrastructure

Encore lets developers and agents define application infrastructure directly in code, then automatically provisions it from local development to production in your AWS or GCP account.

~/orders — claude
Claude Code
Claude Code v2.1.180Opus 5.5~/orders