skip to content

Amazon EKS is described as "managed Kubernetes". Which parts of an EKS cluster does AWS actually run and bill you for, and which parts stay your responsibility?

level: juniorimportance: should knowfreq 68%

answer

  1. control plane versus data plane
  2. an account you cannot log into
  3. charged per cluster, not per pod
  4. nodes and add-ons upgrade separately

basics

~20 s

AWS runs the EKS control plane — API server, etcd, scheduler, controller manager — across multiple Availability Zones for a flat hourly charge per cluster. The data plane stays yours: nodes, node patching, add-on versions, upgrades and the workloads.

solid answer

~40 s

EKS draws the managed line between control plane and data plane. AWS provisions and operates the Kubernetes API server, etcd, scheduler and controller manager in an AWS-owned account spread across Availability Zones, patches and replaces them, backs up etcd, and hands you only an HTTPS API endpoint — there is no machine you can log into. For that you pay a flat hourly charge per cluster whether or not a single pod runs. Everything below the API is yours: the compute that runs pods (managed node groups, self-managed nodes, Fargate profiles or Karpenter-provisioned EC2), the VPC and subnets the pods draw IPs from, the versions of add-ons like the VPC CNI, kube-proxy and CoreDNS, and the upgrade itself — you call `aws eks update-cluster-version`, then upgrade add-ons and node groups separately.

code

bash · 4 lines
bash
aws eks describe-cluster --name prod --query 'cluster.{version:version,status:status}'
aws eks update-cluster-version --name prod --kubernetes-version 1.31
aws eks update-addon --cluster-name prod --addon-name vpc-cni --resolve-conflicts PRESERVE
aws eks update-nodegroup-version --cluster-name prod --nodegroup-name app-nodes

go deeper

for a junior

Be ready to draw the line plainly: AWS runs the API server and etcd, you run the nodes and the workloads. Mention that the cluster carries a flat hourly charge of its own.

for a middle

Explain the mechanics of the split — the control plane living in an AWS account you cannot reach, managed add-ons being published rather than operated, and upgrades running as a control-plane-then-add-ons-then-nodes sequence you drive.

for a senior

Show that you have operated this: version support windows and the extended-support cost cliff, add-on and kubelet skew during a rolling upgrade, and subnet IP exhaustion because the VPC CNI hands every pod a real VPC address.

for a principal

Own the consequences of the fixed per-cluster charge — how many clusters the organisation runs, where the tenancy boundary sits, and who is accountable for keeping every cluster inside standard support rather than quietly paying extended-support rates.

## Two halves of any cluster Every Kubernetes cluster has a **control plane** — the API server that accepts manifests, the etcd key-value store that persists them, the scheduler that picks machines for pods, and the controller manager that reconciles the difference between desired and actual state — and a **data plane**, the machines that actually run the containers. Amazon EKS draws its managed line exactly there. AWS owns the control plane; you own the data plane and everything above the API. ## What AWS runs and you never touch When you create an EKS cluster, AWS provisions the control-plane components inside an AWS-owned account, spread over multiple Availability Zones in the Region, and operates them: capacity, patching, failure replacement and etcd backups are AWS's problem. You get an HTTPS API endpoint, which you can expose publicly, privately inside your VPC, or both. There is no control-plane instance in your account, no SSH, no flag you can hand-edit on the API server; configuration is limited to what the EKS API exposes. Control-plane logs are opt-in and delivered to CloudWatch Logs by type — `api`, `audit`, `authenticator`, `controllerManager`, `scheduler` — which is the only window you get into those processes. AWS also *publishes* things for the data plane: EKS-optimized AMIs, and EKS managed add-ons (the VPC CNI, `kube-proxy`, CoreDNS, the EBS CSI driver, the Pod Identity Agent). Publishing is not operating. You still choose when to move to a new add-on version, and a mismatch between add-on version and cluster version is a failure mode you own. ## What stays yours **Compute.** You choose how pods get a machine: *managed node groups* (AWS creates the Auto Scaling group and launch template and orchestrates a rolling AMI update when you ask for one), *self-managed nodes* (you own the ASG outright), *Fargate profiles* (no nodes at all — each pod gets its own AWS-managed micro-VM, billed per pod's requested vCPU and memory), or *Karpenter*, which watches for unschedulable pods and launches right-sized EC2 instances directly instead of scaling node groups. EKS Auto Mode, introduced in late 2024, hands most of that node lifecycle back to AWS at a premium. **Upgrades.** This is the responsibility candidates most often misplace. Upgrading is a sequence you drive: ```bash aws eks update-cluster-version --name prod --kubernetes-version 1.31 aws eks update-addon --cluster-name prod --addon-name vpc-cni --resolve-conflicts PRESERVE aws eks update-nodegroup-version --cluster-name prod --nodegroup-name app-nodes ``` Moving the control plane does not move your nodes; nodes keep their old kubelet version until you update them, within the version skew Kubernetes allows. Each minor version carries a standard-support window, after which the cluster is not force-upgraded — it rolls into extended support at a higher hourly rate. Upgrade cadence is therefore a standing operational commitment, not a one-time setup step. **Networking.** The VPC, subnets and security groups are yours. The Amazon VPC CNI gives every pod a real IP address from your subnets, so subnet CIDR sizing becomes a pod-capacity limit — an AWS-specific constraint with AWS-specific levers (prefix delegation, or custom networking onto a secondary CIDR range). **Access.** Mapping IAM principals to cluster permissions is yours too, done today through EKS *access entries* and AWS-managed access policies rather than by hand-editing the old `aws-auth` ConfigMap. ## What you are billed for Three buckets. First, the flat per-cluster hourly charge — it exists with zero pods running, which is the main economic argument against spinning up a cluster per team or per environment and the reason organisations consolidate into fewer, namespace-partitioned clusters. Second, the data plane: EC2 instances or Fargate pod resources. Third, everything around it that a cluster tends to create — EBS volumes, load balancers provisioned by controllers, NAT gateway data processing for egress, CloudWatch logs. ## Why interviewers ask this It is the cheapest possible test of whether "managed" means anything precise to you. A candidate who says "AWS runs Kubernetes for me" has not planned for node patching, add-on drift or the upgrade treadmill — the three things that actually consume a platform team's time on EKS.

  • If the per-cluster charge applies whether or not anything is running, how does that shape how many clusters you run?
    It pushes you toward fewer, larger clusters partitioned by namespace rather than a cluster per team or per environment, because the fee is fixed per cluster and duplicated add-ons and system workloads are duplicated overhead too. You accept the extra blast radius and isolation work in exchange. Teams that need hard isolation still get their own cluster, but they should be able to say why.
  • What are your options for actually running the pods, at a high level?
    Managed node groups, where AWS creates and rolls the Auto Scaling group for you; self-managed nodes you own outright; Fargate profiles, where each pod gets an AWS-run micro-VM and you never see an instance; and Karpenter, which launches right-sized EC2 instances directly in response to unschedulable pods. EKS Auto Mode delegates most of that lifecycle back to AWS.
  • Does an EKS cluster stop working when its Kubernetes version leaves standard support?
    No. AWS does not force the upgrade; the cluster moves into extended support and the per-cluster hourly rate goes up. That buys planning time, not a reprieve — extended support itself ends eventually, and staying there is a recurring cost line that is easy to forget about until a bill review finds it.

AWS leases you an engine it maintains in its own garage; the chassis, wheels, fuel and the decision to take it in for service are still yours.

saying these in an interview costs you the question

  • Assumes AWS patches the worker node operating system for you
  • Thinks EKS control planes are free like the ECS control plane
  • Believes upgrading the control plane upgrades the nodes too
  • Expects SSH or console access to EKS control-plane machines
  • Says Fargate profiles remove the per-cluster hourly charge

context