Because of how opinionated Kubernetes is, it may be necessary to change some things if you decide to use Kubernetes as an orchestration tool in an existing application.
Kubernetes works very well with modern environments (such as CoreOS or Red Hat Atomc) which offer lightweight computing nodes that you don't have to manage, since they are managed for you.
Kubernetes is currently supported by Google Compute Engine, Rackspace, Microsoft Azure, and vSphere. Work is being done to support Kubernetes on OpenShift and CloudFoundry.
Kubernetes great for beginners who are just starting to work on clustering. It's probably the quickest and easiest way to start experimenting and learning cluster oriented development.
Being focused on one thing only also has its advantages. For one, Nomad is very simple architecturally. There's only a single binary for both clients and servers, it also does not need any external services for any coordination or storage.
Nomad uses a high-level abstraction of jobs. Jobs are essentially task groups (sets of tasks). Because of this, Nomad allows users to develop and manage complex applications easily, without having to think about the individual containers that make these applications.
While other orchestration tools provide much more than just cluster management and scheduling (they also provide things like secrets management, discovery, monitoring, etc.), Nomad follows the Unix philosophy of doing only one thing and doing it well, providing only cluster management and scheduling.
When working with small clusters (less than a dozen nodes), Mesos may be an over-complicated solution since it's rather low level and designed for large clusters and scaling.
Many modern data processing applications (Hadoop, Kafka, Spark) run very well on Mesos. This is especially nice because they can all be run on the same resource pool, along with new container packaged apps.
Mesos is a battle-proven piece of software which has been used in many large-scale projects (it's used by Twitter, Ebay and AirBnB) and can support hundreds of thousands of nodes.
One of the core principles on which ECS is built is the separation of scheduling logic from state management. This way, you can choose to use the ECS schedulers, write your own or even integrate third-party schedulers.
Initially you have to create the EC2 instances that you wish to put in your ECS cluster, using the AMI so that they have the ECS agent on them. However, you have to prescale that specific cluster manually after that.