KCNA Mock Exam · Set 2 — 50 questions, one clock, four domains
This is the second of this course's two full KCNA sittings, built to the exact same shape as Set 1 so the two scores are directly comparable: 50 multiple-choice questions, weighted 22 / 14 / 8 / 6 to the real exam's four official domains — Kubernetes Fundamentals, Container Orchestration, Cloud Native Application Delivery, and Cloud Native Architecture — against one unbroken 90-minute block, closed-book. Every question below is new; none of the fifty repeats a stem, an option list, or an answer from Set 1, though a fair number circle back to the same underlying facts in different words — Kubernetes Fundamentals alone is 44% of the real exam, and there simply isn't two papers' worth of genuinely distinct propositions in "what does the control plane do." Work straight through without opening a second tab, then check every answer against the explanation folded behind each domain's answer key. If Set 1 already found your weak domains, this sitting is where you find out whether the fix actually took.
Set 1 was the theory test the first time through — new material, new nerves. Set 2 is the same theory test weeks later, with a different examiner asking about the exact same road rules in different words. If you remember the specific question from before, that's not really knowledge, it's memory of a multiple-choice test — the real skill is recognizing the same underlying rule wearing different clothes. Get through this paper as confidently as the first one, on facts you can restate in your own words rather than options you vaguely recognize, and you're actually ready — not just ready for this particular fifty questions.
Where this sitting fits your prep
☺ Like you're 10: This isn't a fresh start — it's stage four of the same loop Set 1 set up: learn, sit, fix, sit again.
If you haven't sat Set 1 yet, sit that one first — this page assumes you have, and is calibrated as the confirmation rep, not the diagnostic one.
| Stage | What you do | What it tells you |
|---|---|---|
| 1 · Build fluency | Read the KCNA blueprint and work through the study plan & practice bank until none of the terms below are unfamiliar. | Whether you know the material at all — untimed. |
| 2 · Sit Set 1 | Set 1 — one 90-minute block, closed-book, 50 questions, no pausing. | Your baseline recall and pacing under a clock, by domain. |
| 3 · Fix gaps | Re-read only the domain sections you dropped marks in, then drill the practice bank and flashcards for those topics specifically. | Converts a diagnosis into targeted revision instead of a full re-read. |
| 4 · Sit Set 2 (you are here) | This page. A fresh 50-question paper, same domain split, closer to your real exam date. | Whether the fix actually held, on questions you haven't already seen the answer to. |
Exam conditions for this sitting
☺ Like you're 10: Same rules as last time — one clock, closed book, and no peeking at an answer before you've actually chosen one.
The conditions haven't moved since Set 1, because the real exam's conditions don't move either. One timer, started once, 90 minutes — the real KCNA's published duration, per the Linux Foundation's own Multiple Choice Exam FAQ. Closed-book — no reference material at all. Unlike this course's CKA and CKAD mocks, which open a documentation tab inside their exam environment, KCNA gives you nothing. Answer every question once, in order; multiple choice carries no time cost to revisiting a flagged question, but never leave one blank on a guess-penalty-free exam. No peeking at an answer key before you've committed — the entire diagnostic value of a second sitting depends on it measuring what you actually know today, not what you remember reading five minutes ago.
| Item | This paper | The real KCNA |
|---|---|---|
| Duration | 90 minutes | 90 minutes (published) |
| Question count | 50, exact-fit to the domain weights | Not officially published; "~60" is a reported pattern only |
| Format | Closed-book, multiple choice, single best answer | Closed-book, multiple choice, online, remote-proctored |
| Pass mark | Scored against 75%, i.e. 38 of 50 | 75% or above, per the LF's own Multiple Choice Exam FAQ |
This is an independent, unofficial study resource — not affiliated with or endorsed by the CNCF or the Linux Foundation. Duration and pass mark are two figures the Linux Foundation states plainly and this page quotes directly; price, exact question count, retake policy, eligibility window and certification validity all change, and none of them are stated with confidence here. Confirm every current detail on the official Linux Foundation KCNA page and the CNCF certification page before you pay, and read the candidate handbook in your LF portal end to end. If anything here ever disagrees with those pages, they are right and this page is stale. Full logistics live on the exam-day & proctoring page and the course's certifications hub.
How the 50 questions are weighted
☺ Like you're 10: Same split as Set 1, because the real exam's domain weights don't change between sittings either.
The domain math is identical to Set 1's, because it's the CNCF's math, not this course's: the four official weights — 44, 28, 16, and 12 — sum to exactly 100% straight from the KCNA curriculum, and every one is a multiple of 4. That's why 50 questions works so cleanly: 44% of 50 is 22.0, 28% is 14.0, 16% is 8.0, and 12% is 6.0 — four whole numbers, no rounding decisions anywhere, summing to exactly 50. Kubernetes Fundamentals and Container Orchestration together are still 72% of this paper, exactly as they were on Set 1 — if your first sitting's domain breakdown showed weakness in either one, this is the sitting that finds out whether it's actually fixed.
🦉 Domain 1 — Kubernetes Fundamentals (44% · Q1–22)
☺ Like you're 10: Same clubhouse as Set 1 — who's in charge of what, which rooms exist, and the rules for getting a chore actually done — asked from a different angle this time.
Fundamentals covers four official competencies: Kubernetes Core Concepts (Q1–9), Administration (Q10–14), Scheduling (Q15–19), and Containerization (Q20–22). A few of this domain's questions below cover ground Set 1 never touched at all — ResourceQuota, LimitRange, and the three distinct taint effects — so don't assume a strong Set 1 Domain 1 score means there's nothing left to check here. Background: the KCNA blueprint and Kubernetes architecture.
apiVersion: apps/v1
kind: DaemonSet # one Pod per matching node, not a fixed replica count
metadata: { name: node-exporter, namespace: monitoring }
spec:
selector:
matchLabels: { app: node-exporter }
template:
metadata:
labels: { app: node-exporter }
spec:
tolerations:
- operator: Exists # tolerate every taint, so it still lands on every node
containers:
- name: node-exporter
image: prom/node-exporter:v1.8.2
resources:
requests: { cpu: "50m", memory: "64Mi" }
limits: { cpu: "200m", memory: "128Mi" }
---
apiVersion: v1
kind: LimitRange # fills in a default request/limit for any container that omits one
metadata: { name: default-limits, namespace: monitoring }
spec:
limits:
- type: Container
defaultRequest: { cpu: "50m", memory: "64Mi" }
default: { cpu: "200m", memory: "128Mi" }How does the control plane actually learn that a node has stopped responding?
- An administrator has to mark it manually
- The kubelet on that node stops renewing its heartbeat (via a Node Lease object), and once enough of those are missed the node is marked NotReady
- etcd polls every node's IP directly every second
- It doesn't — nodes are assumed healthy until a Pod on them fails
Every object you create with
kubectlultimately becomes a record in etcd. Which single component is the only one ever allowed to read or write that record?- kubelet
- kube-scheduler
- kube-apiserver
- Any control-plane component, as long as it has the right certificate
A newly created Pod has no
nodeNameset yet and its status isPending. What has to happen before it can move toRunning?- The kubelet on every node has to vote
- kube-scheduler has to find a node that satisfies its constraints and assign it there
- The Pod has to be manually bound with
kubectl bindby a human - Nothing — Pending Pods start automatically after 30 seconds
If
kube-controller-managerstopped running entirely, what would you actually observe?- Every currently running Pod would be killed immediately
- Existing Pods would keep running, but a ReplicaSet whose Pod count dropped below its target would stop self-healing — nothing would replace the missing Pods
- The API server would refuse all new requests
- Nothing — controller-manager has no observable effect on the cluster
What is a static Pod?
- A Pod with its replica count fixed and unable to autoscale
- A Pod defined by a manifest file that one node's kubelet reads directly from local disk, rather than one managed via the API server — the mechanism
kubeadmuses for the control-plane components themselves - A Pod that has finished all its readiness probes
- A synonym for a DaemonSet Pod
If you inspect a running Deployment's Pods, which intermediate controller object will you find sitting between the Deployment and the Pods themselves?
- A StatefulSet
- A ReplicaSet
- A Job
- Nothing — a Deployment owns its Pods directly
You need exactly one logging-agent Pod on every node, current and future, with no fixed replica count to manage. Which workload object is built for that?
- Deployment
- StatefulSet
- DaemonSet
- Job
Which workload object numbers its Pods predictably (
db-0,db-1...) and gives each one its own PersistentVolumeClaim that follows it across a reschedule?- Deployment
- DaemonSet
- StatefulSet
- ReplicaSet
A one-off database migration script needs to run to completion exactly once and then stop — not on a schedule, not repeatedly. Which object is correct?
- CronJob
- Job
- Deployment
- DaemonSet
You want a command that's safe to run twice in a row on the same file — creating the object if it's missing, updating it in place if it already exists. Which is it?
kubectl create -fkubectl apply -fkubectl replace -fkubectl edit
A platform team wants permissions that work identically no matter which Namespace they're eventually granted in — fully reusable, defined once. Which RBAC object should they define?
- A Role, copy-pasted into every Namespace
- A ClusterRole, which can then be bound per-namespace with a RoleBinding, or cluster-wide with a ClusterRoleBinding
- A ServiceAccount
- A NetworkPolicy
You create a Role granting
geton Pods and confirm it exists withkubectl get roles. A user still receivesForbiddenwhen they try. What's missing?- Nothing should be missing — the Role alone should be enough
- A RoleBinding (or ClusterRoleBinding) actually binding that Role to the user
- The Role needs a matching NetworkPolicy
- The user needs a new kubeconfig context
What does a
ResourceQuotaobject do?- Sets a default CPU/memory request and limit for any container that omits one
- Caps the total resource consumption allowed across every object in one Namespace — for example, a hard ceiling on total memory requested
- Restricts which container images a Pod is allowed to use
- Limits how many nodes a cluster can have
What does a
LimitRangedo that aResourceQuotadoes not?- It caps the Namespace's aggregate resource usage
- It sets a default (and optionally a min/max) request and limit applied per individual object, so a container that specifies neither still gets a sane value
- It replaces the need for RBAC entirely
- It's simply a deprecated alias for ResourceQuota
Which of these does
kube-scheduleractually consult when choosing a node for a new Pod?- The container's image size
- The Pod's
resources.requestsfor CPU and memory - The Pod's log verbosity level
- The container's
limits.memoryvalue only
What is the one thing a Pod's toleration for a node's taint can never do by itself?
- Allow the Pod to be scheduled there despite the taint
- Attract the Pod toward that specific node over any other untainted, eligible node
- Be combined with node affinity for a stronger pinning effect
- Match a taint's key, value, and effect exactly
A container hits its CPU limit versus its memory limit. What's the actual difference in what Kubernetes does in each case?
- Both result in the container being killed immediately
- Exceeding the CPU limit throttles the container, which keeps running more slowly; exceeding the memory limit gets it OOMKilled by the kernel
- Both are purely advisory and enforce nothing
- Exceeding either limit reschedules the Pod onto a bigger node automatically
Which scheduling mechanism supports set-based expressions like
In,NotIn, andExistsagainst node labels — something a plainnodeSelectorcannot do?- A taint
- Node affinity
- A ResourceQuota
- A toleration
Of the three taint effects —
NoSchedule,PreferNoSchedule, andNoExecute— which one actively evicts Pods already running on the node that don't tolerate it?NoSchedulePreferNoScheduleNoExecute- None of the three — taints only ever block new Pods
An image built with one vendor's tooling runs correctly under a completely different vendor's container runtime. What makes that possible?
- Every runtime happens to be built by the same handful of companies
- Compliance with the OCI's open image-spec and runtime-spec, which standardize image format and runtime behavior across vendors
- Kubernetes translates every image at pull time
- It isn't actually possible — images are runtime-specific
Why can a single host typically run far more containers than virtual machines?
- Containers use less disk space on average
- Containers share the host's own kernel instead of each booting a full guest operating system, which removes most of a VM's per-instance overhead
- Containers are not actually isolated from each other
- VMs require more network bandwidth per instance
The kubelet needs to start a container, but it never speaks a vendor-specific API to do it. What standard interface does it use instead?
- CNI
- CSI
- CRI
- OCI, directly
Answer key & explanations — Domain 1 (Q1–22)
- B — missed heartbeats via the Node Lease. Each kubelet renews a lightweight Lease object on a regular interval; once enough renewals are missed, the node controller marks the node
NotReadyand eventually starts evicting its Pods. - C — kube-apiserver. Every other component, including the scheduler and every controller, reads and writes cluster state only through the API server — it's the sole gateway to etcd, with no exceptions for "the right certificate."
- B — kube-scheduler assigns it. A Pod stays
Pendingwith nonodeNameuntil the scheduler finds a node satisfying its requests and constraints and binds it there. - B — self-healing stops, nothing else breaks immediately. Existing Pods are unaffected — they're managed by the kubelet, not the controller-manager — but the reconciliation loops that would normally recreate a missing replica simply stop running.
- B — a manifest the kubelet reads from local disk. Static Pods bypass the API server entirely for their lifecycle, which is exactly why
kubeadmcan bootstrapetcd,kube-apiserver,kube-scheduler, andkube-controller-managerthis way even before the API server is fully up. - B — a ReplicaSet. The Deployment creates and owns a ReplicaSet, and the ReplicaSet is what actually maintains the replica count; the Deployment layer itself adds rollout history and rollback.
- C — DaemonSet. It grows and shrinks automatically as nodes join or leave the cluster, with no fixed replica count to manage by hand.
- C — StatefulSet. Predictable ordinal naming and a per-replica PersistentVolumeClaim that survives rescheduling are StatefulSet's two defining guarantees.
- B — Job. Jobs run Pods to completion, once or a fixed number of times; a CronJob would just wrap this in a schedule the task doesn't need.
- B —
kubectl apply -f. It's the declarative, repeatable command — safe to run against the same file twice — wherecreateis imperative and errors on an object that already exists. - B — a ClusterRole. Its rules are defined once and reused, either bound per-namespace with ordinary RoleBindings or cluster-wide with a ClusterRoleBinding — a plain Role has to be recreated in every Namespace that needs it.
- B — a binding. A Role by itself grants nothing to anyone; RBAC is default-deny until a RoleBinding or ClusterRoleBinding actually attaches the Role to a subject.
- B — caps aggregate Namespace usage. A ResourceQuota is a Namespace-wide ceiling — for example, no more than 10 CPU cores requested in total across every Pod in that Namespace — not a per-object setting.
- B — fills in a default per object. A LimitRange is what actually gives a container sensible
requests/limitswhen its own spec left them blank; a ResourceQuota only caps the Namespace-wide total and has no opinion about any single container. - B —
resources.requests. The scheduler only ever looks at requests when deciding whether a node has room for a Pod;limitsmatter to the kernel at runtime, not to placement. - B — attract the Pod toward that node. A toleration only cancels a taint's repulsion for one Pod — it never pulls that Pod toward the node over any other eligible one. Pinning it there specifically needs node affinity added on top.
- B — throttle vs. OOMKilled. CPU limits are a soft ceiling the kernel enforces by slowing the process down; memory limits are hard — exceed one and the kernel's OOM killer terminates the container outright.
- B — node affinity. A plain
nodeSelectoronly supports flat equality matches; affinity'smatchExpressionsaddIn,NotIn,Existsand more, plus soft-preference variants a nodeSelector can't express at all. - C —
NoExecute.NoScheduleblocks new Pods only;PreferNoScheduleis a soft version of the same; onlyNoExecutealso evicts Pods already running on the node without a matching toleration. - B — the OCI specs. The OCI's image-spec and runtime-spec are open, vendor-neutral standards precisely so an image and a runtime from unrelated vendors interoperate correctly.
- B — a shared kernel. Containers are isolated processes on the host's own kernel; a VM instead virtualizes hardware and boots an entirely separate guest kernel, which is where nearly all of a VM's extra overhead comes from.
- C — CRI. The Container Runtime Interface is what lets the kubelet stay runtime-agnostic — swap the runtime underneath (containerd, CRI-O) and the kubelet's own interface to it never has to change.
📦 Domain 2 — Container Orchestration (28% · Q23–36)
☺ Like you're 10: The clubhouse's phone system, its front door, its locks, and what to do the moment something inside starts acting strange — same territory as Set 1, different specific questions about it.
Orchestration covers four competencies: Networking (Q23–26), Security (Q27–30), Troubleshooting (Q31–33), and Storage (Q34–36). A few facts here — the default ServiceAccount fallback, mutating vs. validating admission, reclaim policy, ReadWriteMany — go a layer deeper than Set 1 asked. Background: the KCNA blueprint, networking & the CNI, and storage & the CSI.
What must be true of every Pod's IP address in a conformant Kubernetes cluster, regardless of which CNI plugin is installed?
- It's only reachable from Pods on the same node
- It's routable and reachable from every other Pod in the cluster, with no NAT required
- It changes every time the Pod is scaled
- It's shared with every other Pod in the same Namespace
Which Service type requires integration with an external cloud provider to actually provision anything, and simply behaves like a plain NodePort without one?
- ClusterIP
- NodePort
- LoadBalancer
- ExternalName
What can an Ingress do that a Service's own built-in load balancing alone cannot?
- Encrypt traffic between Pods automatically
- Route by hostname and URL path — layer-7 rules that send external traffic to different backend Services from one shared entry point
- Provide storage for stateless applications
- Automatically scale the number of Pod replicas
What is the standard DNS name pattern a Pod can use to reach a Service named
apiin Namespaceshop, without hardcoding an IP address?shop-api.internalapi.shop.svc.cluster.localapi.cluster.shop.local- Services have no predictable DNS name
A request reaches the API server carrying an expired client certificate. At which stage of the request pipeline does it get rejected?
- Authorization, after the identity is already accepted
- Authentication — it never gets far enough to have an identity for authorization to evaluate
- Admission control, at the very end of the pipeline
- It's silently accepted and logged as anonymous
Given that Secrets are only base64-encoded by default, what's the standard way to actually get encryption at rest for their contents?
- Nothing can be done; Secrets can never be encrypted
- Configure an
EncryptionConfigurationfor etcd (or use an external secret store), since it isn't the default behavior - Rename the Secret object to
encrypted-secret - Base64-encode the value a second time
If a Pod's spec doesn't name a ServiceAccount at all, which identity does it use to authenticate to the API server?
- None — it can't make any API calls
- The cluster-admin identity, by default
- The
defaultServiceAccount of whichever Namespace the Pod runs in - The identity of whoever ran
kubectl apply
What's the difference between a mutating and a validating admission webhook, and which runs first?
- They're the same thing under two names; order doesn't matter
- A mutating webhook can modify the incoming object and runs first; a validating webhook can only accept or reject it, and runs after
- Validating webhooks run first and can modify the object; mutating webhooks only reject
- Only one type is allowed to be configured per cluster
A container keeps starting and exiting in a repeating cycle, with Kubernetes waiting longer between each restart attempt. What's this status called, and is it one of the five true Pod phases?
CrashLoopBackOff; yes, it's a phaseCrashLoopBackOff; no — it's a container-level waiting-state reason, not a phaseFailed; yes, it's a phaseImagePullBackOff; no, it isn't a real status at all
A Pod can't be scheduled because no node currently has enough free CPU. Where does Kubernetes actually record that reason, since it never shows up in
kubectl logs?- It doesn't record a reason anywhere
- In the Pod's Events, visible via
kubectl describe pod - Only in the scheduler's own container logs, on the control-plane node
- In a dedicated
FailureReasonfield on the Node object
A container's state is reported as
Waiting, distinct fromRunningorTerminated. What doesWaitingmean?- The container ran successfully and exited on its own
- The container hasn't started yet — commonly still pulling its image, or blocked behind an init container
- The container is running but paused by the kubelet
- The Pod has been deleted but the container hasn't noticed
A PVC is deleted. Its PersistentVolume was created with
reclaimPolicy: Retain. What happens to the underlying storage?- It's deleted immediately, along with the PVC
- The PV moves to a
Releasedstate and the storage is preserved — an administrator has to handle it manually - It's automatically reused by the next PVC that asks for the same size
- Retain has no actual effect on deletion behavior
Which access mode allows the same volume to be mounted read-write by multiple nodes at once — something a typical cloud block disk cannot do, but a shared filesystem like NFS can?
- ReadWriteOnce (RWO)
- ReadOnlyMany (ROX)
- ReadWriteMany (RWX)
- None — no access mode allows this
What happens to an
emptyDirvolume's contents when its Pod is deleted?- They persist and can be reattached to a future Pod
- They're deleted permanently along with the Pod — its lifetime is tied to the Pod, not the node
- They're automatically uploaded to the configured StorageClass
- They survive as long as the node itself stays up
Answer key & explanations — Domain 2 (Q23–36)
- B — routable, no NAT. Flat, NAT-free Pod-to-Pod connectivity is a foundational Kubernetes networking requirement every CNI plugin has to satisfy, whatever mechanism it uses underneath.
- C — LoadBalancer. Without a cloud provider integration to actually provision an external balancer, a LoadBalancer Service falls back to behaving like a plain NodePort — the port opens on every node regardless.
- B — host/path-based L7 routing. Ingress is Kubernetes' original layer-7 routing API, fanning traffic out to many backend Services by hostname or path from a single entry point — something a Service's own layer-4 balancing alone can't do.
- B —
api.shop.svc.cluster.local. CoreDNS resolves exactly this pattern —<service>.<namespace>.svc.<cluster-domain>— to the Service's ClusterIP, which is why Pods never need to hardcode one. - B — authentication. An invalid credential never establishes an identity in the first place, so the request is rejected before authorization or admission ever run — those stages assume a known identity already exists.
- B — configure encryption separately. Base64 is reversible by anyone with read access to the object; genuine confidentiality needs etcd encryption at rest (an
EncryptionConfiguration) or an external secret manager — neither is on by default. - C — the Namespace's
defaultServiceAccount. Every Pod authenticates as some ServiceAccount identity; if none is named explicitly, Kubernetes falls back to thedefaultServiceAccount that exists automatically in every Namespace. - B — mutating first, then validating. Mutating webhooks run first and can rewrite the incoming object (injecting a sidecar, for example); validating webhooks run afterward against the now-final object and can only accept or reject it, never change it.
- B — a waiting-state reason, not a phase. Kubernetes has exactly five true Pod phases — Pending, Running, Succeeded, Failed, Unknown.
CrashLoopBackOffis a container-level reason layered on top of one of those, most oftenRunningorPendingdepending on the moment observed — never a phase itself. - B — the Pod's Events. Scheduling failures, like every other "why didn't this happen" question, get reported as Events, which
kubectl describe podsurfaces directly —logsonly ever shows output from a container that has actually started. - B — not started yet.
Waitingcovers everything before a container is actually executing — pulling its image, waiting on an init container, or waiting on a backoff timer after a previous crash. - B —
Released, storage preserved.Retainis the whole point of choosing it: the PV isn't deleted or silently reused, it sits inReleaseduntil a human decides what happens to the data. - C — ReadWriteMany (RWX). RWX is the mode that genuinely supports concurrent read-write mounts from multiple nodes, typically backed by network file storage rather than a per-node block disk.
- B — deleted with the Pod. emptyDir is genuinely ephemeral scratch space; it's useful for sharing files between containers in the same Pod, and useless for anything that needs to outlive that Pod.
🚀 Domain 3 — Cloud Native Application Delivery (16% · Q37–44)
☺ Like you're 10: How new stuff actually gets into the clubhouse, and exactly which command to reach for the moment something you just moved in stops working right.
Delivery covers two competencies: Application Delivery (Q37–40) and Debugging (Q41–44). The debugging half still rewards knowing which command to reach for first over knowing every flag — but this set pushes a step past Set 1's plain command list into a couple of genuine nuances each command has. Background: GitOps on Kubernetes, Helm, and Kustomize.
# Not the current, running container — the one that already crashed
kubectl logs deploy/checkout -n shop -p
# Stream new lines as they're written, instead of one static snapshot
kubectl logs deploy/checkout -n shop -f
# rollout undo with no flag steps back exactly ONE revision — not necessarily the good one
kubectl rollout history deploy/checkout -n shop
kubectl rollout undo deploy/checkout -n shop --to-revision=2
# Sorted oldest-first, Events explain what logs never will: Pending, scheduling failures, evictions
kubectl get events -n shop --sort-by=.metadata.creationTimestampWhat security advantage does a pull-based GitOps model have over a traditional push-based CI/CD pipeline?
- Pull-based deployments happen faster, with no other real difference
- An agent running inside the cluster pulls from Git and applies changes itself, so cluster credentials never have to be handed to an external CI system
- Pull-based means no audit trail is kept
- There's no meaningful security difference between the two models
What does
helm upgradedo differently from simply re-runninghelm installagainst a changed chart?- Nothing — the two commands are interchangeable
upgradetracks the change as a new revision of an existing release and can be rolled back withhelm rollback; a fresh install has no continuity with anything before itupgradeonly works on StatefulSetsinstallsupports rollback, butupgradedoes not
A team wants identical base manifests for staging and production, differing only in replica count and one environment variable, with no templating language involved anywhere. Which tool is purpose-built for that?
- Helm, using its templating engine
- Kustomize, using template-free overlays and patches
- A raw shell script that finds-and-replaces text in the YAML
- etcd, directly
What is the default update strategy for a Kubernetes Deployment, and which two fields govern how aggressively it replaces old Pods?
- Recreate; it has no configurable fields
- RollingUpdate; governed by
maxSurgeandmaxUnavailable - Canary; governed by
trafficWeightandstepDuration - Blue/green; governed by
activeColorandstandbyColor
A Pod is
Runningand passing every probe, but the application inside is returning wrong data to real users. Which command actually helps diagnose this, and which one mostly won't?kubectl describehelps;kubectl logsdoesn'tkubectl logshelps, since it shows application output;kubectl describemostly won't, since it would just show a healthy object with nothing wrong to report- Neither command can help with application-level bugs
kubectl topis the only useful command here
What does the
--follow(-f) flag add tokubectl logs?- It shows logs from the previous, crashed container instead of the current one
- It streams new log lines continuously as they're written, instead of printing the current buffer once and exiting
- It follows the Pod if it gets rescheduled to a different node mid-command
- It filters logs down to error-level lines only
kubectl rollout undo deploy/appwith no flags reverts to which specific revision?- The very first revision the Deployment ever had
- The immediately preceding revision — not necessarily the last genuinely working one, if more than one bad revision has already rolled out since then
- Whichever revision has the most replicas currently
- It always asks interactively which revision to use
Why is sorting cluster Events by timestamp specifically useful when troubleshooting a Pod that failed hours ago?
- Events are always already sorted by default, so it changes nothing
- Events have a limited retention window and no guaranteed default order, so sorting is what actually surfaces the real sequence leading to the failure
- Sorting is required before
kubectl get eventswill return any results at all - Only sorted Events are visible to a non-admin user
Answer key & explanations — Domain 3 (Q37–44)
- B — credentials never leave the cluster. Flipping who initiates the connection is the entire point: the in-cluster agent reaches out to Git, rather than an external pipeline reaching in with cluster-admin-grade credentials of its own.
- B — release history and rollback. Helm tracks every
upgradeas a new revision of the same release, which is exactly what makeshelm rollbackpossible; a plain reinstall has no memory of what came before it. - B — Kustomize. Its base-plus-overlay model is deliberately template-free: valid, plain YAML at every layer, customized per environment with patches rather than variable substitution — the opposite philosophy from Helm's templating engine.
- B — RollingUpdate, via
maxSurge/maxUnavailable. RollingUpdate is the Deployment default; those two fields directly control how many extra Pods can exist during the rollout and how many can be unavailable at once. - B — logs helps, describe mostly won't. A healthy, passing Pod gives
describenothing wrong to report — the bug lives in application behavior, andlogsis the only one of the two that actually shows what the app is doing. - B — streams continuously.
-fkeeps the connection open and prints new lines as they arrive, rather than the default one-shot snapshot of whatever's already in the buffer. - B — exactly one revision back. A plain
rollout undoonly ever steps back once; if a second bad revision has already rolled out since the last known-good one, an undo with no flag lands you on the wrong one, and--to-revisionis required to target the actual good state. - B — no guaranteed order, limited retention. Events aren't necessarily returned in the order they happened and eventually age out entirely, so explicitly sorting by timestamp is what reconstructs the real sequence of what actually went wrong and when.
🗺️ Domain 4 — Cloud Native Architecture (12% · Q45–50)
☺ Like you're 10: The widest reading and the smallest slice of the test — the ecosystem the clubhouse sits inside, not the clubhouse itself — and the domain candidates most reliably under-read.
Architecture covers three competencies: Observability (Q45–46), Cloud Native Ecosystem and Principles (Q47–48), and Cloud Native Community and Collaboration (Q49–50). At 12% it's the smallest domain, but nothing here overlaps Set 1's six questions in this domain — this set covers SLIs/SLOs, declarative reconciliation, service meshes, and the SIG-versus-TAG distinction Set 1 never asked about at all. Background: observability on Kubernetes, the CNCF project landscape, and service-mesh fundamentals.
What's the relationship between an SLI, an SLO, and an error budget?
- They're three unrelated monitoring tools with no connection to each other
- An SLI is a measured indicator (like request latency); an SLO is a target for that indicator over time; the error budget is how much the SLI is allowed to miss the SLO before it counts as a breach
- An SLO is simply a stricter version of an SLI
- Error budgets replace the need for SLOs entirely
What does Prometheus scrape from each of its targets to collect metrics?
- A binary protocol pushed to it over gRPC
- An HTTP
/metricsendpoint exposing plain-text, labeled time-series data, polled on a schedule - Structured log lines, parsed after the fact
- SNMP traps from network hardware
What does "declarative," as the term is used in cloud native systems, actually mean?
- Writing step-by-step commands that must run in a specific order
- Stating the desired end state and letting a controller figure out — and continuously reconcile — how to get there and stay there
- Configuration that can never be stored in version control
- A synonym for "imperative" in Kubernetes' own documentation
What does a service mesh (such as Istio or Linkerd) typically add to a set of microservices via sidecar proxies, with no application code changes required?
- A replacement for the Kubernetes API server
- Consistent mutual TLS, traffic management, and observability between services
- Persistent storage for stateless applications
- A built-in CI/CD pipeline
What generally distinguishes a Graduated CNCF project from one still Incubating?
- Graduated projects are simply older by calendar date
- Graduated status requires a materially higher bar of demonstrated adoption, security auditing, and diversity of committers — a much stronger maturity and governance signal
- There's no real difference; the two terms are interchangeable
- Incubating projects are always more widely adopted than Graduated ones
What's the difference between a Kubernetes SIG (like sig-network) and a CNCF TAG (like TAG Security)?
- They're identical structures, just named differently
- A SIG organizes work within a single project — Kubernetes; a TAG provides cross-cutting technical oversight across many CNCF projects at once
- TAGs only exist to handle security incidents
- SIGs are CNCF's governing board; TAGs are individual contributors
Answer key & explanations — Domain 4 (Q45–50)
- B — indicator → objective → budget. You measure the SLI, set an SLO target for it, and the error budget is exactly how much that SLI is allowed to miss the SLO before the breach counts against you.
- B — a pulled
/metricsendpoint. The pull model is Prometheus's defining design choice — it scrapes targets on its own schedule rather than waiting for applications to push data to it. - B — state the end goal, let a controller reconcile. "What," not "how" — and crucially, ongoing reconciliation rather than a one-time action, which is what lets a controller correct drift on its own without anyone re-running a command.
- B — mTLS, traffic management, observability. The sidecar intercepts traffic transparently, so these get added at the infrastructure layer with zero changes to the application's own code.
- B — a materially higher bar. Graduation requires evidence like third-party security audits, a documented governance process, and committers from multiple organizations — not simply time spent in the CNCF, and not guaranteed by adoption numbers alone.
- B — project-scoped vs. cross-project. A Kubernetes SIG organizes ongoing work inside that one project; a CNCF TAG sits a level above any single project, providing technical oversight across the whole CNCF landscape at once.
Marking yourself, and what to do next
☺ Like you're 10: Your score is a thermometer, not a verdict — the real question is whether the same domain cost you marks on both papers.
Count your correct answers out of 50. The number to beat is 75%, which on this paper is 38 of 50 — identical to Set 1's bar, so the two scores really are directly comparable. Don't just compare totals, though: pull up your Set 1 domain breakdown next to this one. A domain that cost you marks on both sittings is a genuine gap; a domain that was weak on Set 1 and solid here means the fix actually worked.
| Where you land | What it usually means | The next move |
|---|---|---|
| Under 60% | Foundational gaps that a first sitting's revision didn't close. | Go back to the KCNA blueprint's Kubernetes Fundamentals section and read it properly — don't book anything yet. |
| 60–74% | Short of the 75% pass mark on a second, independently different paper — usually one or two domains repeating across both sittings. | Compare this domain breakdown against Set 1's directly. Whatever's weak on both, re-read that page and drill the practice bank and flashcards for it specifically. |
| 75–89% | At or above the published bar on two separate papers — a real, if not overwhelming, signal. | Spend one focused afternoon on whichever single domain scored lowest across both sittings, then book it. |
| 90%+ | Comfortable across two independently written 50-question papers. | Book the real exam. A third mock at this point would mostly test whether you've memorized this course's writing style, not new Kubernetes knowledge. |
Set a timer for two minutes per question you missed — no more — and answer each one again from scratch, cold, imagining the four options reshuffled before you look at them. If the right answer doesn't arrive comfortably inside that window, it isn't a knowledge gap anymore, it's a speed gap, and that needs a different fix: fewer new facts, more reps on the ones you already technically know. Compare that timed result against how long the same question actually took you the first time through this paper — the gap between the two numbers is exactly what a real exam's clock will punish.
Where each domain is taught, if you need more than this paper
☺ Like you're 10: Every question above came from somewhere specific on this course — go back to that page, not to a search engine.
Nothing in either KCNA paper tests material this course doesn't teach. The KCNA blueprint is the direct answer key at exam depth for all four domains; the sibling Platform Engineering course's KCNA page and DevOps course's KCNA page cover the identical curriculum from different angles, if a second explanation of the same material helps something click.
Kubernetes Fundamentals
Core concepts, administration, scheduling, and containerization — the control-plane/node split and the object-plus-controller pattern.
📦 · 28%Container Orchestration
Networking, security, troubleshooting, and storage — the domain where status strings turn into diagnosable claims.
🚀 · 16%Application Delivery
How software reaches a cluster (GitOps, Helm, Kustomize, deployment strategies) and how you debug it once it's there.
🗺️ · 12%Cloud Native Architecture
Observability's three pillars, the open interface standards, and the CNCF's own community structure and maturity ladder.
Beyond the blueprint: the study plan & practice bank for a week-by-week plan, the flashcards for pure vocabulary drilling, the glossary for anything a question here assumed you already knew, and the how to study for a CNCF exam page for technique that applies across every exam on this course's ladder.
Remy: 41 on Set 1, 44 on Set 2. That's real progress, right?
Ellie: Progress on the total, sure. But did the same domain cost you marks both times, or a different one?
Remy: ...Container Orchestration, both times. Storage questions specifically.
Professor Owl: Then the three-point jump is everywhere else compensating for a gap that's sitting exactly where it was on Set 1. Fix Storage before you book anything.
Gizmo: Or just keep sitting mock exams until Storage happens to come up easy and you never actually open the storage-and-CSI page. Statistically it has to happen eventually! 🎲
Foxy: Two data points from two different papers, both pointing at the same three-question domain, isn't bad luck, Gizmo — that's a pattern.
Timmy: Read storage & the CSI properly, Remy — not skim it — then re-sit just that domain before you spend a real exam fee finding out the pattern held a third time.
1. What's the difference between a ResourceQuota and a LimitRange? 2. Of the three taint effects, which one actively evicts Pods already running on the node? 3. Which access mode allows the same volume to be mounted read-write by multiple nodes at once? 4. What happens to a PersistentVolume when its claim is deleted, if its reclaim policy is Retain? 5. What's the difference between a Kubernetes SIG and a CNCF TAG? 6. This paper and Set 1 are both scored against the same pass mark — what is it, and how many of 50 does that take?
Check your answers
- A ResourceQuota caps aggregate resource consumption across an entire Namespace; a LimitRange sets a default (and optional min/max) per individual object, filling in a request/limit a container didn't specify.
- NoExecute — it actively evicts already-running Pods that lack a matching toleration, unlike
NoSchedule(blocks new Pods only) orPreferNoSchedule(a soft preference with no enforcement). - ReadWriteMany (RWX) — typically backed by shared filesystem storage like NFS, not by a per-node cloud block disk.
- It moves to Released, not deleted — the underlying storage is preserved and requires manual administrator action, which is the entire point of choosing
Retainin the first place. - A SIG (like sig-network) organizes ongoing work inside one project — Kubernetes; a TAG (like TAG Security) provides cross-cutting technical oversight across many CNCF projects at once.
- 75%, which on this 50-question paper is 38 correct — identical to Set 1's bar, which is exactly what makes the two scores genuinely comparable.