Hacker News new | ask | show | jobs
by mkopinsky 1703 days ago
So far I've kept things simple, avoided k8s/HashiStack/etc by using docker compose with a simple docker-compose.yml for each server. This has been working well, but I'm starting to feel the pain points - HA requires copy-pasting yaml, I need to specify which services are on each server, and so on.

What's the simplest next step I can take? I'd like something with (close to) the simplicity of docker compose, but ideally being able to specify something like `instances: 2` and being able to route/load-balance to those instances from another service.

2 comments

Assuming serverless is out if the question for your use case, have you tried spending a couple of days investigating a managed Kubernetes cluster with node autoscaling enabled? EKS, AKS, GKE...

Honestly it sounds like you could be at the point where K8s is worthwhile.

I'm considering k8s, but that also means moving services from on-prem to AKS, getting INF to open up the necessary firewall rules to make the services reachable from on-prem, and so on. And as you said, it's definitely days of investigation. I'm not closed to the option.
You might also want to consider one of the simpler pre-packaged solutions for small k8s on premise clusters (like k3s)
You should be ok with consul, ansible and templating your docker-compose files. Might take some time to set it all up, but should be ok.
Thanks for the suggestion.

Any suggested starting points for my research? DDG search for "ansible docker-compose" brings up some suggestions like [1] and [2] but I'm curious if you have other suggestions.

And just so I understand how these work together - I'd use Jenkins+ansible to push containers to my servers, I'd run consul within docker as well, and ... would Ansible register services with consul as it pushes them? Do the services need to be modified to speak with consul directly?

[1] https://docs.ansible.com/ansible/latest/collections/communit... [2] https://www.ansible.com/blog/six-ways-ansible-makes-docker-c...

Missed the whole consul part of the question. To register services you can: 1. You can use ansible module [0] 2. Use a template to create json files or suing http API [1] 3. Registrator. Project is old but still works well. [2]

> Do the services need to be modified to speak with consul directly?.

I am not sure that i get you, but had no such need when migrating legacy stuff.

[0] https://docs.ansible.com/ansible/latest/collections/communit... [1] https://learn.hashicorp.com/tutorials/consul/get-started-ser... [2] https://github.com/gliderlabs/registrator

you can check out ansible templating engine that ansible uses - jinja2 [1]. And the templating module itself[2]. But if you are not well versed with ansible check out Jeff Geerling's "Ansible 101" [3].

[1] https://jinja.palletsprojects.com/en/3.0.x/

[2] https://docs.ansible.com/ansible/2.9/modules/template_module...

[3] https://youtu.be/goclfp6a2IQ