Kubernetes Architecture Interview Questions

Reviewed by Mark Dickie · Last updated

Kubernetes architecture is the set of components that together manage containerized workloads across a cluster of machines. At its core, a Kubernetes cluster has a control plane that makes global decisions and one or more worker nodes that run the actual pods. The control plane relies on etcd as its single source of truth for cluster state, while the kubelet on each node ensures pods stay healthy and match their desired spec. Interviewers test whether you can name these components, explain how they communicate, and reason about what happens when one of them fails.

ComponentLives OnRole
kube-apiserverControl planeExposes the Kubernetes API; all components talk to it, not to each other
etcdControl planeDistributed key-value store holding the entire cluster state
kube-schedulerControl planeAssigns pods to nodes based on resources, affinity, and taints
kube-controller-managerControl planeRuns controllers like the node, replica, and endpoint controllers
kubeletWorker nodeStarts, stops, and monitors pods; reports status back to the API
kube-proxyWorker nodeMaintains network rules for service routing on the node

What does a Kubernetes interview test about architecture?

A typical interview probes your understanding of the request path and the failure path. You should be able to walk through what happens when a user runs kubectl create: the request hits the API server, gets persisted to etcd, the scheduler picks a node, and the kubelet on that node receives the pod spec and starts the containers. Interviewers also like to ask what breaks when a control-plane component goes down versus when a worker node fails.

  1. Trace the lifecycle of a pod from kubectl apply to a running container on a node.
  2. Explain why etcd is the only stateful component and what happens if it loses quorum.
  3. Describe how the scheduler chooses a node, touching resource requests, node selectors, and taints/tolerations.
  4. Compare what the kubelet does when a pod crashes versus when the API server is unreachable.
  5. Identify which control-plane components can be run with multiple replicas for high availability and which cannot.

How do control-plane and worker-node components communicate?

Every component talks to the kube-apiserver. There is no direct communication between the scheduler and the kubelet, or between two controllers. The API server fronts etcd, and all reads and writes go through it. This single-entry-point design simplifies authentication, authorization, and admission control. When the API server is down, the cluster stops accepting new changes, but already-running pods on worker nodes keep going because the kubelet continues to operate independently.

Key facts

  • Tarmac has 37 Kubernetes interview questions on this topic, 10 of them on this page, at difficulty 1–4 of 5.
  • Tarmac last reviewed these Kubernetes interview questions on 10 August 2026.

At a glance

Questions10 shown · 37 in the bank
Difficulty1–4 of 5
FormatsMultiple answer, Ordering, Multiple choice, Flashcard, Fill in the blank, Design exercise

What you'll review

  1. api server
  2. etcd
  3. kubelet
  4. kube proxy

Practice questions

Try one before you open the answer. Pick an option and press Check; it's marked on the spot.

Kubernetes/k8s-architecture/api-server

Which of the following statements about the Kubernetes API server are true?#

Options

Pick every one that applies.

Show answer

True statements about the Kubernetes API server are: it is the only control plane component that reads from and writes to etcd directly; it validates and persists the desired state of Kubernetes objects; and it exposes the Kubernetes API over HTTP/HTTPS for clients like kubectl. The API server does not schedule pods onto nodes — that is the kube-scheduler's job.

Why:

The API server is the front-end of the Kubernetes control plane. It is the sole component that communicates directly with etcd (option a), and it validates, authenticates, and persists the desired state of API objects (option b). It also serves the Kubernetes API over HTTP/HTTPS (option d). Option c is false: node selection for pods is the responsibility of the kube-scheduler, not the API server.

Kubernetes/k8s-architecture/api-server

Order the stages that the Kubernetes API server applies to an incoming request to create a new Pod, from first to last.#

Put these in order

Show answer

The Kubernetes API server processes a create request in this order: authenticate the client, then authorize against RBAC, then run mutating admission controllers, then run validating admission controllers, and finally persist the object to etcd. Mutating controllers run before validating controllers so that any changes they make are visible to the validators that follow.

Why:

Every create request entering the API server passes through a fixed pipeline. First the client is authenticated (who are you?), then the request is authorized against RBAC (are you allowed to do this?). Next, mutating admission controllers run and may modify the object, followed by validating admission controllers that accept or reject it. Only after all admission checks pass does the API server write the object to etcd. Mutating controllers always run before validating controllers so that mutations are visible to the validators.

Kubernetes/k8s-architecture/api-server

Order the steps the Kubernetes API server takes when invoking a single mutating admission webhook during a CREATE request, from first to last.#

Put these in order

Show answer

The API server first serializes an AdmissionReview request to JSON, then sends it as an HTTPS POST to the webhook endpoint, then receives the AdmissionReview response with a JSON patch, then applies the patch to the in-flight object, and finally proceeds to the next admission controller in the chain. Each mutating webhook in the chain repeats this same sequence.

Why:

When a mutating admission webhook is reached in the pipeline, the API server builds an AdmissionReview object describing the incoming operation and serializes it to JSON. It then sends that payload as an HTTPS POST to the webhook service endpoint. The webhook processes the request and returns an AdmissionReview response whose response.patch field contains a base64-encoded JSON patch. The API server applies that patch to the object being created. After applying the patch, the API server moves on to the next admission controller in the configured chain, and the same sequence repeats for any remaining webhooks.

Kubernetes/k8s-architecture/etcd

Where does a Kubernetes cluster persist the authoritative state of every object (Deployments, Pods, Secrets, …)?#

Options

Show answer

Kubernetes persists the authoritative state of every object in etcd, a consistent distributed key-value store. The kube-apiserver is the only component that reads from and writes to etcd directly; every other component goes through the API server. Consequently an etcd backup is effectively a full cluster backup, and losing etcd without one means losing the cluster's desired state.

Why:

etcd is the single source of truth: a consistent, distributed key-value store that holds all cluster state. The kube-apiserver is the only component that talks to etcd directly; everything else reads and writes through the API server. This is why an etcd backup is a cluster backup, and why losing etcd without a backup means losing the cluster's desired state.

Kubernetes/k8s-architecture/kubelet

What is the kubelet and where does it run?#

Show answer

The kubelet is the node agent that runs on every worker node. It registers the node with the control plane, watches the API server for Pods assigned to its node, and drives the container runtime (via the CRI) to start, stop, and health-check those Pods' containers. It also reports node and Pod status back. It does not schedule Pods — it only runs the ones the scheduler placed on it.

Why:

The kubelet is the control plane's hands on each node: it makes the actual containers match the Pods assigned to the node. Separating 'kubelet runs Pods' from 'scheduler assigns Pods' is a common point of confusion.

Kubernetes/k8s-architecture/etcd

What role does etcd play in a Kubernetes cluster?#

Show answer

etcd is the cluster's backing store: a consistent, highly-available distributed key-value store that holds the entire cluster state (every object and its desired/observed status). The kube-apiserver is the only component that reads from and writes to etcd; everything else goes through the API server. Because it's the single source of truth, a regular etcd backup is effectively a full-cluster backup.

Why:

etcd is where 'desired state' physically lives. Knowing only the API server touches it — and that backing it up backs up the cluster — is core control-plane and disaster-recovery knowledge.

Kubernetes/k8s-architecture/api-server

The Kubernetes API server (kube-apiserver) is the central management entity of the control plane. It validates and configures API objects such as pods, services, and controllers, and it is the only control-plane component that communicates directly with the cluster's backing data store, _____. Every other component — the scheduler, controller-manager, and each kubelet — reads and writes cluster state exclusively through REST calls to the API server, which in turn persists that state into _____.#

Show answer

The Kubernetes API server (kube-apiserver) is the central management entity of the control plane. It validates and configures API objects such as pods, services, and controllers, and it is the only control-plane component that communicates directly with the cluster's backing data store, etcd. Every other component — the scheduler, controller-manager, and each kubelet — reads and writes cluster state exclusively through REST calls to the API server, which in turn persists that state into etcd.

Why:

The kube-apiserver acts as the single gateway to the cluster's state. It is the sole component with a direct connection to etcd, the distributed key-value store that holds all persistent cluster data. All other control-plane components and nodes interact with cluster state by issuing API calls to the API server, which performs admission, validation, and serialization before writing to etcd. This design centralizes access control, audit logging, and schema enforcement.

Kubernetes/k8s-architecture/kube-proxy

On each node, what is kube-proxy responsible for?#

Options

Show answer

kube-proxy runs on every node and implements Service networking: it programs iptables or IPVS rules (or coordinates with the CNI) so that traffic sent to a Service's stable ClusterIP is load-balanced to one of its healthy backend Pods. It does not schedule Pods (the scheduler), pull images (the kubelet and runtime), or relay kubectl commands (those hit the API server directly).

Why:

kube-proxy programs each node's networking (iptables or IPVS rules, or hands off to a CNI doing the same) so that traffic to a Service's stable ClusterIP is load-balanced to a healthy backend Pod. Scheduling is the kube-scheduler's job, image pulls are the kubelet/runtime's, and kubectl talks to the API server directly. When Service traffic mysteriously doesn't reach Pods, kube-proxy and the CNI are where you look.

Kubernetes/k8s-architecture/api-server

You are designing an admission control system for a large Kubernetes platform serving 200 internal teams. The platform team needs to enforce three policies cluster-wide:#

Show answer

I would create three separate webhook configurations, each scoped tightly to its resource type.

Resource requests (MutatingWebhookConfiguration): A mutating webhook scoped to pods with a namespaceSelector that excludes system namespaces. It defaults missing CPU/memory requests and limits to team-specific baseline values. Because it mutates the object, it must run in the mutating phase. I set its webhook name so it runs early in the mutating chain (before any other webhook that might read resource values).

TLS certificate validation (ValidatingWebhookConfiguration): A validating webhook scoped to ingresses that checks the referenced TLS secret or cert ARN against the ConfigMap of approved certificates. This is pure enforcement — no mutation — so it belongs in the validating phase. failurePolicy: Fail and timeoutSeconds: 3: if the webhook is unavailable, the Ingress creation is rejected rather than allowing an ingress with an unapproved certificate. The trade-off is that a webhook outage blocks all Ingress writes, which is acceptable because an unapproved TLS cert is a security violation.

Namespace labels (ValidatingWebhookConfiguration): A validating webhook scoped to namespaces that rejects Namespace creation or update if mandatory labels are missing. Again failurePolicy: Fail with a short timeout.

Ordering: MutatingWebhookConfiguration always runs before ValidatingWebhookConfiguration in the API server admission chain, so the resource-request defaults are applied before any validating webhook sees the Pod. Within the mutating phase, webhooks are ordered by name; I prefix names accordingly.

Scalability: Each webhook backend runs as a Deployment with HPA behind a ClusterIP Service. Because admission is synchronous — the API server blocks the original request until all webhooks return — webhook latency directly caps API throughput. I configure keep-alive connections between the API server and webhook backends, co-locate backends on nodes close to API servers, and set aggressive timeoutSeconds (2–3s) so a slow webhook degrades rather than hangs. I also instrument webhook latency histograms and alert if p99 exceeds 100ms.

Why:

This design exercise tests senior-level understanding of the API server admission chain: the two-phase (mutating then validating) ordering, per-webhook scoping via rules and namespaceSelector, failurePolicy trade-offs, and the synchronous latency coupling between webhooks and API throughput.

Kubernetes/k8s-architecture/api-server

You are building a custom Kubernetes controller that watches a CRD called DataPipeline and reconciles downstream resources (Deployments, ConfigMaps, Jobs). The controller must react to changes within seconds, must never act on stale data, and must survive API server restarts and network partitions without missing events.#

Show answer

The controller uses the client-go shared informer pattern: one SharedInformer per resource type (DataPipeline, Deployment, ConfigMap, Job).

List+Watch with resourceVersion: On startup each informer issues an initial List against the API server to seed its local store (cache). The List response includes a resourceVersion — an opaque string representing a point in the etcd revision history. The informer then opens a Watch from that resourceVersion, receiving ADDED/MODIFIED/DELETED events for all subsequent changes. The resourceVersion is the consistency token: the API server uses it to determine whether the client's view is current enough to stream incremental events.

Reconnect and 410 Gone: If the Watch connection drops or times out, the informer attempts to re-establish the Watch from the last-seen resourceVersion. If the API server returns HTTP 410 Gone — meaning the requested resourceVersion has been compacted away because too much history has elapsed — the informer performs a full re-list to get a fresh resourceVersion and reseeds the local store. This is critical: after a network partition lasting minutes, the etcd history compaction window may have passed, so resuming from the old resourceVersion would silently miss events. The 410 forces a safe re-list.

Level-triggered reconciliation: The informer's event handlers do not perform reconciliation directly. Instead, each handler enqueues the object's key (namespace/name) onto a work queue. The reconcile loop dequeues a key, reads the current desired state (from the DataPipeline cache) and current actual state (from the Deployment/ConfigMap/Job caches), and makes whatever changes are needed. Because reconciliation compares current state — not the event payload — the system is level-triggered. A missed event is corrected on the next resync or the next related event that enqueues the same key. Duplicated events are harmless because reconciliation is idempotent.

Restart recovery and resync: On controller restart, the in-memory cache is empty. Each informer starts fresh with a full List, rebuilding the cache from the API server's current state. No persistent local state is required — the API server is the source of truth. Additionally, the shared informer has a configurable resync period (e.g., 10 minutes) that periodically re-enqueues every cached object's key into the work queue. This acts as a safety net: even if an event was somehow missed (e.g., a brief watch gap that didn't trigger 410), the next resync re-examines the object and reconciles any drift.

Why:

This design exercise probes deep understanding of the API server's List+Watch consistency model: resourceVersion as a consistency token, 410 Gone forcing re-list after compaction, level-triggered reconciliation via work queues, and restart recovery via re-list plus periodic resync.

Related interview questions

The other 27 questions

This page shows 10 and marks what you pick. That's as far as a page can go. A free account opens the other 27 and keeps every answer. What you miss comes back until it's right: after a day, then at longer gaps.

Start with this topic

Free · the whole bank · 100 marked answers per 30 days · written feedback on the paid plan

What moved, monthly

One email a month when the bulletin comes out: what moved in the markets we track, and the new question topics we published. Confirm your address to join. Unsubscribe any time.