KCNA domain - 28% of the exam

Container Orchestration

Container Orchestration is 28% of the KCNA exam. These are the objectives it covers, each with practice questions, with every answer explained.

The domain in numbers

81
Practice questions
6
Objectives
67
Medium
14
Hard

Where people go wrong

  • Choosing a Service type that exposes too much or too little

    The wrong answers pick a type by how reachable it sounds. NodePort and LoadBalancer expose a workload beyond the cluster, so neither suits a cache that only Pods may reach; ClusterIP allocates an internal virtual IP and DNS name. NodePort opens the same port on every node without cloud integration, while LoadBalancer forwards at the connection level and cannot route by URL path, which is the job of an Ingress with an Ingress controller.

    See it in a sample question
  • Granting cluster-wide access where a Role and RoleBinding suffice

    The wrong answers over-grant or build an invalid pairing. A ClusterRoleBinding applies its rules in every namespace, and it can only reference a ClusterRole, so it cannot bind a namespaced Role. A Role grants nothing until a RoleBinding ties it to a subject, and cluster-admin is a severe over-grant. A Role with a RoleBinding in the same namespace gives exactly get and list on the named resource.

    See it in a sample question
  • Crediting a claim or a ConfigMap with provisioning

    The wrong answers place provisioning in an object that only requests or configures. A PersistentVolumeClaim only requests storage, a PersistentVolume is one volume that already exists, and a ConfigMap holds application settings with no provisioning behaviour. Pre-creating volumes by hand is static provisioning. The StorageClass names the provisioner and parameters, so referencing it in a claim creates a matching volume on demand, which is how a Pending claim with no matching volume gets bound.

    See it in a sample question
  • Reading a Pod status as the wrong failure

    The wrong answers swap failure states that sit at different stages. A Pod stuck in Pending has not been bound to a node, so no container has started. ImagePullBackOff means the image could not be retrieved, so the container never ran. CrashLoopBackOff means the container started and keeps exiting, with a growing delay between restarts. OOMKilled is a separate reason, shown when a container exceeds its memory limit.

    See it in a sample question
  • Swapping gVisor and Kata Containers

    The wrong options attach one sandbox's mechanism to the other. gVisor runs a user-space kernel that intercepts the container's system calls, with no virtual machine per Pod. Kata Containers runs each Pod in a lightweight virtual machine with its own guest kernel behind a hardware virtualisation boundary. Seccomp and rootless containers are offered as substitutes, yet both still share the host kernel.

    See it in a sample question

Objectives in this domain

What to study

The official documents this domain's practice questions cite most.

Sample questions from this domain

Free sampleContainer Orchestrationmedium

A platform team hosts three HTTP microservices and wants a single external entry point that routes requests to each service by URL path, such as forwarding /orders and /users to different backends, while terminating TLS in one place. Which Kubernetes object is designed to provide this layer-7 path-based routing?

  • AOne LoadBalancer Service per microservice, each provisioning its own cloud load balancer for the individual backend.
  • BAn Ingress with an associated Ingress controller, which routes external HTTP traffic to Services based on host and URL path rules. Correct
  • CA NodePort Service fronting all three microservices through one shared node port number opened on every cluster node.
  • DA headless ClusterIP Service that returns the Pod addresses of all three microservices to callers.
Choose an Ingress for host and path-based layer-7 routing of external HTTP traffic to multiple Services. Ingress is an API object that expresses layer-7 routing rules; an Ingress controller reads those rules and configures a reverse proxy to route by host and path and terminate TLS, which layer-4 Services cannot do.

Why A is wrong: LoadBalancer Services can expose each app, but they operate at layer 4 and cannot route by URL path, and using one per service defeats the single-entry-point goal.

Why B is correct: Ingress defines host and path routing rules for HTTP traffic and, with a controller, gives one entry point that fans out by path and can terminate TLS centrally.

Why C is wrong: NodePort is tempting as an external entry, but it forwards a raw port to a single Service and has no awareness of HTTP paths, so it cannot split /orders from /users.

Why D is wrong: A headless Service returns Pod IPs for direct discovery, but it stays internal and performs no path-based HTTP routing or TLS termination.

Free sampleContainer Orchestrationmedium

A platform engineer must let a data analyst list and get Pods in a single namespace called analytics, and confer no access anywhere else in the cluster. Which combination of objects grants exactly this with least privilege?

  • AA ClusterRole granting get and list on pods, plus a ClusterRoleBinding that binds the analyst to that ClusterRole.
  • BA Role granting get and list on pods, plus a ClusterRoleBinding that references that Role.
  • CA RoleBinding in the analytics namespace that references the built-in view ClusterRole, granting the analyst read access across all namespaces.
  • DA Role granting get and list on pods, plus a RoleBinding in the analytics namespace that binds the analyst to that Role. Correct
A namespaced Role plus a RoleBinding grants permissions confined to one namespace, giving least-privilege access. RBAC scoping is decided by object kind: a Role is namespaced and a RoleBinding grants its rules only within that same namespace, so pairing them limits the analyst to Pods in analytics and nothing beyond it.

Why A is wrong: This is tempting because it does grant pod read access, but a ClusterRoleBinding applies the permission across every namespace, breaking the least-privilege boundary the requirement sets.

Why B is wrong: It looks like it scopes access via the Role, but a ClusterRoleBinding can only reference a ClusterRole, not a Role, so the API server rejects this binding and no access is granted.

Why C is wrong: Reusing the built-in view ClusterRole is attractive, but a RoleBinding only grants within its own namespace, so the described cross-namespace effect is impossible and the wording is self-contradictory.

Why D is correct: A Role is namespaced, so its rules apply only within analytics, and a RoleBinding in that namespace grants them to the analyst there and nowhere else, exactly matching the requirement.

Free sampleContainer Orchestrationmedium

A developer applies a PersistentVolumeClaim, but it stays in the Pending phase and the Pod that mounts it will not start. The cluster has no administrator-created PersistentVolumes that match the claim, and the claim names no storage class. The team wants Kubernetes to create a matching volume automatically whenever such a claim is made. Which object should they define and reference in the claim to enable this automatic provisioning?

  • AA larger PersistentVolumeClaim requesting more capacity
  • BA ConfigMap holding the storage backend connection settings
  • CA StorageClass that names a provisioner for dynamic provisioning Correct
  • DA second static PersistentVolume created by hand each time
Recognise that a StorageClass enables dynamic provisioning so claims bind to volumes created on demand rather than pre-made ones. When no matching PersistentVolume exists, a claim binds only if a StorageClass provides a provisioner that dynamically creates a volume sized and configured to satisfy the claim, resolving the Pending state.

Why A is wrong: Resizing the request seems like a fix because capacity mismatches can block binding, but no volume exists to bind to at all, so a different size still leaves the claim Pending.

Why B is wrong: A ConfigMap is plausible because storage does need backend configuration, but ConfigMaps hold application settings and play no part in provisioning or binding PersistentVolumes.

Why C is correct: A StorageClass names the provisioner Kubernetes uses to create a PersistentVolume on demand, so referencing one in the claim lets a matching volume be provisioned automatically and the claim to bind.

Why D is wrong: Manually creating a PersistentVolume would let this one claim bind, but it is static provisioning that repeats the manual work rather than the automatic provisioning the team asked for.

Free sampleContainer Orchestrationmedium

A Pod's container starts, runs briefly, then exits, and its restart count keeps climbing while kubectl reports the container state as CrashLoopBackOff. Which statement best describes what this status indicates?

  • AThe kubelet cannot download the container image from the registry, so the container has never actually started running.
  • BThe container repeatedly starts and then exits soon after, so the kubelet waits a growing back-off interval before each restart attempt. Correct
  • CThe scheduler cannot find a node with enough free resources, so the Pod remains unscheduled and never binds to a node.
  • DThe container exceeded its configured memory limit and was terminated once by the node, with no further restart attempts made.
Recognise that CrashLoopBackOff means a container keeps starting and exiting, with the kubelet backing off between restarts. CrashLoopBackOff is reported when a container has started and then exited repeatedly; the kubelet increases the wait time before each restart under the Pod's restart policy, which distinguishes it from image-pull, scheduling, or single-kill failures.

Why A is wrong: This is tempting because it is also a repeating back-off state, but a registry pull failure produces ImagePullBackOff, not CrashLoopBackOff, and here the container has already run.

Why B is correct: CrashLoopBackOff means the container keeps terminating shortly after start and the kubelet applies an increasing delay between restarts, which is exactly this behaviour.

Why C is wrong: This describes a Pod stuck in Pending, which is a scheduling problem; a CrashLoopBackOff Pod has already been scheduled and its container has executed.

Why D is wrong: A single memory kill shows the reason OOMKilled and does not by itself imply the repeated start-exit cycle that defines a CrashLoopBackOff.

Free sampleContainer Orchestrationhard

A platform team must run untrusted tenant workloads on a shared cluster and needs each workload isolated by a hardware-virtualisation boundary, so that a kernel exploit inside one container cannot reach the host kernel, while the workloads still schedule as ordinary Pods. Which container runtime approach meets this requirement?

  • AgVisor, which runs the workloads behind its runsc user-space kernel
  • BThe default runc runtime hardened with a restrictive seccomp profile
  • CKata Containers, which runs each Pod inside a lightweight virtual machine Correct
  • DRootless containers, which map the container root user to an unprivileged host user
Kata Containers isolates each Pod in a lightweight virtual machine, giving a hardware-virtualisation boundary against host kernel exploits. Kata Containers boots a lightweight VM with its own guest kernel per Pod, so a container breakout is confined by the hypervisor boundary rather than reaching the shared host kernel that plain namespaced containers rely on.

Why A is wrong: gVisor is tempting because it also targets untrusted workloads and reduces host kernel exposure, but it intercepts system calls in a user-space kernel rather than placing each workload behind a hardware-virtualisation boundary, so it does not match the stated requirement.

Why B is wrong: A seccomp profile narrows the system calls a container may make, which looks like stronger isolation, but the container still runs directly on the shared host kernel with no virtualisation boundary, so a kernel exploit could still reach the host.

Why C is correct: Kata Containers runs each Pod inside a lightweight virtual machine with its own guest kernel, so the hardware-virtualisation boundary keeps a compromised container's kernel exploit away from the host kernel while the workloads still schedule as normal Pods.

Why D is wrong: Rootless containers reduce the damage of a breakout by mapping container root to an unprivileged host user, but they still share the host kernel and provide no hardware-virtualisation boundary, so they do not satisfy the requirement.

Other domains in this exam

See also the KCNA cert hub, the study guide, and the cheat sheet.

Examworthy is not affiliated with or endorsed by Cloud Native Computing Foundation. Original, blueprint-aligned practice material only.