Kubernetes is a container orchestration tool. Engineers describe the end state of the system using Kubernetes objects, and Kubernetes figures out how to achieve that state itself. It also takes the necessary steps to maintain the state despite the constant change in the underlying physical infrastructure. Developers don’t prescribe the steps for Kubernetes the way they do for Chef and Puppet.
Kubernetes abstracts your hardware infrastructure away and exposes your fleet of machines as a single system. It selects the appropriate nodes for your application components and maintains the state as described by engineers and DevOps. Kubernetes is like an operating system for computer clusters.
One small but practical difference from Docker: Kubernetes never restarts a container. If a container is stopped for any reason - crashed or exited with code 0 - Kubernetes discards the old container and creates a new one. In Docker, you can restart a stopped container.