Architecture • Deployments • Services & Ingress • Probes & Scaling • Troubleshooting • 2026

Kubernetes Interview Questions

30 questions What each one tests, an answer frame, a spoken answer 35 min read

This page is for anyone facing a Kubernetes round, from a first DevOps job to a senior platform role. Most rounds start with the architecture and the basics of pods, Deployments and Services, then move to config, probes, resource requests and autoscaling, and finish with storage, RBAC and live debugging of pods that crash or never start. Senior rounds add a production story and a judgement call. Each question shows what the interviewer is really checking, the shape of a strong answer and a short answer you can say out loud. Practise saying them, then swap in your own clusters and stories.

Search all questions by round, difficulty and level, or save the ones you want to practise.

Architecture 3 questions

Easy Technical round Fresher, Mid-level Practice question

1. Walk me through the parts of a Kubernetes cluster. What runs on the control plane, and what runs on every worker node?

What the interviewer is really testing:
Whether you have a working map of the cluster, so your later answers about scheduling, networking and failures have something to hang on.
Answer frame:

Control plane: the API server as the front door, etcd as the store, the scheduler, and the controller manager running control loops.

Each node: the kubelet that runs pods, a container runtime such as containerd, and usually kube-proxy for Service traffic.

How they talk: every component goes through the API server; nothing else reads or writes etcd directly.

Sample spoken answer:

"I think of it as a brain and a set of workers. On the control plane there's the API server, which is the only front door: kubectl, the nodes and every controller talk to it. Behind it is etcd, a key-value store holding the whole state of the cluster. The scheduler watches for pods that have no node yet and picks one for each. The controller manager runs loops that keep reality matching what we asked for, like keeping the right number of replicas. On a cloud there's often a cloud controller manager too, for things like load balancers. Each worker node runs the kubelet, which takes the pods assigned to that node and makes sure their containers are running, a container runtime like containerd that actually starts them, and usually kube-proxy, which sets up the rules so Service addresses reach the right pods."

Red flag to avoid:

Describing Kubernetes as something that runs containers by itself, with no idea that the kubelet and a container runtime do that work on each node.

They may ask next:
  • Which component would you look at first if new pods are created but never get assigned to a node?
  • Why does everything go through the API server instead of reading etcd directly?
Say it in 60 seconds
Hard Technical round Mid-level, Senior Practice question

2. What happens, step by step, between running kubectl apply on a new Deployment and its pods serving traffic?

What the interviewer is really testing:
Whether you see Kubernetes as independent controllers watching the API server, which is what lets you work out where a stuck rollout stopped.
Answer frame:

API server: authenticates, authorises, runs admission checks, then stores the object in etcd.

Controllers: the Deployment controller creates a ReplicaSet; the ReplicaSet controller creates pod objects.

Scheduler and kubelet: the scheduler binds each pod to a node; that node's kubelet pulls the image, gets networking set up and starts the containers.

Traffic: once readiness passes, the pod's IP is added to the Service endpoints.

Sample spoken answer:

"kubectl sends the manifest to the API server. It checks who I am and whether I'm allowed, runs admission controllers that can reject or adjust the object, and saves it to etcd. Nothing is running yet. The Deployment controller is watching, sees the new Deployment and creates a ReplicaSet. The ReplicaSet controller sees that and creates pod objects with no node. The scheduler notices unscheduled pods, filters out nodes that don't fit their requests, taints or affinity rules, scores the rest and binds each pod to a node. The kubelet on that node sees a pod assigned to it, asks the container runtime to pull the image, the network plugin gives the pod an IP, and the containers start. When the readiness probe passes, the pod's IP goes into the Service's endpoints and traffic starts flowing. Each step is a separate loop reacting to changes in the API server."

Red flag to avoid:

Saying kubectl talks to the nodes directly, or describing one central program that does every step in order.

They may ask next:
  • If the pods exist but have no node assigned, which step failed and where would you look?
  • What kind of thing might an admission controller reject or change?
Say it in 60 seconds
Hard Technical round Senior Practice question

3. What is etcd's job in a cluster, and what happens to running apps if etcd loses quorum?

What the interviewer is really testing:
Whether you can tell the control plane being down from the workloads being down, and know how to protect the cluster state.
Answer frame:

Role: a consistent key-value store holding all cluster state; only the API server talks to it.

Quorum: members agree through Raft, so you run an odd number, usually three or five, and need a majority.

Losing it: running pods keep running, but nothing can change: no deploys, no scaling, no replacing pods on a dead node.

Protection: regular snapshots stored away from the cluster, and a restore you have actually practised.

Sample spoken answer:

"etcd is the cluster's database. Every Deployment, Secret and pod status lives there, and only the API server reads and writes it. It's a distributed store that uses the Raft consensus algorithm, so you run an odd number of members, usually three or five, and it needs a majority to accept writes. With three members you can lose one. If it loses quorum, the API server can't make changes. Pods already running keep going, because the kubelet and the container runtime run them locally. But nothing new happens: I can't deploy, the autoscaler can't scale, and if a node dies its pods aren't replaced. So it's an outage of control rather than instantly of traffic, and it gets worse the longer it lasts. On a self-managed cluster I'd take regular etcd snapshots, keep them off the cluster, and practise a restore. On a managed service the provider looks after this."

Red flag to avoid:

Saying every app goes down the instant etcd fails, or never having thought about how the cluster state is backed up.

They may ask next:
  • Why is a cluster with four etcd members no more fault-tolerant than one with three?
  • How would you check that your etcd backups can actually be restored?
Say it in 60 seconds

Workloads 4 questions

Easy Technical round Fresher Practice question

4. What is a pod, and why does Kubernetes schedule pods rather than single containers?

What the interviewer is really testing:
Whether you know what the containers in a pod share, which explains sidecars, localhost calls and why pods are treated as disposable.
Answer frame:

Definition: the smallest thing Kubernetes schedules: one or more containers that always land on the same node together.

Shared: one IP address and port space, so they reach each other on localhost, plus any volumes the pod defines.

Disposable: pods are replaced, not repaired; a new pod gets a new name and a new IP.

Sample spoken answer:

"A pod is the smallest unit Kubernetes schedules. Usually it holds one container, but it can hold a few that need to live together, like an app plus a sidecar that ships its logs. Everything in a pod lands on the same node and shares one IP address and port space, so the containers talk to each other over localhost, and they can share volumes. Kubernetes schedules pods because some things genuinely belong together and have to be placed, started and stopped as one unit. The other thing I'd stress is that pods are disposable. If a pod dies or its node goes away, it isn't fixed in place; a controller like a Deployment creates a brand new pod with a new name and a new IP. That's why nothing should depend on a pod's IP, and why we put a Service in front of them."

Red flag to avoid:

Saying a pod is just another word for a container, or planning to create bare pods by hand for a production app.

They may ask next:
  • When would you put two containers in one pod instead of in two separate pods?
  • What is an init container, and how is it different from a sidecar?
Say it in 60 seconds
Easy Technical round Fresher, Mid-level Practice question

5. How are a Deployment, a ReplicaSet and a pod related? Which one do you normally create yourself?

What the interviewer is really testing:
Whether you understand the chain of ownership, because it is what makes rolling updates and rollbacks work.
Answer frame:

Pod: the running unit; on its own, nothing recreates it if it dies.

ReplicaSet: keeps a set number of pods that match a label selector alive.

Deployment: manages ReplicaSets over time, one per version of the pod template, which gives rolling updates and rollback.

Sample spoken answer:

"It's a chain of ownership. A pod on its own is one running instance; if it's deleted or its node dies, nothing brings it back. A ReplicaSet fixes that: it says I want three pods matching this label, and it creates or removes pods to keep that number. A Deployment sits on top and manages ReplicaSets. Every time I change the pod template, say a new image tag, the Deployment creates a new ReplicaSet and scales it up while scaling the old one down. The old ReplicaSet is kept around at zero replicas, and that's exactly what makes a rollback quick. So in practice I write Deployments and almost never touch ReplicaSets. If I scaled a Deployment's ReplicaSet by hand, the Deployment would simply set it back, because it owns that object."

Red flag to avoid:

Saying you create ReplicaSets directly for normal apps, or not knowing that the old ReplicaSets are how rollback works.

They may ask next:
  • What happens if you delete one pod that belongs to a Deployment?
  • Why does changing only the replica count not create a new ReplicaSet?
Say it in 60 seconds
Medium Technical round Fresher, Mid-level Practice question

6. How does a rolling update work in a Deployment, and how would you roll back a bad release?

What the interviewer is really testing:
Whether you can ship and undo a release safely, and know which settings control how fast old pods are replaced.
Answer frame:

Trigger: any change to the pod template starts a rollout with a new ReplicaSet.

Pace: maxSurge sets how many extra pods may exist, maxUnavailable how many may be missing; readiness gates each step.

Rollback: kubectl rollout undo scales the previous ReplicaSet back up; watch it with rollout status.

Sample spoken answer:

"When I change the pod template, for example the image tag, the Deployment creates a new ReplicaSet and swaps pods over gradually. Two settings control the pace. maxSurge is how many pods above the desired count can exist during the update, and maxUnavailable is how many below it we're willing to go. It only moves on as new pods pass their readiness probe, so a good readiness check is what stops a broken version from taking over. I watch it with kubectl rollout status. If the release is bad, kubectl rollout undo goes back to the previous revision, or I can pick a specific one from rollout history. It's quick because the old ReplicaSet still exists and just scales back up. One catch: rollback only restores the pod template. If I also changed a ConfigMap or ran a database migration, those don't roll back with it."

Code:
kubectl set image deployment/web web=registry.example.com/web:1.5.0
kubectl rollout status deployment/web
kubectl rollout history deployment/web
kubectl rollout undo deployment/web                  # previous revision
kubectl rollout undo deployment/web --to-revision=3  # a specific one
Red flag to avoid:

Thinking a rollback also reverts ConfigMaps, Secrets or database changes, or not knowing that readiness decides when a rollout moves on.

They may ask next:
  • What would you set maxSurge and maxUnavailable to for a service that must never drop below full capacity?
  • Your rollout is stuck halfway. How do you find out why?
Say it in 60 seconds
Easy Coding round Fresher Practice question

7. Write a minimal Deployment manifest for a web app with three replicas listening on port 8080.

What the interviewer is really testing:
Whether you can write a manifest from memory and know which fields have to agree with each other.
Answer frame:

Header: apiVersion: apps/v1, kind: Deployment and a name.

Selector and labels: spec.selector.matchLabels must match the pod template's labels.

Template: the pod spec: container name, a pinned image tag and the container port.

Sample spoken answer:

"I start with apiVersion apps/v1, kind Deployment and a name. Under spec I set replicas to three. The part people trip on is the selector: matchLabels has to match the labels in the pod template, or the API server rejects it, because that's how the Deployment finds its own pods. The template is just a pod spec: a container with a name, an image and the port it listens on. I pin a real version tag rather than latest, so every rollout is tied to a specific build and a rollback actually goes somewhere. For production I'd add resource requests and limits and probes, but this is the minimum that runs. I'd apply it with kubectl apply -f, then check it with kubectl get deployment and kubectl rollout status."

Code:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: registry.example.com/web:1.4.2
          ports:
            - containerPort: 8080
Red flag to avoid:

A selector that does not match the template labels, or an unpinned latest image in a production manifest.

They may ask next:
  • What Service would you write to expose these pods inside the cluster?
  • Why is the latest image tag a bad idea in a Deployment?
Say it in 60 seconds

Storage & State 3 questions

Medium Technical round Mid-level, Senior Practice question

8. When would you use a StatefulSet instead of a Deployment, and what does it actually give you?

What the interviewer is really testing:
Whether you know what makes a workload stateful in Kubernetes terms, rather than just repeating that databases go in StatefulSets.
Answer frame:

Identity: stable pod names like db-0 and db-1, and stable DNS names through a headless Service.

Storage: a volumeClaimTemplate gives each pod its own claim, which follows it across restarts.

Order: by default pods start one by one in order and stop in reverse, which clustered systems often need.

Choose it when: replicas are not interchangeable, like databases or message brokers whose members know each other.

Sample spoken answer:

"I use a Deployment when replicas are interchangeable: any pod can serve any request and it doesn't matter which one dies. A StatefulSet is for when each replica has an identity. It gives pods stable names, so I always get db-0, db-1 and db-2, and with a headless Service each one gets a stable DNS name the others can find. Each pod also gets its own PersistentVolumeClaim from a volumeClaimTemplate, and if db-1 is rescheduled it comes back attached to the same volume. By default it starts pods one at a time in order and removes them in reverse, which matters for clustered systems. So databases and message brokers fit. A web API that stores its data elsewhere is still a Deployment. And a StatefulSet doesn't replicate data for you; that's the application's job, it just gives each member a stable name and disk."

Red flag to avoid:

Saying a StatefulSet makes data safe or replicated by itself, when it only provides identity, ordering and per-pod storage.

They may ask next:
  • Why does a StatefulSet usually need a headless Service?
  • What happens to db-2's volume when you scale from three replicas down to two?
Say it in 60 seconds
Medium Technical round Fresher, Mid-level Practice question

9. Explain PersistentVolumes, PersistentVolumeClaims and StorageClasses. How does a pod end up with a disk?

What the interviewer is really testing:
Whether you understand the split between asking for storage and providing it, and the traps around access modes and deletion.
Answer frame:

PVC: the pod's request: size, access mode and storage class.

PV: the actual piece of storage, made by an admin or provisioned on demand.

StorageClass: tells the cluster how to create volumes dynamically, and what happens to them on release.

Access modes: ReadWriteOnce means one node at a time; ReadWriteMany needs storage that supports sharing.

Sample spoken answer:

"It's a split between asking and providing. The pod references a PersistentVolumeClaim, which says: I need 20 gigabytes, ReadWriteOnce, from the fast storage class. A PersistentVolume is the actual storage, like a cloud disk or an NFS share. In most clusters nobody creates PVs by hand any more: the claim names a StorageClass, its provisioner creates a disk on demand and binds it to the claim, the disk is attached to the pod's node, and the kubelet mounts it into the pod. Two details matter in practice. Access mode: ReadWriteOnce means one node at a time can mount it, so two replicas on different nodes can't share it; ReadWriteMany needs storage that supports it, like a network file system. And reclaim policy: for dynamically provisioned volumes it defaults to Delete, so deleting the claim deletes the disk. For anything important I'd use Retain and keep backups."

Red flag to avoid:

Expecting data written to the container's own filesystem to survive a restart, or deleting a PVC without knowing its reclaim policy.

They may ask next:
  • A pod with a PVC is stuck Pending. What would you check about the volume?
  • Why can a zonal disk stop a pod from being scheduled even when another zone has free capacity?
Say it in 60 seconds
Hard Situational round Senior Practice question

10. Your team wants to run the production PostgreSQL database inside the Kubernetes cluster. What would you ask before agreeing?

What the interviewer is really testing:
Whether you judge stateful workloads by operational cost and failure behaviour, not just by whether Kubernetes can technically run them.
Answer frame:

Need: why not a managed database, and what running it ourselves really buys.

Operations: who owns backups, restores, failover and upgrades; is there a mature operator?

Platform: storage performance, what happens to volumes when a node or zone fails, and node maintenance.

Proof: a tested restore and a failover drill before real data goes in.

Sample spoken answer:

"I wouldn't say no straight away, but I'd ask some hard questions first. Why not a managed database? If the reason is cost or portability, is that worth taking on backups, failover and upgrades ourselves? If we go ahead, I wouldn't hand-roll a StatefulSet; I'd want a mature operator that handles replication, failover and backups, and someone on the team who knows Postgres well. Then the platform side. How fast is the storage class, and what happens when a node dies? A ReadWriteOnce disk has to detach and reattach elsewhere, and a zonal disk can only move within its zone. During node upgrades, draining must never take down the primary and its replicas together, so we'd need disruption budgets and anti-affinity. And before any real data went in, I'd want a restore from backup and a failover drill actually done and timed."

Red flag to avoid:

Saying yes because StatefulSets exist, with no plan for backups, failover or node maintenance.

They may ask next:
  • What would a PodDisruptionBudget protect against here, and what wouldn't it?
  • How would you take consistent backups of a database running in a pod?
Say it in 60 seconds

Networking 3 questions

Easy Technical round Fresher, Mid-level Practice question

11. Explain the ClusterIP, NodePort and LoadBalancer Service types. When would you use each one?

What the interviewer is really testing:
Whether you can pick the right way to expose a workload instead of making everything public.
Answer frame:

ClusterIP: the default; a stable virtual IP and DNS name reachable only inside the cluster.

NodePort: also opens the same port, from a high range, on every node so outside traffic can get in.

LoadBalancer: asks the cloud provider for an external load balancer that forwards to the Service.

Sample spoken answer:

"All three give a stable address in front of pods that come and go. ClusterIP is the default: a virtual IP and a DNS name that only work inside the cluster. Most services are like this, a backend that only other pods call. NodePort builds on that and also opens a port from a high range on every node, so anything that can reach a node's IP on that port reaches the Service. I'd use it for quick testing or when I run my own load balancer in front of the nodes, but it's rarely what I'd give users. LoadBalancer goes one step further: on a cloud it asks the provider to create a real load balancer with an external address. That's the simple way to expose one service publicly. For many HTTP services I'd rather use one Ingress than create a load balancer for each."

Red flag to avoid:

Exposing every internal service as a LoadBalancer, or thinking a ClusterIP can be reached from a laptop outside the cluster.

They may ask next:
  • What happens if you create a LoadBalancer Service on a cluster with no cloud provider integration?
  • What is a headless Service, and when do you need one?
Say it in 60 seconds
Medium Technical round Fresher, Mid-level Practice question

12. A Service keeps one IP while the pods behind it keep changing. How does traffic actually reach the right pod?

What the interviewer is really testing:
Whether you understand the moving parts well enough to debug a Service that has no working backends.
Answer frame:

Selector: the Service matches pods by labels, never by name or IP.

Endpoints: a controller keeps EndpointSlices listing the IPs of matching pods and marks which ones are ready.

Data path: kube-proxy, or the network plugin, programs each node so the Service IP is balanced across those pod IPs.

Names: cluster DNS gives the Service a name like web.shop.svc.cluster.local.

Sample spoken answer:

"The Service doesn't know pods by name. It has a label selector, say app equals web. A controller watches pods and keeps EndpointSlices up to date with the IP and port of every matching pod, marked ready or not. Only ready ones get traffic, so a pod that fails its readiness probe stops receiving requests without being restarted. Then on every node, kube-proxy watches Services and EndpointSlices and writes rules, usually iptables or IPVS, so a packet sent to the Service's virtual IP is sent on to one of the pod IPs. Some network plugins replace kube-proxy and do the same job with eBPF. On top of that, cluster DNS gives the Service a name like web.shop.svc.cluster.local, so pods in the same namespace can just call web. So when a Service answers nothing, the first thing I check is whether it has any ready endpoints."

Red flag to avoid:

Saying the Service holds a fixed list of pod IPs, or not knowing that readiness decides whether a pod gets traffic.

They may ask next:
  • How would a pod in a different namespace reach this Service by name?
  • What happens to requests already in flight when a pod is removed from the endpoints?
Say it in 60 seconds
Medium Technical round Mid-level Practice question

13. What does an Ingress give you that a LoadBalancer Service doesn't, and what must be installed for it to work?

What the interviewer is really testing:
Whether you know an Ingress is HTTP routing rules plus a controller, and when it is worth using.
Answer frame:

HTTP routing: send traffic by host name and URL path to different Services behind one entry point.

TLS: terminate HTTPS in one place, with certificates kept in Secrets.

Controller: the Ingress object is only rules; an ingress controller must be running to act on them.

Sample spoken answer:

"A LoadBalancer Service gives one external address per service and works at the connection level, so ten public services means ten load balancers. An Ingress works at the HTTP level. I can say requests for api.example.com go to the api Service and example.com/shop goes to the shop Service, all through one entry point. It also handles TLS in one place, using certificates stored as Secrets, often issued automatically by a tool like cert-manager. The catch is that an Ingress resource is only a set of rules. Nothing happens unless an ingress controller is running in the cluster, such as an NGINX-based one or a cloud provider's controller, and that controller is usually exposed through a single LoadBalancer Service itself. For newer setups I'd also look at the Gateway API, the newer and more expressive API for the same job."

Red flag to avoid:

Creating Ingress objects and expecting them to work with no controller installed, or trying to route a raw database port through one.

They may ask next:
  • How would you send a small slice of traffic to a new version through your ingress setup?
  • Would you terminate TLS at the ingress or at the pod, and why?
Say it in 60 seconds

Configuration 3 questions

Medium Technical round Fresher, Mid-level Practice question

14. What is the difference between a ConfigMap and a Secret, and how secure are Kubernetes Secrets really?

What the interviewer is really testing:
Whether you know base64 is not encryption, and what it really takes to protect credentials inside a cluster.
Answer frame:

Same shape: both hold key-value data you inject as environment variables or mounted files.

Secrets: base64 encoded, which is not encryption; a separate type so access can be locked down.

Making them safe: encryption at rest for etcd, tight RBAC, and often an external secret manager.

Sample spoken answer:

"They work almost the same way: key-value data I can inject into a pod as environment variables or mount as files. ConfigMaps are for normal settings like a log level or feature flags. Secrets are for passwords, tokens and certificates. The important part is that a Secret's values are only base64 encoded, which anyone can decode. They sit in etcd without extra encryption unless encryption at rest has been turned on, which some managed providers do for you. What Secrets do give you is a separate object type, so RBAC can let a team read ConfigMaps but not Secrets. To make them properly safe I'd turn on encryption at rest, keep RBAC tight so very few people can read production Secrets, never commit real values to Git, and often pull them from an external secret manager with a tool that syncs them into the cluster."

Red flag to avoid:

Calling base64 encryption, or committing Secret manifests with real values into a Git repository.

They may ask next:
  • Why is permission to create pods in a namespace almost the same as permission to read that namespace's Secrets?
  • Would you pass a password as an environment variable or as a mounted file, and why?
Say it in 60 seconds
Medium Technical round Mid-level Practice question

15. You changed a value in a ConfigMap, but the running app still uses the old one. Why, and how do you fix it properly?

What the interviewer is really testing:
Whether you understand how configuration actually reaches a container, a detail that catches out many people after their first real change.
Answer frame:

Env vars: read once when the container starts; they never change inside a running container.

Mounted files: refresh after a delay, except subPath mounts, and the app must re-read the file.

Fix: kubectl rollout restart, or a config hash in the pod template so every config change triggers a rollout.

Sample spoken answer:

"It depends on how the pod uses it. If the value comes in as an environment variable, it was read when the container started and will never change inside that container. If the ConfigMap is mounted as a volume, the kubelet does update the files, but only after a sync delay, and not at all if it was mounted with subPath. Even then the app has to notice and reload the file, and most don't. The quick fix is kubectl rollout restart on the Deployment, which replaces pods gradually so they pick up the new value. The better fix is to make config changes trigger a rollout by themselves. One common pattern is a checksum of the config in a pod template annotation, which many Helm charts do. Another is a new ConfigMap with a versioned name for each change, which also makes rollback cleaner."

Red flag to avoid:

Expecting environment variables to update live, or fixing it by deleting every pod at once in production.

They may ask next:
  • Why does a versioned ConfigMap name make rollbacks easier?
  • How would you roll a risky config change out to only some pods first?
Say it in 60 seconds
Easy Technical round Fresher, Mid-level Practice question

16. What is Helm, and what problem does a Helm chart solve compared with a folder of plain YAML files?

What the interviewer is really testing:
Whether you've used Helm for real, and know it templates manifests and tracks releases rather than doing anything magic.
Answer frame:

Chart: templated manifests plus a values.yaml of defaults, packaged and versioned together.

Values: one chart, different settings per environment, passed with -f or --set.

Release: each install is tracked with a revision history, so helm upgrade and helm rollback work.

Sample spoken answer:

"Helm is a package manager for Kubernetes. A chart is a folder of templated manifests plus a values.yaml file with defaults. Without it, I'd end up copying the same Deployment, Service and Ingress YAML for dev, staging and production and editing a few lines by hand, and the copies drift apart. With a chart the templates stay the same and each environment gets its own values file, with a different replica count, image tag or host name. When I run helm install or helm upgrade, Helm renders the templates, applies them and records the result as a release with a revision number, so helm rollback can take me back to an earlier revision. It's also how most third-party software is shipped, so installing something like an ingress controller is one command. Before an upgrade I like to run helm template or a diff to see exactly what will change."

Code:
helm upgrade --install shop ./charts/shop -n shop -f values-prod.yaml
helm history shop -n shop
helm rollback shop 4 -n shop
Red flag to avoid:

Not being able to say what a values file or a release is, or running upgrades without ever looking at what they will change.

They may ask next:
  • What does helm upgrade --install do that helm install does not?
  • How do you keep secrets out of a values file that lives in Git?
Say it in 60 seconds

Health & Scaling 4 questions

Medium Technical round Fresher, Mid-level Practice question

17. What are liveness, readiness and startup probes, and what goes wrong if you use the wrong one?

What the interviewer is really testing:
Whether you know what each probe triggers, because badly chosen probes cause outages instead of preventing them.
Answer frame:

Readiness: failing takes the pod out of Service traffic; it is not restarted.

Liveness: failing makes the kubelet restart the container; meant only for a stuck process.

Startup: holds off the other two probes until a slow app has finished starting.

Classic mistake: a liveness check that depends on the database, so one database blip restarts every pod.

Sample spoken answer:

"Readiness answers: should this pod get traffic right now? If it fails, the pod is taken out of the Service's endpoints but keeps running, so it can warm up or recover. Liveness answers: is this process stuck beyond saving? If it fails, the kubelet kills and restarts the container. Startup is for slow starters: until it succeeds, liveness and readiness don't run, so a service that takes two minutes to boot isn't killed halfway. Getting these wrong is expensive. The classic mistake is a liveness probe that checks the database. The database has a short blip, every pod fails liveness, every pod restarts at once, and a small problem becomes a full outage. So I keep liveness very simple, basically can the process answer at all, and put dependency checks in readiness if anywhere. I'd rather have no liveness probe than an aggressive one."

Red flag to avoid:

Pointing liveness and readiness at the same deep health check that calls every downstream dependency.

They may ask next:
  • What would you actually check inside a readiness endpoint for an API?
  • Why is a very short liveness timeout risky for a service with occasional long garbage collection pauses?
Say it in 60 seconds
Medium Coding round Mid-level Practice question

18. Write the probes for an API container that can take up to two minutes to start, and explain the numbers you picked.

What the interviewer is really testing:
Whether you can turn probe theory into real settings and reason about timing instead of copying defaults.
Answer frame:

Startup: period multiplied by failure threshold must cover the worst start time.

Readiness: checks often and gives up quickly, so a struggling pod leaves traffic fast.

Liveness: checks less often with some tolerance, so a short slowdown doesn't cause a restart.

Sample spoken answer:

"Because start-up can take two minutes, I'd use a startup probe every five seconds with a failure threshold of 24. That allows up to 120 seconds before the kubelet gives up and restarts the container. Until it passes the other probes don't run, so I don't need a big initial delay on liveness. Readiness checks a separate ready endpoint every five seconds and takes the pod out of traffic after three failures, so roughly 15 seconds. Liveness checks a simple healthz endpoint every ten seconds and restarts after three failures, so the process has to be stuck for about half a minute before it's killed. I'd tune these from real data: how long starts actually take in production and how slow the endpoints get under load. The endpoints themselves should be cheap and shouldn't call other services."

Code:
containers:
  - name: api
    image: registry.example.com/api:2.0.1
    ports:
      - containerPort: 8080
    startupProbe:
      httpGet: { path: /healthz, port: 8080 }
      periodSeconds: 5
      failureThreshold: 24     # up to 120 s to start
    readinessProbe:
      httpGet: { path: /ready, port: 8080 }
      periodSeconds: 5
      failureThreshold: 3
    livenessProbe:
      httpGet: { path: /healthz, port: 8080 }
      periodSeconds: 10
      failureThreshold: 3
Red flag to avoid:

Using a huge initialDelaySeconds on liveness instead of a startup probe, or copying probe numbers with no link to real start-up time.

They may ask next:
  • What would happen with the same liveness settings but no startup probe?
  • How would you tell from the events that a liveness probe is what keeps restarting a pod?
Say it in 60 seconds
Easy Technical round Fresher, Mid-level Practice question

19. What is the difference between resource requests and limits, and what happens when a container goes over its limit?

What the interviewer is really testing:
Whether you know how scheduling differs from runtime enforcement, which explains throttling, OOMKilled restarts and Pending pods.
Answer frame:

Requests: what the scheduler reserves when choosing a node, and the base for CPU autoscaling.

CPU limit: going over it means the container is throttled, not killed.

Memory limit: going over it means the container is OOMKilled and restarted.

QoS: requests and limits set the pod's QoS class, which shapes which pods are evicted first when a node runs short.

Sample spoken answer:

"A request is what the container is guaranteed and what the scheduler uses to place it. If I request half a CPU and 512 megabytes of memory, the pod only goes on a node that has that much unreserved capacity. A limit is the ceiling at runtime, and the two resources behave differently when you hit it. CPU can be shared out over time, so a container over its CPU limit is throttled: it just runs slower. Memory can't be taken back, so a container that goes over its memory limit is killed, shows OOMKilled, and restarts. Requests and limits also set the pod's quality of service class. If every container has requests equal to limits for both CPU and memory, it's Guaranteed, and those pods are the last to be evicted when a node is short of memory. Pods with no requests or limits at all are BestEffort and go first."

Red flag to avoid:

Saying a container over its CPU limit gets killed, or not knowing that the scheduler places pods by requests rather than by real usage.

They may ask next:
  • Why do some teams set a memory limit but deliberately leave out a CPU limit?
  • What happens to scheduling if you set requests far higher than the app really uses?
Say it in 60 seconds
Medium Technical round Mid-level Practice question

20. How does the Horizontal Pod Autoscaler decide how many replicas to run, and why might it not scale when you expect it to?

What the interviewer is really testing:
Whether you understand the autoscaler's maths and prerequisites instead of treating it as an on switch.
Answer frame:

Loop: reads a metric, compares it with the target, and sets replicas between min and max.

Maths: desired replicas is roughly current replicas times current value over target, rounded up.

CPU is relative: utilisation is measured against the pod's CPU request, so no request means no CPU scaling.

Common blockers: no metrics server, missing requests, already at max, or new pods Pending on full nodes.

Sample spoken answer:

"The HPA is a control loop. Every so often it reads a metric, most often average CPU utilisation from the metrics server, and compares it with the target. The rule is roughly: desired replicas equals current replicas times current value divided by target, rounded up. So four pods running at 90 percent against a 60 percent target becomes six. It stays between the min and max I set, and it scales down more cautiously than up, using a stabilisation window so it doesn't flap. The part people miss is that CPU utilisation is measured against the pod's request. If the container has no CPU request, the HPA can't calculate it and won't scale. Other reasons: the metrics server isn't installed, it's already at max replicas, or it did scale but the new pods are Pending because the nodes are full, which is a job for a cluster autoscaler."

Code:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web
  minReplicas: 3
  maxReplicas: 20
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60
Red flag to avoid:

Setting up an HPA on pods with no CPU requests, or believing the HPA adds nodes to the cluster.

They may ask next:
  • How would you scale on queue length instead of CPU?
  • Why can an HPA and a fixed replicas value in your applied Deployment YAML fight each other?
Say it in 60 seconds

Access Control 3 questions

Easy Technical round Fresher, Mid-level Practice question

21. What are namespaces used for, and what do they not isolate on their own?

What the interviewer is really testing:
Whether you treat namespaces as the organising and permission boundary they are, and not as a hard security wall.
Answer frame:

Used for: grouping by team or app, unique names, and per-namespace RBAC, quotas and default limits.

Network: pods can reach other namespaces freely unless NetworkPolicies say otherwise and the network plugin enforces them.

Cluster-wide objects: nodes, PersistentVolumes, StorageClasses and ClusterRoles don't belong to any namespace.

Sample spoken answer:

"Namespaces split one cluster into named sections, usually by team or application, sometimes by environment. Names only have to be unique inside a namespace, and a lot of controls hang off them: Roles grant access per namespace, ResourceQuotas cap how much CPU and memory a team can claim, and LimitRanges set default requests. What they don't do on their own is isolate the network. A pod in one namespace can call a Service in another unless NetworkPolicies say no and the network plugin enforces them. They also don't isolate nodes: pods from different namespaces can share a machine and a kernel. And some objects aren't namespaced at all, like nodes, PersistentVolumes and ClusterRoles. So namespaces work well for separating teams that trust each other. For tenants that don't, I'd want separate node pools or separate clusters."

Red flag to avoid:

Saying namespaces are a security boundary by themselves, or that pods in different namespaces can't talk to each other.

They may ask next:
  • How would you stop one team's namespace from using up the whole cluster's capacity?
  • Would you run dev and production as namespaces in one cluster? Why or why not?
Say it in 60 seconds
Hard Technical round Mid-level, Senior Practice question

22. How does RBAC work in Kubernetes? Walk me through Roles, bindings and ServiceAccounts.

What the interviewer is really testing:
Whether you can grant least privilege precisely, especially to workloads and pipelines, and then prove what access really exists.
Answer frame:

Rules: a Role lists verbs on resources in one namespace; a ClusterRole covers cluster-wide resources or acts as a reusable template.

Bindings: a RoleBinding grants a role inside one namespace; a ClusterRoleBinding grants it across the whole cluster.

Additive: there are no deny rules; access is the sum of every binding.

Verify: kubectl auth can-i with --as shows what a subject can really do.

Sample spoken answer:

"RBAC has two halves: what is allowed, and who gets it. A Role is a list of rules, like get, list and watch on pods, in one namespace. A ClusterRole is the same but can cover cluster-wide things like nodes, or be reused across namespaces. A RoleBinding connects a role to subjects, meaning users, groups or ServiceAccounts, inside one namespace. A ClusterRoleBinding does it for the whole cluster, which is where I'm most careful. ServiceAccounts are the identities for workloads and pipelines; every pod runs as one. RBAC is purely additive, with no deny, so the only way to remove access is to remove a binding. In practice I write narrow Roles, often bind a built-in ClusterRole like view inside a single namespace with a RoleBinding, and always check the result with kubectl auth can-i, impersonating the account with --as."

Code:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: deployer
  namespace: shop
rules:
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["get", "list", "watch", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ci-deployer
  namespace: shop
subjects:
  - kind: ServiceAccount
    name: ci
    namespace: shop
roleRef:
  kind: Role
  name: deployer
  apiGroup: rbac.authorization.k8s.io
Red flag to avoid:

Giving an app or pipeline cluster-admin because it was quicker, or thinking you can write a deny rule.

They may ask next:
  • Why should each application get its own ServiceAccount instead of using the default one?
  • How would you find out which bindings let a particular ServiceAccount read Secrets?
Say it in 60 seconds
Medium Situational round Mid-level, Senior Practice question

23. A teammate wants to give the CI pipeline cluster-admin so deploys stop failing on permissions. How do you respond?

What the interviewer is really testing:
Whether you can hold a security line without blocking the team, and offer a better fix quickly.
Answer frame:

Acknowledge: the pain is real; blocked deploys cost the team time.

Risk: a leaked CI credential with cluster-admin can read every Secret and change every namespace.

Alternative: a ServiceAccount per target namespace with a Role for exactly what the deploy touches, and short-lived credentials.

Sample spoken answer:

"I'd agree the failures are a real problem, because nobody wants deploys blocked on permissions. But I'd push back on cluster-admin. CI systems are a favourite target, and if that credential leaks, whoever holds it can read every Secret and change anything in every namespace, production included. Instead I'd offer to fix it properly that same day. We look at exactly what the pipeline applies, usually Deployments, Services, ConfigMaps and maybe Ingresses, and create a ServiceAccount in each target namespace with a Role for just those resources and a RoleBinding. I'd test it with kubectl auth can-i before switching over. Where the platform allows, I'd use short-lived tokens or the CI system's workload identity instead of a long-lived token stored in CI. If something still fails later, the error names the missing permission, and adding one rule takes minutes."

Red flag to avoid:

Agreeing because it is faster, or refusing flatly without offering a working alternative.

They may ask next:
  • The pipeline also needs to create namespaces for preview environments. How would you handle that?
  • How would you find out which permissions the pipeline actually uses today?
Say it in 60 seconds

Troubleshooting 4 questions

Medium Technical round Fresher, Mid-level Practice question

24. A pod is stuck in CrashLoopBackOff. Walk me through how you find the cause.

What the interviewer is really testing:
Whether you have a calm, ordered debugging routine instead of guessing or deleting pods until it goes away.
Answer frame:

Meaning: the container starts, exits, and the kubelet keeps restarting it with a growing delay.

Logs: kubectl logs --previous shows the run that crashed, not the fresh one.

Describe: Last State shows the reason and exit code; events show probe failures.

Usual causes: bad config or a missing setting, a wrong command, OOMKilled, or a liveness probe killing it.

Sample spoken answer:

"CrashLoopBackOff isn't the error itself. It means the container keeps exiting and the kubelet keeps restarting it, waiting longer each time. So I want the reason it exits. First, kubectl logs with --previous, because the current container may have only just started. Most of the time that shows it: a missing environment variable, a config file it can't parse, a database it can't reach at startup. If the logs are empty, I run kubectl describe pod and look at Last State. Exit code 137 with reason OOMKilled means it hit its memory limit. Exit code 1 is usually the app failing on its own. If the events show liveness probe failures, the kubelet is killing a container that's slow rather than broken. If the command or entrypoint is wrong, it dies instantly with no app logs, and describe shows the runtime error. Then I check what changed recently: image, config or Secrets."

Code:
kubectl get pods -n shop
kubectl logs web-7d9f8-abcde -n shop --previous   # the run that crashed
kubectl describe pod web-7d9f8-abcde -n shop       # Last State, exit code, events
kubectl get events -n shop --sort-by=.metadata.creationTimestamp
Red flag to avoid:

Reading only the current container's logs, or deleting the pod again and again hoping it comes back healthy.

They may ask next:
  • The logs are empty and the exit code is 0. What does that suggest?
  • How would you get a shell into a container that crashes too quickly to exec into?
Say it in 60 seconds
Medium Technical round Fresher, Mid-level Practice question

25. A new pod has been Pending for ten minutes and never gets a node. How do you find out why?

What the interviewer is really testing:
Whether you know Pending usually means the scheduler can't place the pod, and whether you read its explanation instead of guessing.
Answer frame:

Read the event: kubectl describe pod shows a FailedScheduling message that names the reason.

Resources: requests bigger than any node's free allocatable capacity.

Placement rules: taints with no matching toleration, or a nodeSelector or affinity that matches no node.

Volumes: a claim that isn't bound, or a disk in a zone with no suitable node.

Sample spoken answer:

"Pending with no node means the scheduler couldn't place it, and the good news is it tells you why. I run kubectl describe pod and read the events at the bottom. There'll be a FailedScheduling message, something like zero of five nodes available, three with insufficient memory, two with a taint the pod doesn't tolerate. The usual causes show up there. The pod's requests are bigger than the free allocatable capacity on any node, often because someone asked for far more than the app needs. A taint on the nodes, like a dedicated GPU pool, with no matching toleration. A nodeSelector or affinity rule that matches nothing, often a typo in a label. Or a PersistentVolumeClaim that isn't bound, or whose disk sits in a zone with no room. If the pod has a node but shows ContainerCreating or ImagePullBackOff, that's a different problem, on the node or registry side."

Red flag to avoid:

Restarting nodes or deleting the pod before reading the scheduler's event, which usually states the exact reason.

They may ask next:
  • The event says insufficient CPU, but monitoring shows the nodes almost idle. How is that possible?
  • How does a cluster autoscaler decide whether a Pending pod should trigger a new node?
Say it in 60 seconds
Hard Technical round Mid-level, Senior Practice question

26. Pods show Running, but requests to their Service time out. How do you trace where the traffic stops?

What the interviewer is really testing:
Whether you can split a networking problem into layers and test each one, rather than blaming the cluster network first.
Answer frame:

Endpoints: no ready endpoints means the selector doesn't match or the pods aren't ready.

Ports: the Service targetPort must be the port the process really listens on.

The pod itself: test it by port-forward and by pod IP; an app bound to localhost passes the first and fails the second.

Policy and names: NetworkPolicies blocking the caller, or the caller using the wrong name or namespace.

Sample spoken answer:

"I work from the Service towards the pod. First the endpoints: if the Service has no ready endpoints, either the selector doesn't match the pod labels, often a tiny typo, or the pods aren't ready. If there are endpoints, I check ports, because it's easy to point targetPort at 80 when the app listens on 8080. Next I port-forward to one pod. If that fails, the app itself is broken. If it works, I call the pod's IP from a throwaway pod. That catches a classic bug: the process listening only on 127.0.0.1. Port-forward still reaches it because it connects from inside the pod, but other pods can't. If the pod IP works, I call the Service name from a throwaway pod in the caller's namespace. If that works but the real caller still fails, I look at NetworkPolicies and at the exact name it's calling."

Code:
kubectl get endpointslices -n shop -l kubernetes.io/service-name=web
kubectl get pods -n shop -l app=web -o wide --show-labels
kubectl get svc web -n shop -o yaml          # check selector and targetPort
kubectl port-forward -n shop pod/web-7d9f8-abcde 8080:8080
kubectl run tmp -n shop --rm -it --restart=Never --image=busybox -- \
  wget -qO- -T 3 http://10.42.1.17:8080/
kubectl run tmp -n shop --rm -it --restart=Never --image=busybox -- \
  wget -qO- -T 3 http://web.shop.svc.cluster.local/
Red flag to avoid:

Blaming the network plugin or restarting kube-proxy before checking labels, endpoints and ports.

They may ask next:
  • Endpoints look right and the pod IP works, but calls from one namespace still fail. What do you suspect?
  • How would you check DNS resolution from inside the cluster?
Say it in 60 seconds
Hard Situational round Mid-level, Senior Practice question

27. A release is halfway through rolling out and error rates start climbing. What do you do in the next ten minutes?

What the interviewer is really testing:
Whether you protect users first under pressure, and then turn the incident into a safer release process.
Answer frame:

Stop the harm: roll back first, investigate second.

Confirm the link: check whether errors come only from new-version pods.

Communicate: say in the incident channel what you did and what you are watching.

Learn: find out why readiness checks or the pipeline didn't catch it.

Sample spoken answer:

"My first move is to stop the damage, not to understand it. If the timing lines up with the rollout, I run kubectl rollout undo on that Deployment straight away. It's cheap and reversible; if the release turns out not to be the cause, we roll forward again later. While it rolls back I check whether the errors come only from new-version pods, using the version label in our metrics or logs, and I post in the incident channel what I did and what I'm watching. Once errors are back to normal, I look at why this got through. Usually the readiness probe said the new pods were fine while they were failing real requests, or the release depended on a config or database change that wasn't in place. Then I close the gap, for example with a better readiness check or a canary step that watches error rates before the rollout continues."

Red flag to avoid:

Debugging live for half an hour while users see errors, or quietly rolling back without telling anyone.

They may ask next:
  • What if the release included a database migration that the old version can't work with?
  • How would you set up rollouts so they stop by themselves when errors rise?
Say it in 60 seconds

Real Work 3 questions

Hard Behavioral round Mid-level, Senior Practice question

28. Tell me about a production incident on Kubernetes that you helped resolve. How did you find the root cause?

What the interviewer is really testing:
Whether you have real hands-on debugging experience, can explain it clearly, and changed something afterwards so it would not happen again.
Answer frame:

Situation: the service, what users saw, and your role.

Investigation: the commands and signals that narrowed it down, including dead ends.

Fix and follow-through: the immediate fix, then the lasting change: alerts, limits, probes or a runbook.

Sample spoken answer:

"At my last company our checkout API started returning errors every few minutes after a routine release. The pods said Running, but the restart count kept climbing. kubectl describe showed the containers were being OOMKilled. The new version had added an in-memory cache, and under real traffic memory crept past the 512 megabyte limit. It got worse because every restart emptied the cache, so the fresh pod was hammered with cache misses. I rolled back first to stop the damage, which took about two minutes. Then we load-tested the new version in staging, capped the cache size in the app, and set the memory request and limit from what we actually measured. Afterwards I added alerts on container restarts and on memory close to the limit, so next time we'd see it before customers did."

Red flag to avoid:

A story with no specific signal or command in it, where the fix was restarting things until the problem went away.

They may ask next:
  • Why did you roll back before finding the cause rather than after?
  • What would you change in the release process so this is caught earlier?
Say it in 60 seconds
Medium Behavioral round Mid-level, Senior Practice question

29. Tell me about moving an application onto Kubernetes. What did you have to change in the app itself?

What the interviewer is really testing:
Whether you understand that Kubernetes asks things of the application, not only of whoever writes the YAML.
Answer frame:

Starting point: how the app ran before and why it moved.

App changes: config from the environment, logs to stdout, health endpoints, clean shutdown, no local state.

Result: what got better, and one thing you'd do differently.

Sample spoken answer:

"In my last role I helped move a reporting service from two long-lived virtual machines onto our cluster. Building the image was the easy part; the real work was in the app. It read settings from a file on disk, so we moved them to environment variables from a ConfigMap, with passwords in Secrets. It wrote logs to a local file that would vanish with the pod, so we switched to standard output for the log collector. It saved generated reports on local disk, which breaks as soon as you have two replicas, so we moved them to object storage. We added a readiness endpoint and handled SIGTERM properly, so it finished in-flight requests before shutting down during rollouts. Afterwards deploys went from a manual evening job to a routine daytime rollout. What I'd do differently is measure real usage for requests earlier; our first guesses wasted a lot of capacity."

Red flag to avoid:

Treating the move as only writing YAML, with no change to how the app handles config, logs, state or shutdown.

They may ask next:
  • What happens to in-flight requests if the app ignores SIGTERM during a rolling update?
  • How did you decide which settings went into ConfigMaps and which into Secrets?
Say it in 60 seconds
Medium Behavioral round Mid-level, Senior Practice question

30. Tell me about a time you tuned resource requests and limits for a service. What did you measure, and what changed?

What the interviewer is really testing:
Whether you set resources from evidence and understand the trade-off between stability and wasted cluster capacity.
Answer frame:

Problem: throttling, OOM kills, Pending pods or wasted capacity.

Measurement: real usage over normal and peak periods, not guesses.

Change and result: the new values, how you rolled them out, and the effect on stability and node count.

Sample spoken answer:

"On a previous team our search service had latency spikes, but CPU usage on the dashboards looked low. When I checked the container throttling metrics, it was being throttled heavily. It had a CPU limit of half a core, and although its average use was low, it burst hard for short moments on every request, and the limit clipped those bursts. At the same time its memory request was four times what it ever used, so nodes looked full while being half empty. I pulled two weeks of usage, including our busiest day, set the CPU request near the typical peak, removed the CPU limit for that service after agreeing it with the platform team, and cut the memory request to real usage plus headroom while keeping a memory limit. The latency spikes stopped, and the same pods fitted on noticeably fewer nodes."

Red flag to avoid:

Picking requests and limits by copying another service or guessing, and never looking at throttling or OOM events.

They may ask next:
  • Why is average CPU usage a misleading number when you set limits?
  • What risk do you take on by removing a CPU limit, and how do you contain it?
Say it in 60 seconds
Were you asked something else? Share it A person checks every question before it goes on the site. No name is shown.
For the call itself

The questions above are the prep. The call has ten more.

ClapAssist is an AI interview assistant for Mac and Windows. It listens to the interview on your computer and shows you what to say, in short lines you can read while you talk. Your resume and notes are never stored on our servers. It stays out of screen share on every plan; only you can see it.

Download ClapAssist with 10 free minutes
Mac and Windows · Stays out of screen share · No card