SaveMyCert
Log in
5 of 5 free questions left today·for 10 a day
Cloud Native Architecture

Cloud Native Principles and the CNCF Ecosystem

16 min readKCNA · Cloud Native ArchitectureUpdated

Cloud native is the CNCF's term for building and running scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. The techniques that make this possible are named in the CNCF definition itself: containers, service meshes, microservices, immutable infrastructure, and declarative APIs, combined with robust automation so that engineers can make high-impact changes frequently and predictably. For the KCNA exam you need to recognize each of these principles, understand the trade-offs between microservices and monoliths, explain how reconciliation produces self-healing, know the four autoscaling approaches in Kubernetes (HPA, VPA, Cluster Autoscaler, and KEDA) well enough to pick one from a symptom, grasp what serverless and scale-to-zero mean, and place well-known projects in the CNCF landscape by the job they do. This lesson covers all of that conceptually, with the comparisons and distinctions the exam leans on.

What you’ll learn
  • State the CNCF definition of cloud native, name its five core techniques, and recognize practices that are not among them
  • Compare microservices and monolithic architectures and identify the trade-offs of each
  • Explain how a service mesh handles service-to-service traffic, and how it differs from an API gateway or Ingress
  • Explain immutable infrastructure, declarative APIs, and how reconciliation loops replace Pods after a failure
  • Distinguish HPA, VPA, Cluster Autoscaler, and KEDA by what each one scales, and choose between them from a symptom
  • Describe serverless computing, scale-to-zero, FaaS, and where Knative fits
  • Place well-known CNCF projects in the landscape by the job they do

What cloud native means: the CNCF definition

The CNCF defines cloud native technologies as those that empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. The definition then names the exemplary techniques: containers, service meshes, microservices, immutable infrastructure, and declarative APIs. These are worth memorizing as a set, because KCNA questions ask you to recognize which practices belong to the cloud native approach and which do not.

The definition also describes the outcome these techniques produce: systems that are loosely coupled, resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil. Every phrase there is doing work. Loose coupling means components can change and fail independently. Resilience means the system tolerates failure rather than assuming it away. Observability means you can understand the system from the telemetry it emits. Automation means humans declare intent and machinery carries it out.

Keep the list of five exact, because popular cloud native practices that are not on it make convincing distractors. GitOps, serverless, DevOps, CI/CD pipelines, and observability tooling all belong to the cloud native world, and several are built on the five techniques (GitOps relies on declarative configuration; serverless platforms run containers), but none of them is one of the techniques the definition names. Observability appears in the definition only as an outcome, a property the techniques produce, not as a technique.

Notice what the definition does not say. Cloud native is not the same as running in a public cloud; the definition explicitly includes private and hybrid environments, and you can run thoroughly cloud native systems on-premises. Nor is it a specific product. It is a set of architectural and operational principles, and Kubernetes is the most prominent platform built around them. The CNCF, the Cloud Native Computing Foundation, is the vendor-neutral home under the Linux Foundation that hosts the open source projects implementing these ideas, with Kubernetes as its first project.

Microservices vs monoliths

A monolith is an application built and deployed as one unit: one codebase, one build artifact, one process to run and scale. Microservices decompose the same functionality into small, independently deployable services, each owning a narrow business capability and communicating with the others over the network, typically through APIs. Cloud native architecture favors microservices because they align with the definition's goals: services are loosely coupled, can be scaled individually, and can be released independently by separate teams.

DimensionMonolithMicroservices
DeploymentOne unit; every change redeploys the whole appEach service deploys independently
ScalingScale everything together, even hot spotsScale only the busy service
Failure isolationOne defect can take down the whole processFailures can be contained to one service
Team structureTeams coordinate on one codebaseSmall teams own services end to end
Operational complexityLow: one thing to runHigh: many services, network calls, versioning
DebuggingSingle process, straightforwardDistributed, needs tracing and correlation

The exam expects balance, not cheerleading. Microservices buy independent scaling, deployment, and team autonomy at the price of operational complexity: network latency, partial failures, and the need for orchestration and observability tooling. A monolith is simpler to build, run, and debug, and remains a reasonable choice for small teams and early products. The honest statement, and the one KCNA rewards, is that microservices trade development-time simplicity for run-time flexibility, and platforms like Kubernetes exist largely to manage the complexity they introduce.

Service meshes: east-west traffic without code changes

A service mesh is an infrastructure layer that manages the calls services make to one another, adding mutual TLS, retries, timeouts, traffic shifting, and per-call telemetry without any change to application code. It does this by routing each service's traffic through a proxy that the mesh controls, traditionally an Envoy or Linkerd sidecar injected into every Pod, or in newer designs such as Istio ambient mode a shared per-node proxy (ztunnel) for mutual TLS, plus optional waypoint proxies for L7 features such as retries and traffic shifting. Because the proxies, not the application, handle encryption and retries, every service gets the same behaviour regardless of the language it is written in. That is why the CNCF definition lists service meshes among its five techniques.

The mesh is easy to confuse with components that also sit in the request path. The distinction is the direction of the traffic. North-south traffic enters or leaves the application from outside clients; east-west traffic flows between the application's own services inside the cluster.

ComponentTraffic it handlesTypical job
Ingress controller / Gateway API implementationNorth-south: external clients into the clusterHTTP routing by host and path, TLS termination at the edge
API gatewayNorth-south: client calls to the application's APIsAuthentication, rate limiting, request routing for external consumers
Service meshEast-west: service-to-service calls inside the clustermTLS between services, retries, traffic splitting for canaries, call metrics
Shared client libraryEast-west, but inside each application processRetries or TLS coded into the app; needs code changes and one library per language

An internal call from one service to another never passes through the edge gateway, so the gateway cannot encrypt or retry it. A client library can, but only by modifying and redeploying every service, which is exactly what a mesh avoids. When the requirement is consistent behaviour for internal calls without touching code, the mesh is the fit; when it is controlling how outside traffic gets in, the gateway or Ingress is.

Immutable infrastructure: replace, don't patch

Immutable infrastructure means that once a server, virtual machine, or container is deployed, you never modify it in place. To change anything, you build a new artifact from source, deploy it, and destroy the old one. The alternative, mutable infrastructure, is the traditional model of logging into a running server to apply patches, edit configuration, or hotfix code. Mutable systems drift: after months of manual changes, no two servers are quite alike, and nobody can reproduce exactly what is running. Such hand-maintained, irreplaceable servers are the antithesis of cloud native operations.

Containers make immutability natural. A container image is a read-only, versioned artifact built once and run anywhere. To ship a fix you do not patch a running container; you build a new image, tag it, and roll it out, and Kubernetes replaces the old Pods with new ones. This is why cloud native guidance says to treat workloads as replaceable rather than as unique, carefully nursed systems. Any individual Pod can be killed and recreated from its image at any time with no loss.

The payoffs are concrete. Deployments become reproducible, because the image is the single source of what runs. Rollbacks become trivial, because the previous image version still exists and can be redeployed. Configuration drift disappears, because every replica starts from the same artifact. And security improves, because unexpected changes to a running container are a red flag rather than routine maintenance. On the exam, phrases like patching a live server in place signal the anti-pattern, while rebuild and redeploy signals the cloud native answer.

Declarative APIs and desired state

An imperative approach tells a system what to do, step by step: start three containers, then attach them to this network, then open this port. A declarative approach tells the system what you want to be true, and leaves the how to the platform: there should be three replicas of this application, reachable on this port. Kubernetes is built on the declarative model. You submit manifests, typically YAML, that describe the desired state of your objects, and the cluster works out the actions needed to make reality match.

The machinery behind this is the reconciliation loop, also called the control loop. Controllers continuously compare the desired state stored in the cluster against the observed state of the world and act to close any gap. Declare three replicas and a controller creates three Pods. If a node dies and one Pod vanishes, observed state no longer matches desired state, so a replacement is created automatically, with no human involved. This is self-healing, and it falls straight out of the declarative design: because you stated an outcome rather than a procedure, the system can re-achieve that outcome whenever conditions change.

Follow a node failure through to see the timing and which component does what. When a node stops reporting, the node controller marks it not ready or unreachable after a grace period and taints it. Pods carry a default toleration of 300 seconds for that taint, so only after about five minutes are the Pods on the dead node evicted. The ReplicaSet controller then sees fewer running Pods than the desired count and creates replacement Pod objects; the scheduler assigns those new, unbound Pods to healthy nodes, and the kubelet on each node starts their containers. Replacements therefore appear a few minutes after the failure, not instantly. The scheduler never moves a Pod that is already bound to a node: Pods are not migrated, they are replaced.

MechanismWhat it acts onWhat it can fix
Controller reconciliation (e.g. ReplicaSet controller)Cluster-wide desired state stored in the API serverMissing Pods anywhere, including after a whole node is lost
Liveness probe (run by the kubelet)One container on its own nodeRestarts a hung container in place; useless if the node itself is gone
KubeletPods already assigned to its own nodeKeeps those containers running; cannot create Pods elsewhere
SchedulerNew Pods with no node yetPicks a node for each new Pod; never relocates a running one
Admission webhookIncoming API requestsValidates or mutates objects as they are submitted; does not watch for lost Pods

Declarative configuration has a second benefit: the manifests are plain files, so they can live in version control, be reviewed like code, and serve as the audited source of truth for what should be running, an idea that underpins GitOps-style delivery. For KCNA, anchor the pairing in your mind: declarative APIs express desired state, and reconciliation loops continuously drive actual state toward it. A question that describes issuing step-by-step commands is describing the imperative model, not the cloud native default.

Autoscaling: HPA, VPA, Cluster Autoscaler, and KEDA

Elasticity, using just enough resources and scaling with demand, is a core cloud native promise, and Kubernetes offers several autoscalers that are easy to confuse because each one scales a different thing. The Horizontal Pod Autoscaler, HPA, changes the number of Pod replicas, adding Pods when a metric such as CPU utilization is high and removing them when it falls. The Vertical Pod Autoscaler, VPA, keeps the replica count alone and instead right-sizes each Pod, adjusting its CPU and memory requests to match observed usage. The Cluster Autoscaler works at the infrastructure layer: it adds nodes when Pods are pending because no node has room, and removes underused nodes.

AutoscalerWhat it scalesTrigger
HPANumber of Pod replicas (horizontal)CPU, memory, or custom metrics against a target
VPACPU and memory requests of each Pod (vertical)Observed resource usage over time
Cluster AutoscalerNumber of nodes in the clusterPending Pods that cannot be scheduled, or idle nodes
KEDAPod replicas driven by external events, down to zeroEvent sources such as queue depth or messages waiting

Two limits of the standard HPA matter. First, it keeps at least one replica by default: minReplicas defaults to 1. An HPA can only go to zero (the HPAScaleToZero feature, beta and on by default from Kubernetes v1.37) when it scales on an object or external metric, never on CPU or memory alone, because with zero Pods there is nothing reporting CPU to scale back up from. KEDA supplies those external event metrics and handles activation from zero, which is why it remains the usual choice for queue workers. Second, the HPA and the VPA should not both act on the same CPU or memory metric for the same workload: the VPA would change the requests that the HPA's utilization percentage is measured against, and the two would fight. They can run together when the VPA is limited to a different resource, using its controlledResources setting (for example, memory only) while the HPA scales on CPU, or when the HPA scales on a custom or external metric.

KEDA, Kubernetes Event-driven Autoscaling, is the CNCF graduated project that extends horizontal scaling to external event sources. Instead of watching CPU, KEDA can scale a workload on the length of a message queue or similar signals, and unlike a CPU-based HPA it can scale a workload all the way to zero replicas when there is no work. The layers also cooperate: when HPA or KEDA adds Pods and the nodes are full, the Cluster Autoscaler provisions more nodes. Exam mnemonic: HPA is more Pods, VPA is bigger or smaller Pods, Cluster Autoscaler is more nodes, KEDA is Pods on events with scale to zero.

Choosing an autoscaler by symptom

To choose an autoscaler, identify which layer is actually short: replica count, per-Pod size, node capacity, or an event backlog. The same complaint, the service is struggling, can come from any of them, and adding capacity at the wrong layer changes nothing.

SymptomLayer that is shortFix
Average CPU above target, Pods running fineReplica countHPA adds replicas
Pods request far more CPU or memory than they use, or too littlePer-Pod sizeVPA right-sizes requests
HPA raised the desired count but new Pods stay Pending with events such as insufficient cpuNode capacityCluster Autoscaler adds nodes; more replicas cannot help because they cannot be placed
Containers repeatedly OOMKilled while nodes have free memoryPer-Pod memory limitRaise the memory request and limit (by hand or with a VPA); more replicas or nodes do not help, since each Pod still has the same limit
Work waiting in a queue, workers idle at other timesEvent backlogKEDA scales on queue length, including to and from zero

Pending Pods with an insufficient cpu or insufficient memory event mean the scheduler found no node with room for the Pod's requests. Resizing a node group by hand before each expected peak also works, but it is a manual, recurring task that misses unplanned spikes and leaves nodes idle afterwards; the Cluster Autoscaler watches for unschedulable Pods and adds nodes automatically, then removes underused ones. An OOMKilled container, by contrast, was stopped because it exceeded its own memory limit. That is a per-Pod sizing problem, so the fix is vertical: if a CPU-based HPA must stay in place, a VPA limited to memory resolves it without competing with the HPA.

Serverless and scale to zero

Serverless does not mean there are no servers; it means developers stop managing them. In a serverless model you supply code or a container, and the platform handles provisioning, scaling, and availability, spinning capacity up when requests arrive and back down when they stop. Its defining economic feature is scale-to-zero: when there is no traffic, no instances run and, on managed platforms, nothing is billed. Compare that with a conventional Deployment, which keeps its replicas running, and costing, around the clock regardless of demand.

Function as a Service, FaaS, is the most granular serverless form: you deploy individual functions that run in response to events, an HTTP request, a queue message, a file upload, and disappear afterwards. Public cloud FaaS offerings popularized the model, but the pattern is platform-independent, and the cloud native ecosystem brings it to Kubernetes. Knative is the CNCF-hosted project to know here: its Serving component runs request-driven container workloads that autoscale with traffic, including down to zero, and its Eventing component wires event producers to consumers for event-driven architectures.

Serverless has trade-offs worth recognizing. Cold starts, the delay while an instance spins up from zero for the first request, add latency. Workloads must generally be stateless and short-lived, since instances come and go. In exchange you get minimal operational burden and cost that tracks actual usage, which suits spiky, event-driven, or infrequently used workloads especially well. On the exam, scale to zero, event-driven functions, and no server management are the trigger phrases pointing at serverless, and Knative is the Kubernetes-based answer among the options.

The CNCF landscape: placing projects by job

The CNCF landscape organizes the foundation's open source projects, along with the wider ecosystem of products, into categories so you can find the right tool for a job. You do not memorize the landscape for KCNA, but you should be able to place a well-known project by the job it does, and tell apart projects whose jobs sound alike.

JobProjects to know
Orchestration and schedulingKubernetes
Container runtime (runs containers for the kubelet via CRI)containerd, CRI-O
Coordination and key-value store (cluster state)etcd
Service discovery (cluster DNS)CoreDNS
Proxy and service meshEnvoy (the proxy), Istio and Linkerd (meshes)
Networking (CNI)Cilium and other CNI plugins
Storage orchestrationRook
PackagingHelm
Continuous delivery and GitOpsArgo CD, Flux
Metrics and alertingPrometheus, with Alertmanager routing its alerts
LoggingFluentd, Fluent Bit
Telemetry instrumentation and pipelines; tracingOpenTelemetry (SDKs and Collector); Jaeger
PolicyOpen Policy Agent (OPA), with Gatekeeper for Kubernetes admission
Runtime threat detectionFalco
Autoscaling and serverlessKEDA, Knative

Four projects are often confused because all of them watch or judge what happens in a system. Open Policy Agent is a general-purpose policy engine: you write rules in its declarative language, Rego, and any service can ask OPA for an allow or deny decision. That one engine serves Kubernetes admission control (through Gatekeeper), API gateways and microservice authorization, and checks in CI pipelines. Falco does something different: it watches running containers and hosts, typically through kernel system calls, and raises alerts on suspicious runtime behaviour such as a shell spawned inside a container. Alertmanager does not detect anything itself; it receives alerts fired by Prometheus and deduplicates, groups, silences, and routes them to destinations such as chat or paging. The OpenTelemetry Collector is a telemetry pipeline that receives, processes, and exports metrics, logs, and traces; it makes no policy or security decisions. In short: OPA decides whether something is allowed, Falco detects suspicious runtime activity, Alertmanager delivers alerts, and the Collector moves telemetry.

CNCF projects also carry a maturity level (sandbox, incubating, or graduated) that organizations use to judge adoption risk; Kubernetes was the first project to join and to graduate. Maturity levels, the Technical Oversight Committee and CNCF governance are covered in the Cloud Native Community and Collaboration lesson.

Scenario: taking a retail monolith cloud native

Tie the principles together with a concrete case. A retailer runs its store as a monolith on a handful of hand-maintained virtual machines. Every release redeploys the entire application, so releases are rare and risky. During flash sales only the checkout code path is overloaded, but the team must scale the whole monolith, paying for capacity the catalog and search features do not need. Patches are applied to live servers over SSH, and after years of this no two servers are identical, so failures are hard to reproduce.

A cloud native redesign applies each principle you have seen. The monolith is decomposed so that checkout, catalog, and search become separate microservices, each packaged as an immutable container image built by an automated pipeline; nobody patches a running server again, they rebuild and redeploy. The services are described declaratively in versioned manifests, and Kubernetes reconciliation keeps the running state matching them, replacing any Pod that dies. A service mesh gives the calls between checkout, catalog, and search mutual TLS and retries without code changes, while an Ingress controller handles customer traffic entering the store. During a flash sale, the HPA scales only the checkout service's replicas, and the Cluster Autoscaler adds nodes when the existing ones fill; overnight, an event-driven image-processing job scaled by KEDA sits at zero replicas until work arrives in its queue.

The outcomes map straight back to the CNCF definition: loosely coupled services that scale independently, resilience through self-healing and failure isolation, manageability through declarative automation, and frequent, predictable, low-toil change. No single tool delivered this; it is the combination of containers, microservices, immutable artifacts, declarative APIs, and automation, which is precisely the point the KCNA wants you to internalize.

Tip. KCNA tests these principles by recognition and by short scenarios: identify the five techniques in the CNCF definition (and reject popular practices such as GitOps that are not among them), match each autoscaler to what it scales, choose an autoscaler from a symptom, explain which component replaces Pods after a failure, and place CNCF projects by job. Signals include desired state and reconciliation (declarative APIs), replace not patch (immutability), service-to-service mTLS without code changes (service mesh), Pending with insufficient cpu (Cluster Autoscaler), OOMKilled (per-Pod memory, vertical), queue-driven scale to zero (KEDA), request-driven scale to zero (Knative), and allow or deny decisions in Rego (OPA). Distractors often swap HPA and VPA, credit the scheduler or an admission webhook with self-healing, put an API gateway in the east-west path, or claim cloud native requires a public cloud, which the definition contradicts.

Key takeaways
  • The CNCF definition names five techniques: containers, service meshes, microservices, immutable infrastructure, and declarative APIs. GitOps and serverless are popular practices, not among the five.
  • Cloud native systems aim to be loosely coupled, resilient, manageable, and observable, with change driven by automation.
  • Microservices trade operational complexity for independent scaling, deployment, and team autonomy; monoliths are simpler to run and debug.
  • A service mesh handles east-west service-to-service traffic (mTLS, retries, traffic shifting) without code changes; API gateways and Ingress handle north-south traffic entering the application.
  • Immutable infrastructure means replace, not patch: ship a new container image instead of modifying a running instance.
  • Declarative APIs plus reconciliation loops produce self-healing: after a node failure, Pods are evicted after the default 300-second toleration and the ReplicaSet controller creates replacements, which the scheduler places on healthy nodes.
  • HPA scales Pod replicas (minimum one by default; zero only on object or external metrics), VPA right-sizes Pod requests, Cluster Autoscaler changes node count, and KEDA scales on events down to zero.
  • Diagnose by symptom: Pending Pods for lack of CPU need nodes (Cluster Autoscaler); OOMKills need a bigger memory limit, not more replicas. Do not let HPA and VPA act on the same metric.
  • Serverless means no server management and scale-to-zero; Knative brings request-driven and event-driven serverless to Kubernetes.
  • OPA is a general-purpose policy engine (Rego); Falco detects runtime threats; Alertmanager routes Prometheus alerts; the OpenTelemetry Collector moves telemetry.

Frequently asked questions

What is the CNCF definition of cloud native?

The CNCF defines cloud native technologies as those that empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. The definition highlights containers, service meshes, microservices, immutable infrastructure, and declarative APIs as exemplary techniques, and says these produce loosely coupled systems that are resilient, manageable, and observable, allowing engineers to make high-impact changes frequently and predictably through robust automation.

What is the difference between HPA, VPA, and the Cluster Autoscaler?

Each scales a different thing. The Horizontal Pod Autoscaler (HPA) changes the number of Pod replicas based on metrics such as CPU utilization, and by default never goes below one replica (it can reach zero only when it scales on an object or external metric, not on CPU or memory). The Vertical Pod Autoscaler (VPA) keeps the replica count but adjusts each Pod's CPU and memory requests to match observed usage, right-sizing the workload. The Cluster Autoscaler changes the number of nodes in the cluster, adding capacity when Pods are pending with nowhere to schedule and removing underused nodes. KEDA additionally scales replicas on external event sources, including down to zero.

Can the HPA and VPA be used on the same workload?

Not on the same metric. If both the Horizontal Pod Autoscaler and the Vertical Pod Autoscaler act on CPU or memory for one workload, the VPA changes the requests that the HPA's utilization target is measured against, and the two autoscalers work against each other. They can be combined when they act on different signals: for example, the HPA scales replicas on CPU while a VPA restricted with controlledResources to memory only right-sizes memory requests, or the HPA scales on a custom or external metric.

What is the difference between a service mesh and an API gateway?

An API gateway, like an Ingress controller, handles north-south traffic: requests from external clients entering the application, where it applies authentication, rate limits and routing. A service mesh handles east-west traffic: calls between the application's own services inside the cluster, adding mutual TLS, retries and traffic shifting through proxies so that no application code has to change. Internal service-to-service calls do not pass through the edge gateway.

Does serverless mean there are no servers?

No. Servers still exist, but developers no longer provision or manage them. In a serverless model the platform runs your code or container on demand, scales it automatically with traffic, and can scale it to zero instances when there is no work, so idle time costs nothing on managed platforms. Function as a Service (FaaS) is the event-driven, per-function form of serverless, and Knative is the CNCF-hosted project that brings serverless, scale-to-zero workloads to Kubernetes.

What is immutable infrastructure in cloud native computing?

Immutable infrastructure is the practice of never modifying deployed servers or containers in place. To change or fix anything, you build a new versioned artifact, such as a container image, deploy it, and retire the old instance. This eliminates configuration drift, makes deployments reproducible, and makes rollback as simple as redeploying the previous image. It contrasts with mutable infrastructure, where administrators patch and reconfigure live servers, which leads to snowflake systems no one can reliably recreate.

When are microservices a better choice than a monolith?

Microservices pay off when different parts of a system need to scale independently, when multiple teams need to deploy on their own schedules, or when failure isolation between components matters. They cost you operational complexity: network communication, distributed debugging, and the need for orchestration and observability tooling. A monolith remains a sensible choice for small teams and early-stage products because it is simpler to build, deploy, and debug as a single unit.

What is Open Policy Agent used for?

Open Policy Agent (OPA) is a CNCF graduated, general-purpose policy engine. Policies are written in its declarative language, Rego, and any software can query OPA for an allow or deny decision. It is used for Kubernetes admission control through Gatekeeper, for authorization in API gateways and microservices, and for policy checks in CI pipelines. It differs from Falco, which detects suspicious runtime behaviour, and from Alertmanager, which routes Prometheus alerts.

Source

This lesson covers the "Cloud Native Architecture" domain of the official KCNA exam guide. Vendors revise their guides — check the source for the current version.

Test yourself on this topic
Practice now

Sign up free to mark lessons complete, bookmark topics and track your exam readiness.

Spotted a mistake in this lesson?