What's the best choice with rancher : Cattle, Swarm or K8S?

After almost 1.5 year of Rancher utilization with Cattle orchestration, we are asking ourselves if we are not missing something using another orchestrator.

We are using Rancher for managing our microservices architecture in an AWS infrastructure (about 200 microservices). Topology is persisted in Consul which automatically updates Application Load Balancer through a little homemade python service.

Until now we are completly satisfied with rancher/cattle … except for 2 points :

1-DNS Load Balancing : This very attractive feature does’nt work at all. When I call a nodejs Service B from an other nodejs service A, if I scale up service B, each call always arrives on the same instance.

2-Automatic rebalancing : Our EC2 are in auto-scaling groups. So if we scale down from 3 VM to 1 VM for example, each container is reallocated on the last VM. But if we scale up from 1 to 3 VM, existing containers are not redispatch to the newly created VMs.

Those 2 points are very annoying, but we deal with it.

So, my questions are :

1- I think that I know the response, but do you think that those two points above can be fixed if we switch to K8S or swarm?
2 - Which orchestrator do you prefer?
3 - What are the features of K8S/Swarm in rancher that makes it the best choice among the 3 orchestrators.

Thank you for your advice


Hi @cabrinoob, I suggest you read and check out this small gem!

@davidoster : Thank you, I know this proxy. But I was talking about the load balancing between services inside a stack not from outside.

The promise of the DNS loadbalancing I was talking about is when you have for example 3 services in a stack with 2 of them that are private. The DNS load balancing between those private containers was a very attractive feature because you can balance trafic between services via DNS, so without having a HAProxy or a traefic container between them.

This is actually a problem with DNS and node and not a problem with Rancher.
Once node gets the DNS address of your services it tends to remember them. You can change the resolve configuration so that it forgets the DNS and relooks it up more regularly if needed to. Personally I just put a haproxy between my services as it is very low latency and will will pickup the new services after scaling that DNS won’t.