why don't you consider nomad[0] in your evaluations. i think it should fit your requirement.
You'll still get layer-upon-layer of abstraction - for example Consul for key-value and service discovery, Traefik for load balancing, Terraform to build up the service discovery rules, etc - but it feels somewhat more intentful, less boilerplate.