The pod, and why it is not a container
The smallest deployable unit is a pod, not a container, and the difference is deliberate.
A pod is one or more containers that share namespaces: the same network namespace, so they share an IP and can reach each other on localhost, and optionally shared volumes. They are always scheduled onto the same node and started and stopped together.
So a pod is essentially the group of processes that would have been one machine's worth of tightly coupled work.
The reason for the extra layer is that some things genuinely belong together and should not be one image. A sidecar pattern puts a proxy, a log shipper or a credential refresher alongside the application: separate images, separate lifecycles in the build sense, but co-located and sharing the network at run time.
The rule for deciding is whether the pieces must scale together. An application and its log shipper do; an application and its database do not, and putting them in one pod means scaling the database whenever you scale the app.
The important property for everything that follows: a pod is mortal and never restarted. It is created, it runs, it dies. Something else creates a replacement, and the replacement is a different pod with a different name and a different IP.

