GKE Overview: Google Kubernetes Engine Explained for Beginners
Google Kubernetes Engine (GKE) is Google Cloud’s managed Kubernetes service. Google runs the control plane (the API server, etcd, scheduler, and controller manager) while you deploy and manage your workloads using standard kubectl commands. You get the full power of Kubernetes without provisioning or patching the infrastructure that makes it work.
What is GKE?
GKE stands for Google Kubernetes Engine. It is the managed Kubernetes offering on Google Cloud Platform.
Kubernetes is an open-source system for running containerised applications across a cluster of machines. It handles scheduling, self-healing, scaling, and rolling deployments. But running Kubernetes yourself is operationally heavy: you need to provision and patch control plane VMs, configure etcd, manage TLS certificates, and keep up with Kubernetes releases before your first workload ever runs.
GKE eliminates that operational burden. Google Cloud runs the control plane on managed infrastructure that is not visible in your project. You create a cluster, run gcloud container clusters get-credentials to configure kubectl, and start deploying workloads. The same YAML manifests, the same kubectl commands, the same Kubernetes concepts: they all work exactly as they would on any Kubernetes cluster anywhere.
GKE does not change how Kubernetes works. It removes the work of operating the control plane. Everything you learn about Kubernetes (pods, deployments, services, namespaces) applies directly to GKE.
Simple explanation
Think of Kubernetes as air traffic control for containers. It decides which containers run where, restarts them when they crash, and scales them up when traffic increases. Running Kubernetes yourself is like building and staffing your own air traffic control tower. GKE is like hiring a professional tower operator: the control infrastructure is already running, expertly maintained, and always available. You tell it what needs to fly. It handles the rest.
The practical difference between Kubernetes and GKE comes down to one question: who manages the control plane?
- Raw Kubernetes: you provision and operate control plane nodes yourself. Hard, expensive, and time-consuming.
- GKE: Google operates the control plane. You use it via the Kubernetes API as normal.
Your workloads behave identically in both cases. The difference is entirely in the operational overhead you carry.
How GKE works
A GKE cluster has two layers: the control plane and the worker nodes.
Control plane
The control plane is the brain of the cluster. It receives requests from kubectl or the Cloud Console via the Kubernetes API server, schedules workloads onto nodes, and continuously reconciles the actual cluster state with the desired state you have declared. On GKE, the control plane runs on Google-owned infrastructure. You never SSH into it. In regional clusters, it is replicated across three availability zones automatically.
Worker nodes
Worker nodes are the VMs where your containers actually run. In GKE Standard mode, these are Compute Engine VMs in your project. You choose machine types and configure node pools. In GKE Autopilot mode, Google provisions and manages nodes on your behalf; you never interact with them directly.
The control plane is like a restaurant manager who decides which tables get which orders, coordinates the kitchen, and handles problems. Worker nodes are the kitchen staff who actually prepare the food. In GKE, Google is the restaurant manager. You are the chef who decides what goes on the menu (your workloads). In Autopilot mode, Google also hires and manages the kitchen staff (nodes) for you.
Pods and workloads
The smallest deployable unit in Kubernetes is a pod. A pod wraps one or more containers that share a network namespace. You typically manage pods through higher-level objects: a Deployment maintains a desired number of pod replicas and handles rolling updates, while a Service provides a stable network endpoint that routes traffic to your pods.
Connecting with kubectl
GKE exposes a standard Kubernetes API endpoint. You connect using the same kubectl CLI you would use with any Kubernetes cluster. The only GKE-specific step is fetching credentials:
gcloud container clusters get-credentials my-cluster --region=us-central1This populates your local ~/.kube/config with the cluster’s API endpoint, credentials, and context. After that, every standard kubectl command works normally.
If you work with multiple clusters, use kubectl config get-contexts to list them and kubectl config use-context to switch between them. The get-credentials command adds a new context each time you run it.
What Google manages vs what you manage
The central value of GKE is that Google handles the hardest parts of operating Kubernetes, leaving you to focus on your workloads.
| Responsibility | GKE Standard | GKE Autopilot |
|---|---|---|
| Control plane (API server, etcd, scheduler) | ||
| Control plane HA across zones | ||
| Control plane upgrades | ||
| Control plane security patching | ||
| etcd backups | ||
| TLS certificate management | ||
| Worker node provisioning | You | |
| Worker node patching and upgrades | You (configurable) | |
| Worker node scaling | You (configurable) | |
| Worker node security hardening | You | |
| Application workloads | You | You |
| IAM and access control | You | You |
| Networking (VPC, firewall rules) | You | You |
| Persistent storage configuration | You | You |
Google always manages the control plane in both modes. In Autopilot, Google also manages the nodes. In Standard, you manage the nodes. In both modes, your application workloads, IAM, and networking are always your responsibility.
GKE Autopilot vs Standard
GKE offers two modes of operation. You choose the mode when you create a cluster and cannot change it afterwards. For the full comparison, see GKE Autopilot vs Standard.
| Autopilot | Standard | |
|---|---|---|
| Node management | You | |
| Billing unit | Per pod (CPU + memory requests) | Per node VM |
| Security defaults | Strict, enforced by GKE | Configurable |
| DaemonSets | System DaemonSets only | Unrestricted |
| GPU / TPU nodes | Supported | Supported |
| SSH to nodes | Not permitted | Permitted |
| Custom node images | Not supported | Supported |
| Operational overhead | Very low | Moderate |
| Best for | Most workloads | Specialised hardware, advanced node config |
If you are new to GKE, start with Autopilot. Google manages nodes, billing is per pod (no paying for idle VMs), and security defaults are strict out of the box. Most teams never need to move to Standard.
Choose Standard when you have a genuine need for node-level control: specific GPU configurations, custom DaemonSets, SSH access to nodes, kernel-level settings, or compliance requirements that mandate control over the underlying infrastructure.
When to use GKE
GKE is the right choice when:
You are running microservices. GKE is purpose-built for multi-service architectures where each service runs in its own set of pods, scales independently, and communicates through Services or an Ingress controller.
You have multi-container workloads. If your application relies on sidecar patterns (for example, a service mesh proxy, log shipper, or secrets agent running alongside each application container) you need Kubernetes pods, not a serverless container platform.
You need the full Kubernetes API. Teams migrating from on-premises Kubernetes, running Helm charts, or using Kubernetes operators need GKE because it exposes the standard Kubernetes API in full.
You need more control than Cloud Run provides. Cloud Run handles stateless HTTP workloads well. But if you need custom networking, stateful workloads with persistent volumes, fine-grained scheduling constraints, or workloads that are not HTTP-based, GKE gives you the control you need.
You are running batch or platform workloads. Kubernetes Jobs and CronJobs are well-suited to batch processing pipelines. If you are building a platform for other teams to deploy onto, GKE’s multi-tenant capabilities (namespaces, RBAC, network policies) make it a natural fit.
You need GPU or TPU workloads. ML training jobs that need GPU nodes can run on GKE Standard node pools with GPU machine types, or on Autopilot by requesting GPUs in the pod spec.
Ask yourself: do I need more than one container in a pod, stateful storage, custom scheduling, or the Kubernetes API directly? If yes, GKE is likely the right tool. If no, check whether Cloud Run covers your needs first.
When GKE may not be the best choice
GKE is powerful, but it is not the simplest tool for every job. Consider the alternatives before reaching for a cluster.
Cloud Run is better when you have a stateless HTTP or gRPC container that needs to scale to zero, you want zero cluster management overhead, or you are deploying a single service rather than a multi-service architecture. Cloud Run handles the infrastructure entirely. There are no nodes, node pools, or cluster upgrades to manage. If your use case fits Cloud Run, it will be faster to deploy and cheaper to operate.
Compute Engine is better when you need to run non-containerised software, you require specific OS configurations that containers cannot provide, or you are running legacy applications that are not packaged as container images. GKE adds orchestration overhead that is not valuable when you just need a VM.
The plain-language rule: GKE sits in the middle. It is more powerful and flexible than Cloud Run but more operationally complex. If you do not need the Kubernetes API (multi-container pods, custom scheduling, Kubernetes operators, or stateful workloads with volume claims) Cloud Run will serve you better with far less overhead.
Many teams default to GKE because Kubernetes sounds impressive or enterprise-grade. GKE is genuinely complex to operate well. Always evaluate Cloud Run first for new services. Reach for GKE only when Cloud Run’s constraints are actually a problem for your workload.
GKE vs Cloud Run vs Compute Engine
| GKE | Cloud Run | Compute Engine | |
|---|---|---|---|
| Unit | Pods in a cluster | Container instances | Virtual machines |
| Kubernetes API | Yes | No | No |
| Stateful workloads | Yes (with PersistentVolumes) | Limited | Yes |
| Scale to zero | No | Yes | No |
| Operational overhead | Moderate to high | Very low | High |
| Use case | Microservices, complex workloads | Stateless HTTP services | Legacy apps, custom OS |
| Pricing model | Per node or per pod | Per request / per vCPU-second | Per VM |
Use GKE when you need the Kubernetes API or multi-container workloads. Use Cloud Run for stateless containers with minimal ops overhead. Use Compute Engine when you need a raw VM.
For a deeper decision guide, see GKE Autopilot vs Standard.
Cluster versions and release channels
Kubernetes releases a new minor version roughly every four months, and GKE tracks these closely. Rather than pinning a specific version and managing upgrades manually, Google recommends enrolling clusters in a release channel.
Rapid channel: the newest Kubernetes versions as soon as GKE qualifies them. Use this for non-production environments where you want early access to new features.
Regular channel: the default for new clusters. It balances new features with stability. Appropriate for most production workloads.
Stable channel: receives versions after additional validation across a large population of GKE clusters. Use this for highly regulated environments where upgrade-related incidents carry significant cost.
When you enrol a cluster in a release channel, GKE automatically upgrades the control plane and (for Standard clusters) nodes according to the channel’s cadence. You can configure maintenance windows to control when upgrades are applied. For more detail, see Upgrading GKE Clusters Safely.
You can pin a cluster to a specific Kubernetes version outside a release channel, but Google recommends staying on a channel. Pinned clusters can fall out of the supported version skew and miss security patches.
Container-Optimized OS
GKE nodes run Container-Optimized OS (COS) by default: a minimal Linux distribution built and maintained by Google specifically for hosting containers. This matters because the OS on your nodes directly affects the security and stability of your workloads.
COS is hardened in several ways:
- The root filesystem is read-only, preventing modifications to core system files.
- Only the components needed to run containers are included, minimising the attack surface.
- SSH access is disabled by default.
- Security patches are applied automatically.
- The kernel is tuned for container workloads with appropriate cgroup and namespace support.
For Standard node pools that require a more general-purpose Linux environment (specific kernel modules, debugging tools, or applications that need writable system paths) you can configure individual pools to use Ubuntu. Autopilot always uses COS and this is not configurable.
Getting started with GKE
Step 1: Enable the GKE API
Before creating any cluster, enable the Kubernetes Engine API in your GCP project:
gcloud services enable container.googleapis.comVerify it is enabled:
gcloud services list --enabled --filter="name:container.googleapis.com"Step 2: Create an Autopilot cluster (recommended)
Autopilot clusters are always regional. The control plane spans multiple zones automatically:
gcloud container clusters create-auto my-autopilot-cluster \
--region=us-central1Step 3: Create a Standard cluster (when you need node control)
gcloud container clusters create my-cluster \
--zone=us-central1-a \
--num-nodes=3 \
--release-channel=regularStep 4: Configure kubectl
Fetch credentials to connect kubectl to your cluster:
gcloud container clusters get-credentials my-autopilot-cluster \
--region=us-central1This updates ~/.kube/config with the cluster’s API endpoint, credentials, and context.
Step 5: Verify the connection
kubectl get nodesOn an Autopilot cluster, no nodes appear until you deploy a workload. GKE provisions them on demand. That is expected behaviour, not an error.
For a complete end-to-end tutorial including deploying a real workload and exposing it to the internet, see Creating Your First GKE Cluster.
GKE integration with GCP services
GKE is tightly integrated with the rest of Google Cloud, which reduces the configuration work for common patterns.
Cloud Load Balancing: creating a Kubernetes Service of type LoadBalancer automatically provisions an external Network Load Balancer. For HTTP host/path routing, use Ingress or Gateway, which provisions an Application Load Balancer. See Ingress Controllers on GKE for routing configuration.
Artifact Registry: GKE nodes are pre-configured to pull images from Artifact Registry in the same project without additional authentication setup.
Cloud Monitoring and Cloud Logging: GKE clusters send logs and metrics automatically. Pre-built dashboards cover node CPU and memory, pod restarts, and Kubernetes API server health. See Monitoring GKE Clusters and Logging in Kubernetes.
Workload Identity: rather than creating service account key files and mounting them into pods, Workload Identity lets pods authenticate to GCP APIs using a Kubernetes service account bound to a GCP service account. This is the recommended approach for giving pods access to GCP resources. See Workload Identity for GKE.
Private GKE Clusters: for workloads that must not be reachable from the public internet, GKE supports fully private clusters where nodes have no public IP addresses and the control plane API endpoint can be restricted to specific CIDR ranges. See Private GKE Clusters.
Pricing overview
GKE charges a cluster management fee of approximately $0.10 per cluster-hour for the managed control plane. Google provides a $74.40 monthly free-tier credit per billing account, roughly equivalent to one zonal Standard cluster or one Autopilot cluster per month.
Beyond the cluster management fee:
- Standard mode: you pay for Compute Engine VMs in your node pools, whether or not they are fully utilised.
- Autopilot mode: you pay for the CPU, memory, and ephemeral storage that running pods actually request.
Worker nodes, persistent disks, load balancers, egress, and other GCP resources are billed normally regardless of the free-tier credit.
Even an idle GKE Standard cluster with nodes running will incur charges for those Compute Engine VMs. Always delete test clusters when you are done: gcloud container clusters delete my-cluster —zone=us-central1-a
Prices change. Treat the figures above as a guide rather than a guarantee. Check the Google Cloud Pricing page for current rates before planning a budget.
Common beginner mistakes
- Choosing Standard mode when Autopilot would be simpler. Many beginners default to Standard because it sounds like more control. For the majority of workloads, Autopilot is simpler, cheaper (you pay only for what pods request), and more secure by default. Choose Standard only when you have a specific need for node-level control.
- Forgetting to run
get-credentialsafter creating a cluster. Creating a cluster withgcloud container clusters createdoes not automatically configure kubectl. You must rungcloud container clusters get-credentialsseparately before kubectl commands will work. - Leaving clusters running after experimentation. An idle Standard cluster with nodes running charges you for those Compute Engine VMs. Always delete test clusters when you are finished.
- Using GKE when Cloud Run would be simpler. If your workload is a stateless HTTP container with no need for the Kubernetes API, Cloud Run is faster to deploy, cheaper to run, and requires zero cluster management. Evaluate Cloud Run first.
- Not setting resource requests on pods in Autopilot. Autopilot requires CPU and memory requests on every container. Pods without resource requests will be rejected. This is by design: Autopilot uses requests to provision the right node capacity.
Summary
- GKE is Google Cloud’s managed Kubernetes service. Google operates the control plane; you manage workloads (and nodes in Standard mode).
- Autopilot is the recommended default: Google manages nodes, billing is per pod, and security defaults are strict. Standard gives you full node control for specialised workloads.
- Use GKE for microservices, multi-container workloads, full Kubernetes API access, and stateful applications. Use Cloud Run for simpler stateless HTTP containers.
- Enrol clusters in a release channel (Rapid, Regular, or Stable) to receive automatic Kubernetes version upgrades.
- GKE nodes run Container-Optimized OS by default: a minimal, read-only, security-hardened Linux distribution tuned for containers.
- Enable the API:
gcloud services enable container.googleapis.com - Create an Autopilot cluster:
gcloud container clusters create-auto my-cluster —region=us-central1 - Connect kubectl:
gcloud container clusters get-credentials my-cluster —region=us-central1 - GKE provides a monthly free-tier credit for cluster management fees; worker nodes and other resources are billed separately.
Frequently asked questions
What is GKE used for?
GKE is used to run containerised applications on Google Cloud without managing the underlying Kubernetes control plane yourself. Common use cases include microservices architectures, multi-container applications, batch processing pipelines, and any workload that needs the full Kubernetes API: scheduling, self-healing, autoscaling, rolling updates, and fine-grained networking.
Is GKE the same as Kubernetes?
No. Kubernetes is an open-source container orchestration system. GKE is Google Cloud's managed service that runs Kubernetes for you. With GKE, Google operates the control plane (API server, etcd, scheduler, controller manager) on your behalf. You interact with your cluster using the same kubectl commands you would use with any Kubernetes cluster, but without the operational burden of running the control plane yourself.
What is the difference between GKE Autopilot and Standard?
In GKE Autopilot, Google manages the worker nodes completely: provisioning, scaling, patching, and securing them. You deploy workloads and pay per pod based on CPU and memory requests. In GKE Standard, you manage the worker nodes yourself through node pools, choosing machine types and scaling settings, and you pay for provisioned VMs whether or not they are fully utilised. Autopilot is recommended for most workloads; Standard is for teams that need node-level control.
Is GKE free?
GKE charges a cluster management fee of approximately $0.10 per cluster-hour for the managed control plane. Google provides a $74.40 monthly free-tier credit per billing account, which covers roughly one zonal Standard cluster or one Autopilot cluster per month. Worker nodes, persistent disks, load balancers, and other GCP resources are billed separately regardless of the free tier.
When should I use GKE instead of Cloud Run?
Use GKE when you need the full Kubernetes API, stateful workloads, custom networking, DaemonSets, multi-container pods, sidecar patterns, or hardware-specific nodes such as GPUs. Cloud Run is the better choice when you have stateless HTTP containers and want the simplest possible deployment experience with no cluster management at all. If Cloud Run handles your use case, it is almost always simpler and cheaper.