I spent a lot of time evaluating different ways to deploy an application to the cloud (let's assume AWS for this question) in the last few weeks but couldn't really find a satisfying solution.
We have an imho very standard setup:
- Rails app
- Sidekiq worker
- Auto scaling
Elastic beanstalk is very easy to set up for the rails part, but sucks for sidekiq and cronjobs.
After looking into coreos and all it's features/tools, we're convinced it's the most simple solution. Same docker image for rails, sidekiq and the cron, but all with different
Now, playing around with
fleet and a dozen ec2 instances I can't get my head around the philosophy behind it:
Global units are kinda "bolt-on", not allowing the
status or the
journal command. Also they were introduced not too long ago, suggesting they are not the primary way to handle stuff.
But the only other way would be to run stuff like
Global units work with auto scaling - as soon as a new instance is up and connected to the cluster,
fleet would start the containers (if the metadata matches). But there seems to be no way to update the images without downtime, plus the aforementioned missing commands and tools.
Using the second approach, auto-scaling doesn't bring any benefit, since I have to specify the exact amount of replicas I need. By the way, this seems to be the case with kubernetes as well!?
So, since a lot of huge companies run docker containers, surely auto-scaled (especially Google with kubernetes), how would one set up a simple auto-scaled docker environment, without having to change the number of containers by hand?
Note: I don't even need a very complex answer for stuff like resource management (as ECS does, but that's another story). Really, all I need is a way to have a role on an instance and have a tool that makes sure this instance runs the correct containers, once launched, including rolling updates.
Maybe there's no good answer for this at this point, since I couldn't find anything satisfying on the web, yet. But maybe someone has a few suggestions.