Certifications · KCA · Mock Exam · Set 2

KCA Mock Exam · Set 2

This is the companion paper to Set 1: fifty more multiple-choice questions, weighted question-for-question to the same six domains of the official KCA curriculum — sixteen on Writing Policies, nine on Fundamentals of Kyverno, nine on Installation, Configuration & Upgrades, six on the Kyverno CLI, five on Applying Policies, five on Policy Management. Every question and scenario below is original to this course, built around a fictional orbital-habitat cluster rather than anything lifted from CNCF material or reused from elsewhere on this shelf. KCA is a pure knowledge exam — no live cluster, no terminal — so there is nothing to install here: read the stem, pick an answer, then read the explanation underneath whether you got it right or not. Sit it as one uninterrupted block, answer every question even when guessing, and treat each miss as a pointer to exactly which part of the blueprint page to re-read.

☺ Explain it like I'm 10

This is the second half of a two-part practice test, and it's built the same way the first half was: fifty questions, sharing out the marks exactly the way the real Kyverno test does, with the biggest topic getting the most questions and the smallest getting the fewest. The scenarios are new, though — different fictional spaceship parts, different fictional policies, so you can't just remember an answer from last time. Answer before you peek at the explanation, even when you're only half sure. Getting it wrong here, with the right answer sitting right underneath, is how the wrongness turns into rightness by exam day.

🐢🐰Your hosts for this topic: Timmy the Turtle & Remy the Rabbit — Timmy is the guardrail, so he's the one insisting you know exactly which field turns a rule from a suggestion into an actual rejection, and Remy runs every recall drill on this course, so he's the one insisting you answer cold, mark yourself honestly, and move straight on.

How to sit this paper

☺ Like you're 10: Set a timer, close every other tab, and go straight through without stopping to look anything up.

A mock paper only tells you the truth if you sit it under the conditions it's imitating. Looking things up mid-paper measures your search skills, not your recall — so treat this like the real 90-minute sitting: one block, no documentation open, no other tabs, and a committed answer on every question, even a guessed one. Nothing published states that Linux Foundation multiple-choice exams deduct marks for a wrong answer, so there is no reason to ever leave one blank.

The protocol

  1. Set a clock for 90 minutes. That's the duration the Linux Foundation publishes for KCA — see the logistics table on the blueprint page for the full picture and why it's worth re-verifying before you book.
  2. Answer, then open the explanation. If it just confirms what you thought, move on. If it surprises you, write down the concept — that list becomes your revision plan for the next two days.
  3. Don't re-sit immediately. Go and re-read your two weakest domains first. A second attempt an hour later measures short-term memory, not knowledge.
  4. Sit Set 1 and this paper on separate days if you haven't already — same weighting, different scenarios, and together they're a much more honest signal than either alone.

What this paper deliberately is not

It isn't a leaked or reconstructed exam — the wording, the fictional cluster, and every resource name below are original to this course, not the CNCF's. A multiple-choice paper is the right shape of practice specifically because KCA is knowledge-based: you pick answers, you never touch a live cluster, unlike the fully performance-based LFCS or the hybrid ICA elsewhere on this shelf. And it isn't a general Kubernetes security exam — this course assumes the five core Kubernetes certifications, including CKS, are already cleared over in the sibling Kubernetes course. Nothing here re-teaches kubectl, RBAC fundamentals, or admission-control theory in general — only Kyverno's own idioms on top of them.

How the fifty questions are weighted

☺ Like you're 10: The questions are shared out the same way the real test shares out its marks — the biggest topic gets almost a third, the smallest two get a tenth each.

The six published weights — 32%, 18%, 18%, 12%, 10%, 10% — are applied to fifty questions the same way the blueprint page applies them to the real exam. The arithmetic lands exactly, with no remainder to argue about: 32% of 50 is 16, 18% of 50 is 9 (twice), 12% of 50 is 6, and 10% of 50 is 5 (twice). Add them up — 16 + 9 + 9 + 6 + 5 + 5 — and you get exactly 50, so unlike some forty-question papers on this shelf, no domain here needs a rounding tie-break at all.

🐢Writing Policies
16 Q
🦉Fundamentals of Kyverno
9 Q
🦫Installation, Configuration, and Upgrades
9 Q
🐿️Kyverno CLI
6 Q
🤖Applying Policies
5 Q
🐘Policy Management
5 Q
◆ Key idea

Score yourself by domain, not just by total. Missing three of five Policy Management questions costs far less than missing three of sixteen Writing Policies questions — the domains are not equally dangerous to be weak in, because they don't carry equal weight on the real paper either.

The fifty questions run across three blocks, each mixing all six domains rather than grouping them — exactly like the real exam, where you never know which domain the next question belongs to. Budget your 90 minutes roughly in proportion to each domain's share, with a few minutes held back at the end for anything you flagged:

90-minute pace · 50 questions · 6 domains Writing Policies 29 min · 32% Fundamentals 16 min · 18% Install/Config 16 min · 18% CLI 11 min · 12% Applying 9 min · 10% Policy Mgmt 9 min · 10% 0 ~90 min Fifty questions, split the same way — mixed into every block below 16 Q 9 Q 9 Q 6 Q 5 Q 5 Q Both rows use the same six proportional widths Time and question count scale identically with domain weight — the biggest domain gets the most of both. The real exam's exact item count isn't published — this paper's size of 50 is a study choice, not a confirmed number.

The paper — 50 questions across six domains

☺ Like you're 10: Read the recipe card if there is one, pick your best answer, then check yourself before moving to the next one.

Each question names its domain in parentheses. On the real exam you won't get that label, so if you sit this paper a second time, try covering the domain tags and see how many you can still place by content alone. Every resource, namespace and policy name below belongs to one running fiction — an orbital habitat cluster called orbit — used only to make the scenarios concrete.

Block 1 — Q1–17

Q1 (Writing Policies). A validate rule is installed using the current per-rule schema, with no failureAction field set anywhere inside its validate block. A resource is created that violates the rule's pattern. What happens?

Check the answer

B. Leaving failureAction unset does not mean "no action" — it means the rule quietly audits every violation instead of blocking any of them. Enforcement has to be requested explicitly.

Q2 (Fundamentals of Kyverno). Within a single ClusterPolicy, can one entry inside spec.rules[] declare both validate and mutate at the same time?

Check the answer

B. A rule is exactly one job. A policy with several jobs to do is a policy with several rules, each carrying its own match and its own single action.

Q3 (Installation, Configuration, and Upgrades). What is the standard Helm-based method to install Kyverno for the first time onto a cluster?

Check the answer

B. Helm is the curriculum's named installation method, and the standard path is one repo add and one helm install against the kyverno/kyverno chart.

Q4 (Writing Policies). A precondition on a rule reads: key: "{{ request.operation }}", operator: AnyIn, value: [CREATE, UPDATE]. A DELETE request arrives that otherwise satisfies the rule's match block. What happens?

Check the answer

B. Preconditions are a gate that runs before the rule's main action — a false precondition means the rule does nothing at all for that request, cheaply, without ever touching pattern.

Q5 (Kyverno CLI). What is the key advantage of kyverno apply ./policies/ --resource ./manifests/ over applying a policy straight to a live cluster to see what it does?

Check the answer

B. This is the whole point of the standalone CLI: rehearse a policy change against manifests on disk, with zero cluster dependency, before it ever reaches a real environment.

Q6 (Policy Management). What's the difference between kubectl get polr -A and kubectl get cpolr?

Check the answer

B. Scope is the whole distinction — namespaced results land in a PolicyReport per namespace, cluster-scoped results land in the cluster-wide ClusterPolicyReport.

Q7 (Writing Policies). Which two mechanisms can a mutate rule use to rewrite an incoming resource on its way in?

Check the answer

A. A strategic merge patch reads like the object it's patching; an RFC 6902 JSON patch is a list of explicit op/path/value operations. Both belong to mutate, not to any of the other three rule types.

Q8 (Applying Policies). A ClusterPolicy is installed with background left unset, so it defaults to true. What does this mean for resources that already existed in the cluster before the policy was created?

Check the answer

B. Admission control only ever sees requests in flight; background scanning is what closes the gap for everything that was already sitting in the cluster before the policy arrived.

Q9 (Fundamentals of Kyverno). Why can a platform engineer write and review Kyverno policies without learning a brand-new domain-specific language first?

Check the answer

B. A pattern block mirrors the resource it constrains, which is exactly why a reviewer fluent in ordinary Kubernetes YAML can audit a Kyverno policy's intent at a glance.

Q10 (Installation, Configuration, and Upgrades). Which of the following is not a genuine, separate Kyverno CRD?

Check the answer

D. ValidatingAdmissionPolicy is a native Kubernetes API server resource, not a Kyverno CRD. Kyverno's CEL support deliberately reuses the same expression language that resource uses, but the resource itself belongs to the API server, not to Kyverno.

Q11 (Writing Policies). A generate rule uses clone rather than data to create a companion resource, with synchronize: true set. What does synchronize: true actually do?

Check the answer

B. Without synchronize, a generated resource is a one-time copy that can drift. With it, Kyverno keeps enforcing that the generated object matches its source — including reverting a well-meaning manual edit.

Q12 (Kyverno CLI). What does adding --cluster to kyverno apply ./policies/ --policy-report change?

Check the answer

B. --cluster swaps the resource source from local files to whatever the current kubeconfig context points at — nothing about the dry-run nature changes.

Q13 (Fundamentals of Kyverno). What kind of Kubernetes object does Kyverno register itself as, in order to intercept every create and update before persistence?

Check the answer

B. Kyverno needs both webhook kinds registered, because validate and verifyImages need validating hooks while mutate and generate need mutating ones — one engine wearing two webhook hats.

Q14 (Writing Policies). Which phase of the Kyverno admission webhook does a verifyImages rule execute in, and why does that matter?

Check the answer

B. verifyImages is a mutating-phase check precisely because a security control that pins a tag to the digest it just verified needs write access to the object — that's a fact multiple-choice writers love to test.

Q15 (Applying Policies). A rule's match.any block lists two separate resources filters: one for kinds: [Pod] and one for namespaces: [orbit]. How does any combine these two filters?

Check the answer

B. Separate list entries under any are ORed. This is exactly the trap behind "the commonest reason a policy matches something too broad" — a selector that reads narrow but behaves wide.

Q16 (Installation, Configuration, and Upgrades). Chart values for controller flags — such as admissionController.container.extraArgs — can differ between Kyverno chart releases. What's the reliable way to check which flags a specific chart version actually supports, rather than trusting an old blog post?

Check the answer

B. Chart values are versioned right alongside the chart itself — helm show values against the exact version you're installing is the one source that can't be stale.

Q17 (Policy Management). A team wants exactly one workload exempt from one specific rule, without weakening that rule for every other workload in the cluster. What's the idiomatic Kyverno mechanism for this?

Check the answer

B. A PolicyException is the dedicated, reviewable carve-out mechanism. Option A can technically work, but it means editing the one policy every other workload also depends on, just to grant a one-off exemption — exactly the pattern PolicyException exists to replace.

Block 2 — Q18–34

Q18 (Writing Policies). A rule needs to read a value from a ConfigMap that isn't part of the incoming request at all, then use it inside a validate.pattern. Which mechanism supplies that value?

Check the answer

B. context is exactly the escape hatch for data that doesn't arrive with the request — a ConfigMap lookup, a variable derived from one, or a call to the Kubernetes API mid-rule.

Q19 (Fundamentals of Kyverno). Which of these is a digest-pinned image reference, as opposed to a tag-pinned one?

Check the answer

B. Digest-pinned references use the @sha256: form — exactly the shape a verifyImages rule with mutateDigest: true rewrites a tag-pinned reference into once verification succeeds.

Q20 (Writing Policies). Which RFC 6902 JSON Patch operation would you use inside patchesJson6902 to add a new field to a Pod's first container that doesn't yet exist there, without disturbing the rest of the container spec?

Check the answer

B. add is the safe general-purpose choice for introducing a field — it doesn't require the target to already exist the way replace does.

Q21 (Installation, Configuration, and Upgrades). Take the rule fragment below:

- name: generate-default-deny
  match:
    any:
      - resources: { kinds: [Namespace] }
  generate:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    name: default-deny
    namespace: "{{ request.object.metadata.name }}"
    data:
      spec:
        podSelector: {}
        policyTypes: [Ingress, Egress]

This rule is installed cluster-wide, kyverno test passes locally, but on the live cluster no NetworkPolicy ever actually appears in newly-created namespaces. What's the most likely operational cause?

Check the answer

B. kyverno test checks the policy's logic against fixtures, never the live cluster's RBAC — a generate rule that's logically correct can still silently do nothing for want of a permission nobody granted.

Q22 (Kyverno CLI). Running kyverno test ./policies/ with no other arguments, how does the CLI know which test cases to actually run?

Check the answer

B. kyverno-test.yaml is the auto-discovered convention — no flag needed, the same way many test runners auto-discover files matching a naming pattern.

Q23 (Writing Policies). A validate rule matches only kind: Pod in its match block. A developer creates a Deployment whose Pods would violate that rule if they were created directly. Assuming autogen is left at its default behavior, what actually happens?

Check the answer

B. Autogen exists precisely so a rule written once for Pod still surfaces its message where a developer's kubectl apply actually landed — usually a Deployment, not a bare Pod.

Q24 (Policy Management). Kyverno exposes its own operational metrics via the kyverno-svc-metrics Service. What format are they in, and what do they integrate with?

Check the answer

B. Prometheus format is the point — a guardrail's health question ("are rejections spiking?") should be answerable from the exact same dashboards as everything else, not a separate bespoke tool.

Q25 (Fundamentals of Kyverno). A Policy (not a ClusterPolicy) is created in namespace orbit. Can its rules match a Namespace resource?

Check the answer

B. Scope is the entire distinction between Policy and ClusterPolicy. A cluster-scoped resource is structurally out of reach for anything confined to one namespace.

Q26 (Installation, Configuration, and Upgrades). A team wants to make their Kyverno install highly available and, due to a resource budget, can only prioritize scaling one controller's replica count first. Which controller should that be, and why?

Check the answer

B. Only the admission controller intercepts live create/update requests. The background, reports and cleanup controllers matter, but none of them can single-handedly stall every deploy in the cluster the way the admission controller can.

Q27 (Writing Policies). A ClusterCleanupPolicy is created with schedule: "0 2 * * *" and a match selecting completed Jobs older than 48 hours. Which statement about this resource is correct?

Check the answer

B. Cleanup policies are their own CRD family with their own controller — not a fifth action bolted onto an ordinary policy's rule list.

Q28 (Applying Policies). Which match.any.resources field would you use to make a rule apply only to requests made by a specific ServiceAccount, rather than filtering by the resource's own kind or namespace?

Check the answer

B. kinds, namespaces and selector all describe the resource being acted on; subjects is the field that describes who is acting.

Q29 (Writing Policies). Kyverno's validate rules can express their check using CEL instead of the pattern-matching style. What's true about the CEL option?

Check the answer

B. This is deliberate design, not coincidence — Kyverno reuses the exact expression language the API server already speaks natively, so time spent learning CEL for one pays off for the other.

Q30 (Kyverno CLI). A kyverno-test.yaml file declares, for one resource and one rule, an expected result of fail. Applying that policy to that resource actually results in a pass. What does kyverno test report?

Check the answer

B. kyverno test works exactly like a unit test: a declared expectation, an actual result, and a failure the moment the two disagree.

Q31 (Fundamentals of Kyverno). A validate pattern block is written as nested YAML mirroring the shape of the resource it's checking, rather than as a separate expression language, in its non-CEL form. What does this design choice buy a reviewer?

Check the answer

B. Shape-mirroring is exactly what keeps policy review approachable — the reader's existing Kubernetes fluency carries most of the weight.

Q32 (Installation, Configuration, and Upgrades). Before running helm upgrade kyverno kyverno/kyverno --version X, what does the curriculum's "Upgrading Kyverno" competency specifically expect a candidate to check first?

Check the answer

B. CRD compatibility across versions is exactly the kind of quiet operational risk this domain exists to test — read the release notes for your target version before jumping.

Q33 (Writing Policies). A validate rule's pattern checks request.userInfo.username to restrict who may create a resource, and the same policy sets background: true. What happens when the background controller scans a pre-existing resource against this rule?

Check the answer

B. Background scanning only ever sees the object as it currently sits in the cluster — the original request's identity context is long gone by the time a scheduled scan reaches it.

Q34 (Policy Management). A PolicyReport entry shows a result of error for one resource against one rule, distinct from fail. What does error typically indicate?

Check the answer

B. error means the evaluation itself broke down; fail means evaluation completed and the resource genuinely didn't satisfy the rule. Telling those apart is exactly what a report's status column is for.

Block 3 — Q35–50

Q35 (Writing Policies). A validate rule needs to allow a resource if it matches any one of several acceptable label patterns, not all of them simultaneously. Which field expresses that?

Check the answer

B. pattern is a single shape that must be satisfied in full; anyPattern is specifically the OR construct, a list where one match is enough.

Q36 (Fundamentals of Kyverno). Besides CREATE and UPDATE, which other admission operation can a Kyverno rule's match legitimately filter on?

Check the answer

B. Admission control isn't limited to creation and modification — a rule can be written to react to deletion too, which matters for anything trying to protect a resource from being removed.

Q37 (Installation, Configuration, and Upgrades). What does the --create-namespace flag do in helm install kyverno kyverno/kyverno -n kyverno --create-namespace?

Check the answer

B. A convenience flag, nothing more — it saves a separate kubectl create namespace step ahead of the install.

- name: default-pull-policy-all
  match:
    any:
      - resources: { kinds: [Pod] }
  mutate:
    patchesJson6902: |-
      - op: add
        path: "/spec/containers/0/imagePullPolicy"
        value: IfNotPresent

Q38 (Writing Policies). The rule above only ever patches container index 0. A Pod defines three containers, and the requirement is to add the same imagePullPolicy field to all three, not just the first. Which construct fixes this without hand-writing three separate patch operations?

Check the answer

B. foreach is exactly the mechanism for applying one patch shape across every entry in an array, regardless of how many containers a given Pod actually declares.

Q39 (Kyverno CLI). Why would you run kyverno jp query -i pod.yaml 'spec.containers[*].image' before pasting that same expression into a rule's {{ }} variable?

Check the answer

B. Debugging an expression against a real file, outside a rule, is far faster than iterating by repeatedly re-applying a whole policy just to see what one JMESPath expression actually returns.

Q40 (Applying Policies). A rule's context entry calls an external API mid-evaluation, and that call is occasionally slow. Which common policy setting controls how long Kyverno waits before the webhook call itself times out?

Check the answer

B. A slow context call is exactly the scenario webhookTimeoutSeconds exists to guard against — without it tuned appropriately, a slow external dependency can start failing admission requests outright.

Q41 (Writing Policies). Which fields must a generate rule specify to know what resource to actually create, at minimum?

Check the answer

B. A generate rule needs to know what kind of object to make, what to name it, where it lives, and what content it holds — that last part is either inlined via data or copied via clone.

Q42 (Fundamentals of Kyverno). Why does the KCA curriculum name "OCI Images" as its own fundamentals competency, distinct from Kubernetes generally?

Check the answer

B. The competency exists because one whole rule type is built on top of OCI's own reference and signature conventions — you can't reason well about verifyImages without that grounding.

Q43 (Installation, Configuration, and Upgrades). Structurally, what kind of Kubernetes object is a PolicyException?

Check the answer

B. Being its own CRD is exactly what makes a PolicyException reviewable in Git independently of the policy it carves an exception out of.

Q44 (Writing Policies). A verifyImages rule's attestors block uses keyless, naming a subject and an issuer, rather than a static public key. What does keyless verification actually check?

Check the answer

B. "Keyless" doesn't mean "no verification" — it means the identity behind the signature is a short-lived, OIDC-bound certificate instead of a key pair someone has to store and rotate forever.

Q45 (Kyverno CLI). Beyond standard JMESPath, Kyverno's expression evaluation supports extra custom functions for things standard JMESPath can't express on its own. Which command lists them?

Check the answer

B. jp function is the CLI's own reference for the custom functions layered on top of standard JMESPath — worth running once just to see what's available.

Q46 (Policy Management). A PolicyException names policies: [require-team-label] and a match block selecting one specific Deployment by name. What does this exemption actually cover?

Check the answer

B. A PolicyException is precisely scoped — it names exactly which policy, which rule, and which resources, using the same filtering vocabulary as an ordinary policy's match block.

Q47 (Writing Policies). Inside a validate pattern, what's the difference between the wildcard ?* and * when checking a field like metadata.labels.team?

Check the answer

B. This distinction is a favorite exam trap: * alone would happily accept team: "", which is almost never what a policy author actually wants — ?* is the wildcard that closes that gap.

Q48 (Fundamentals of Kyverno). Why does installing a single policy that only matches kind: Pod not add any latency at all to, say, ConfigMap creation elsewhere in the cluster?

Check the answer

B. Kyverno keeps its own webhook registration narrow on purpose — only the kinds your policies actually reference ever pay the round-trip cost of being sent to Kyverno at all.

Q49 (Installation, Configuration, and Upgrades). Unlike Istio's revision-tag canary upgrade pattern — installing a second, parallel control plane under a new revision label, then moving namespaces across one at a time — how does a standard Kyverno upgrade typically proceed?

Check the answer

B. Kyverno's upgrade model is a plain in-place helm upgrade, with none of the parallel-revision machinery some other CNCF projects offer — which is exactly why reading the release notes first is non-optional here.

Q50 (Applying Policies). A very old ClusterPolicy manifest sets spec.validationFailureAction: enforce at the top level, rather than failureAction: Enforce inside each rule's validate block. What should a candidate recognize about this?

Check the answer

B. Both forms mean the same thing operationally; the curriculum expects you to recognize the old spelling on sight, not just the current one, since older manifests in the wild still use it.

Score yourself

☺ Like you're 10: Your score is a thermometer, not a verdict — the list of questions you got wrong is the actually useful part.

Count your correct answers out of 50 and convert to a percentage. The number to beat is 75%: per the blueprint page's logistics table, the Linux Foundation's Multiple Choice Exam FAQ states that a score of 75% or above must be earned to pass a multiple-choice exam, and KCA is one — though that figure lives on the Foundation's general FAQ, not a KCA-specific page, so it's worth re-confirming before you book. This paper isn't calibrated to the real exam's difficulty and every scenario is entirely original to this course, so don't read a score here as a literal prediction of your real result — but the pattern of where you lost points travels reliably:

DomainItems in this paperYour scoreIf you're under two-thirds, go here
🐢 Writing Policies16/16KCA — the exam
🦉 Fundamentals of Kyverno9/9Kyverno
🦫 Installation, Configuration, and Upgrades9/9KCA — the exam
🐿️ Kyverno CLI6/6KCA — the exam
🤖 Applying Policies5/5KCA — the exam
🐘 Policy Management5/5KCA — the exam
Total50 items/5075%+ (38/50) is the published pass mark
⚠ Exam details change — the official page is the authority

The 90-minute duration and 75% pass mark quoted here reflect the Linux Foundation's published figures as of 2026; question count is not published at all for KCA, so treat any specific figure you read for it — here or elsewhere — as candidate folklore. Price, retake terms, eligibility windows and even domain weights are revised without announcement. This is an independent, unofficial study resource, not affiliated with the CNCF or The Linux Foundation — confirm everything on the official Linux Foundation KCA page and the CNCF KCA page before you register or pay.

Where you landWhat it usually meansNext move
Under 60%Gaps in the fundamentals, not exam technique.Re-read the blueprint page in full, in weight order — Writing Policies, then the two 18% domains, then the rest — before touching another paper.
60–75%Below the published pass mark. The core vocabulary is there, but the distinctions are fuzzy — audit vs enforce, Policy vs ClusterPolicy, PolicyReport vs PolicyException.Re-read your two weakest domains, then re-sit the questions you missed in both this paper and Set 1 from memory.
75–90%At or above 75%, but not comfortably so. What's usually left is one under-studied smaller domain — often Policy Management or Applying Policies, each only 10% of the real blueprint.Spend a focused hour on the applying-policies and policy-management sections, then re-sit this paper's ten questions from those two domains cold.
Over 90%Comfortable on paper. The remaining risk is recognizing a familiar-sounding option rather than actually reasoning from the YAML.Try the workshop on the blueprint page — install Kyverno on a throwaway cluster and run all four rule types for real — then book the exam.

Whatever you scored, do one more thing before closing the tab: for every question you missed, write in your own words why the option you picked was wrong — not just why the correct one was right. That sentence is what actually stops the same mistake happening again in the real sitting.

Where each domain is taught

☺ Like you're 10: Every question above traces back to one of a handful of pages — go back to the page, not to a search engine.

Nothing in this paper examines anything outside this course's own material. The KCA blueprint page is the primary source for all six domains; where a competency needs the wider admission-control or supply-chain picture, it lives in this course's own tool and deep-dive pages.

Round it out with the KCA study plan for a pacing schedule funded by domain weight, the practice question bank for drilling between full papers, the glossary for terminology, flashcards for the vocabulary, and the certifications overview for where KCA sits against the other eight badges on this ladder. Because Kyverno enforces admission control, the sibling CKS blueprint over in the Kubernetes course is worth a skim if the surrounding cluster-security picture ever feels shakier than the Kyverno-specific facts themselves.

🎬 At Mission Control
🦊

Foxy: I got 40 out of 50 on Set 2. Better or worse than Set 1?

🐰

Remy: Wrong comparison. Which ten did you drop? Two in Policy Management barely dents you. Five in Writing Policies is a real problem, because that one domain carries sixteen of the fifty marks on its own.

🦊

Foxy: Mostly the wildcard question, actually — I keep forgetting * happily matches an empty string and ?* is the one that actually demands a real value.

🐢

Timmy: Say it out loud until it's boring, Foxy — that one wildcard is exactly the kind of detail a rule can pass code review with and still do nothing in production.

👺

Gizmo: Or just skip the wildcard entirely and leave the field unchecked. No pattern, no confusion! 😏

🐘

Ellie: Which is also exactly how six hundred silent policy-report failures happen — the rule that checks nothing catches nothing, and nobody notices until the report's FAIL column is unreadable.

🦊

Foxy: Fine, fine. Back to the blueprint page for an hour, then I'm re-sitting just the Writing Policies questions from both papers.

🐢 Timmy's checkpoint

1. Name the six KCA domains and their weights, heaviest first. 2. What does failureAction: Enforce actually change, and what happens without it? 3. Which of the four rule types runs in the mutating phase even though its job sounds like validation, and why? 4. What's the practical difference between the wildcards * and ?* inside a validate pattern? 5. Name Kyverno's four controllers and which one sits directly in the live admission path. 6. What does a PolicyException give you that editing the policy directly does not? 7. Which three kyverno CLI subcommands does the curriculum name, and what does each one answer?

Check your answers
  1. Writing Policies 32%, Fundamentals of Kyverno 18%, Installation, Configuration, and Upgrades 18%, Kyverno CLI 12%, Applying Policies 10%, Policy Management 10%.
  2. It turns a rule from a silent auditor into an actual blocker. Without it, the rule's default behavior is Audit — every violation is recorded in a policy report, but nothing is ever rejected.
  3. verifyImages. It runs in the mutating phase because a successful verification rewrites the image tag to the digest it just verified (via mutateDigest), and only a mutating webhook is permitted to change the object on its way through.
  4. ?* requires the field to exist and hold at least one character; * matches any value, including an empty string, as long as the field is present at all — * alone would happily accept a blank label.
  5. Admission (validates and mutates every live request — the only one directly in the request path), background (scans, generate, mutate-existing — needs RBAC for what it touches), reports (aggregates results into PolicyReport/ClusterPolicyReport), and cleanup (runs CleanupPolicy schedules).
  6. A separate, reviewable resource: one named workload skips one named rule, through Git and code review, while the policy stays strict for everyone else — instead of permanently weakening the rule for the whole fleet.
  7. apply — "what would these policies do to these resources?"; test — run declarative unit tests and assert each rule's expected result; jp — evaluate a JMESPath (or custom-function) expression against a manifest, to debug it before pasting it into a rule.
⏱️ The two KCA papers

Set 1 · Set 2 (you are here). Both are fifty questions on the same 16 · 9 · 9 · 6 · 5 · 5 domain split, so the scores are directly comparable — sit them on different days and treat a repeated concept as a spaced-retrieval check, not a leak. See the KCA study plan for where each paper belongs in your remaining prep time, the practice question bank for drilling between full papers, and KCA — the exam for the full domain writeup and official logistics.