Kubernetes fundamentals
Kubernetes is often introduced as a container orchestrator. That description is accurate, but it is too small to explain why the technology has become central to platform engineering. In production, Kubernetes is a distributed control system: a set of APIs, controllers, schedules, network rules, and operational conventions that continuously reconcile the desired state of an application with the infrastructure that runs it.
Understanding this architecture matters before a team selects a managed service, designs a cluster, or migrates an application. A cluster can hide infrastructure complexity, but it cannot remove decisions about ownership, boundaries, observability, resilience, or security. This guide explains the components that matter, how they work together, and where sound architecture begins.
1. Start with the desired-state model
Traditional deployment scripts describe a sequence: create a server, copy an artifact, restart a process. Kubernetes instead asks teams to describe the outcome they want. A manifest says that an application should have three healthy replicas, accept traffic through a named service, use a specific configuration, and be allowed to reach only selected dependencies. The platform then works continuously to make that state true.
This distinction is more than syntax. Desired state makes recovery and change repeatable. When a node disappears, the scheduler finds capacity elsewhere. When a container exits, a controller starts a replacement. When a new version is declared, a Deployment rolls it out according to the configured strategy. Teams stop treating every operational event as a unique repair and start operating a system with clear, testable rules.
API server, scheduler, controllers, state store
kubelet · Pods · runtime
kubelet · Pods · runtime
kubelet · Pods · runtime
2. The control plane is the cluster's decision-making system
The control plane exposes the Kubernetes API and maintains the authoritative record of the cluster. Developers, automation pipelines, and operational tools submit requests to the API server. These requests are validated, authorised, persisted, and observed by controllers that drive the actual state toward the requested state.
The API server is the front door. It should be treated as the only supported way to change cluster resources, rather than something applications access directly. Behind it sits the cluster state store, typically etcd, which keeps the configuration and current state required to rebuild the cluster's understanding after a component restarts. Managed offerings protect it for you, while self-managed clusters require disciplined backup, encryption, and recovery testing.
The scheduler decides where newly created Pods should run. It considers available resources, affinity and anti-affinity rules, topology spread constraints, taints, tolerations, and other policies. The scheduler does not make an application highly available by itself. A workload must express its intent, for example by requesting replicas across availability zones and preventing replicas from sharing the same failure domain.
Controllers are the quiet machinery behind the experience. A Deployment controller creates ReplicaSets; ReplicaSets keep the requested number of Pods available; Job controllers track finite work; StatefulSet controllers preserve stable identity for stateful replicas. Each watches the API for a difference between desired and observed state, then takes the smallest action needed to reduce that difference. This reconciliation loop is the architectural heart of Kubernetes.
3. Worker nodes provide execution capacity
Worker nodes are the machines that run application Pods. They may be virtual machines, bare-metal servers, or provider-managed compute. Every node runs a kubelet, which watches for Pods assigned to that node and asks the container runtime to start them. Nodes also run networking components that make Services reachable and apply network rules.
A Pod is the smallest deployable unit in Kubernetes. It usually contains one application container, but it can also include tightly coupled helpers such as a log shipper, proxy, or initialization task. Containers in a Pod share an IP address and can share volumes. This is why Pods should not be treated as durable servers: they are intentionally replaceable, and a new instance can receive a new address at any time.
Resource requests and limits are essential architectural inputs. A request tells the scheduler how much CPU and memory must be available before placing a Pod. A limit constrains the maximum it may consume. Without realistic requests, the scheduler can over-pack nodes and create noisy failures under load. Without carefully chosen limits, a faulty workload can pressure the whole node. Teams should derive these values from measurements, then revise them as traffic and code change.
4. Services and gateways make dynamic workloads reachable
Because Pods are ephemeral, applications should not connect to Pod addresses directly. A Kubernetes Service provides a stable name and virtual address in front of a changing group of matching Pods. Internal clients resolve the Service through cluster DNS and the platform distributes traffic to healthy endpoints. This gives developers a dependable service-discovery contract while allowing the underlying Pods to scale, roll, and recover.
Ingress and Gateway API resources govern traffic arriving from outside the cluster. An ingress controller or gateway implementation performs the actual routing, TLS termination, and policy enforcement. The Kubernetes resource is only the declaration; choosing and operating the corresponding controller remains a platform responsibility. For public systems, teams should be explicit about TLS certificates, rate limits, web application protections, timeouts, and how the entry point is exposed across zones.
stable DNS and endpoints
application replicas
5. Networking is a security and reliability boundary
Every Kubernetes installation needs a container networking interface, or CNI, to give Pods routable connectivity. The implementation varies, but the architecture should answer the same questions: which workloads may talk to which services, how traffic crosses cluster boundaries, where encryption occurs, and how operators observe a failing request.
NetworkPolicies express allowed traffic between namespaces, Pods, and external destinations. They are only effective when the selected CNI enforces them, so a policy document without an enforcement-capable implementation creates a false sense of security. A practical baseline is default-deny ingress for sensitive namespaces, then explicit rules for DNS, ingress controllers, data stores, and required service-to-service calls. Start narrowly but validate policy changes in delivery pipelines to avoid accidental outages.
For multi-cluster or hybrid environments, avoid assuming that a larger network automatically means a better architecture. Clusters need intentional connectivity contracts. An application should know whether it calls a local service, a managed cloud dependency, or an API in another region. Clear DNS names, controlled egress, and trace propagation make these boundaries understandable when the system is under pressure.
6. Storage must match the workload's recovery model
Kubernetes makes it easy to attach storage through PersistentVolumes and PersistentVolumeClaims, but persistence is not the same as a data strategy. A claim gives a Pod a storage contract; it does not decide backup frequency, restore objectives, replication, encryption, or data ownership. Those are application and platform decisions that must be designed together.
Stateless services are usually the best first workloads for Kubernetes because they can be replaced freely and store durable data in managed databases or object storage. Stateful systems can run successfully in Kubernetes, particularly when they need locality or a mature operator, but they demand more operational skill. Before placing a database in the cluster, compare the operational burden with a managed alternative and test an actual restore, not just a backup job.
7. Namespaces, identity, and policy create boundaries
A namespace is a logical boundary for names, access controls, quotas, and policies. It is useful for separating teams, environments, and workload classes, but it is not an automatic security wall. Strong multi-tenancy combines namespaces with role-based access control, network policy, resource quotas, pod security controls, and cloud identity rules.
Role-based access control should follow least privilege. A delivery identity needs permission to update only the resources it owns, while a developer debugging a service may need read access to logs and events but not the ability to alter production secrets. Avoid broad cluster-admin access for convenience. It creates an unclear audit trail and makes a small operational mistake capable of affecting every workload.
Secrets deserve the same care. Kubernetes Secrets are an API object, not a complete secrets-management programme. Use encryption at rest, restrict read permissions, avoid putting secret values in source control, and integrate with a dedicated secret manager when the environment needs rotation, auditability, or short-lived credentials. Workload identity is preferable to embedding cloud credentials in a Pod because the platform can issue scoped identity at runtime.
8. Production operations require feedback loops
A healthy cluster is observable at several layers. Platform teams need control-plane health, node capacity, scheduling failures, network behaviour, and storage events. Application teams need request rate, latency, errors, saturation, logs, traces, and business outcomes. These views must connect: an alert about slow checkout requests should make it possible to determine whether the cause is code, a downstream dependency, a network policy, or a node-level constraint.
Readiness and liveness probes are part of that feedback loop. A readiness probe determines whether a Pod should receive traffic. A liveness probe can restart a process that is genuinely stuck. Misusing liveness probes for slow-starting applications can create restart loops, so health checks should reflect the application's real lifecycle. Startup probes are often a better guard for applications that need time to warm caches, compile assets, or establish dependencies.
Autoscaling should be built on observable demand rather than optimism. Horizontal Pod Autoscaling can react to CPU, memory, or custom metrics; cluster autoscaling adds or removes node capacity; vertical recommendations can guide resource tuning. Each layer has delays and limits. Capacity planning still matters, particularly for peak traffic, large deployments, and workloads that cannot be interrupted.
9. A practical architecture blueprint
For many organisations, a sensible first production architecture is a managed, regional Kubernetes service running across multiple availability zones. The cloud provider operates the control plane. Worker nodes are separated into pools for general workloads, system services, and specialised compute where needed. Public traffic enters through a managed load balancer and a supported gateway or ingress controller. Applications use managed databases and object storage unless there is a strong operational reason to run data services in the cluster.
Delivery pipelines build an immutable container image, scan it, publish it to a registry, and update a versioned deployment definition. GitOps tooling can then reconcile the declared configuration into the cluster, creating a reviewable and auditable route from source change to running workload. Promotion between environments should use the same deployment mechanism with environment-specific configuration kept separate from application code.
None of these components creates reliability alone. Reliability emerges from practiced recovery: testing a rollout failure, removing a node, restoring data, expiring a credential, and verifying that alerts reach people who can act. A platform that only works in the happy path is a demonstration, not production architecture.
10. Questions to answer before adopting Kubernetes
- Which workloads benefit from orchestration, and which are simpler as managed services or conventional deployments?
- Who owns the platform, its upgrades, network policies, and incident response?
- How will teams manage identities, secrets, images, and third-party dependencies?
- What availability, recovery, latency, and compliance objectives must the architecture meet?
- How will developers safely request capacity and deploy without broad cluster access?
- Which dashboards, alerts, runbooks, and recovery exercises prove that the platform is operating as intended?
Kubernetes is powerful because it provides consistent primitives for a large number of application teams and services. Its value is highest when those primitives support a clear operating model. Start with a small set of well-understood workloads, establish secure defaults, document ownership boundaries, and grow the platform only as the organisation can operate it with confidence.