What is a Pod
A pod is a group of one or more containers that share the same network namespace and can share storage volumes. It is the smallest deployable unit in Kubernetes — you do not deploy individual containers, you deploy pods.
How it works
All containers in a pod share the same network namespace. They communicate over localhost and share the same IP address and port space. A web server and a log shipper in the same pod reach each other at 127.0.0.1 without any networking configuration.
Kubernetes creates a pod by first starting a special pause container that holds the shared namespaces. Application containers join the pause container's namespaces via setns(). If an application container crashes, the shared namespaces survive because the pause container keeps them alive.
Pods can also share storage volumes. A volume mounted by one container in the pod is accessible to all containers in that pod. This enables sidecar patterns — a main container writes logs to a shared volume, a sidecar container reads and ships them.
Pods are ephemeral. When a pod is deleted, all its containers are stopped and its resources are freed. Deployments and StatefulSets manage pod lifecycle — creating replacements when pods fail.
Why it matters
Pods model tightly-coupled processes that must share resources. The sidecar pattern (log shippers, proxies, config reloaders alongside the main application), init containers (setup tasks before the main container starts), and ambassador patterns all depend on pod-level sharing. Understanding pods explains why Kubernetes does not schedule individual containers.
See How Containers Work for the underlying namespace and cgroup mechanics.