Kubernetes and Docker are not competing techonlogies. Docker is just a container runtime, bundled with extra tools to also build container images. Kubernetes "can use" docker as an option for its container runtime, which is what most people do in practice.
That said, Kubernetes adds a whole new layer dedicated to container orchestration, integration and automation. It addresses multiple concerns you would have to handle anyway if you decided to use plain Docker. Some of that includes: self-healing, health checks, workload distribution, auto scaling, blue/green application updates, native support for stateful or stateless applications, a framework for a variety of ingress controllers, cluster-wide application configuration, integration with storage providers, RBAC authorization for cluster management... it's a pretty big list.
It doesn't necessarily add anything new with respect to the applications themselves, such as caching, gateways or metrics... anymore than you would be able to with Docker. Except, with plain Docker, you would need to set things up yourself in your own way, while Kubernetes provides the necessary tools to automate most of it. Integrated solutions, like reverse proxies, elasticsearch, redis, prometheus, etc. they just leverage that potential for automation.