Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

No, as @dragonsh said, Kubernetes will be a bad choice for you. Kubernetes is complex, specially its network stack, you'll need to setup an VPN from each site to your control plane site to keep some basic functionality working (kubectl logs, for example).

If you don't care about a centralized API to probe status and manage each instance, Ansible should be enough to orchestrate these installations and with little effort (that also depends on the application at hand) getting zero-downtime rollouts with Docker can be easily done with it.

However, if you want a single control place to probe status and want to avoid writing your own rollout scripts, Hashicorp's Nomad [1] might be a good solution for this. It is a lot simpler than Kubernetes while still giving you nice primitives to describe jobs/services, health checks, rollouts strategies and etc. Treat every site as a datacenter of its own, setup a job of type "system" (akin to Kubernetes DaemonSets) and all you need on these sites is internet access to your HTTPS endpoint of the Nomad control plane.

If you want to talk more about this, hit me up on Twitter or Telegram, I use @rochacon as my handle virtually everywhere.

[1] https://www.nomadproject.io

Edit: grammar and typos



Agreed, Nomad seems perfect for most use cases where cluster management, deployments and rollouts is required.

It's a bit overlooked now because every DevOps person nowadays seem to think Kubernetes is the only rational thing as it will look good on a CV.

I predict Nomad will be on the upswing the next few years as people realize Kubernetes is extremely complicated to self host.


How can zero downtime deploys be done with Docker?

I had to write my own custom blue/green deploy script to hot reload traffic to proxy_pass definitions in nginx upstream configs since I don’t use Docker.


IIRC, if you use docker swarm it wil handle the routing for you. So if an app is running on port 8080 on two swarm nodes, if you access port 8080 on each node, you might actually be accessing another node.

Since docker swarm knows if an instance is down, it will know to not use that instance.

See https://docs.docker.com/engine/swarm/ingress/


I run on Docker Swarm and there are hiccups as one container goes up and another goes down during deployment.


I think you can try a tool like Envoy for doing routing between versions plus some other custom stuff.


At my job, the devops team had to write some kind of special program that maps whether a Marathon/Mesos instance is up when dealing with Envoy. Not sure if the same is required for just plain Docker?


I would also investigate Terraform if the Ansible path appeals to you.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: