I would like to do some cloud processing on a very small cluster of machines (<5). This processing should be based on 'jobs', where jobs are parameterized scripts that run in a certain docker environment. As an example for what a job could be:
- Run in docker image "my_machine_learning_docker"
- Download some machine learning dataset from an internal server
- Train some neural network on the dataset
- Produce a result and upload it to a server again.
My use cases are not limited to machine learning however. A job could also be:
- Run in docker image "my_image_processing_docker"
- Download a certain amount of images from some folder on a machine.
- Run some image optimization algorithm on each of the images.
- Upload the processed images to another server.
Now what I am looking for is some framework/tool, that keeps track of the compute servers, that receives my jobs and dispatches them to an available server. Advanced priorization, load management or something is not really required. It should be possible to query the status of jobs and of the servers via an API (I want to do this from NodeJS). Potentially, I could imagine this framework/tool to dynamically spin up these compute servers in in AWS, Azure or something. That would not be a hard requirement though.
I would also like to host this solution myself. So I am not looking for a commercial solution for this.
Now I have done some research, and what I am trying to do has similarities with many, many existing projects, but I have not "quite" found what I am looking for. Similar things I have found were (selection):
- CI/CD solutions such as Jenkins/Gitlab CI. Very similar, but it seems to be tailored very much towards the CI/CD case, and I am not sure whether it is such a good idea to abuse a CI/CD solution for what I am trying to do.
- Kubernetes: Appears to be able to do this somehow, but is said to be very complex. It also looks like overkill for what I am trying to do.
- Nomad: Appears to be the best fit so far, but it has some proprietary vibes that I am not very much a fan of. Also it still feels a bit complex...
In general, there are many many different projects and frameworks, and it is difficult to find out what the simplest solution is for what I am trying to do.
Can anyone suggest anything or point me in a direction?
Thank you