In a world where everything must be distributed across multiple servers, datacenters and continents the task of managing & monitoring server state has become significantly more complex.
Hundreds of solutions have spawned in recent years - and in general these tools can be split into two groups: those with, and those without, agents on the target servers. I'm writing this post to argue in favour of the agentless tools.
One shouldn't need to install (sometimes closed source!) software on a server to have it managed or monitored. Agents take up precious CPU, memory and disk space which should be reserved for the actual thing the server is meant to be doing. Then there's updates - does it make sense to have to update every server to fix a bug in the agent? With an agentless tool you'd just update a client or have the service provider handle it for you.
Take Sensu for example, it weighs in at ~30MB of package data (via apt) including a full Ruby interpreter. And then there's the check files - every time these change they need to be synced to all the servers that use them. The problem really begins to manifest at scale, where deploying such changes takes a non-trivial amount of time.
Another good example of "agent bloat" is Chef (which also bundles it's own Ruby interpreter) - the base
Read more →
ubuntu Docker image weighs in at a cool 126MB - not too shabby. Want to install stuff on it with Chef solo? You might try the
linuxkonsult/chef-solo image - it's 671MB. That's a whopping 545MB of pointless bloat!
I love Docker. I've recently spent a lot of time learning about both Docker & Kubernetes. Combined with stateless containers they provide fantastic scalability, service discovery and near-instant deploy times (excluding initial image build!).
There is a trend, however, of using Docker containers for everything, and this makes no sense to me.
Let's look at an example - running a Docker Registry (v2). I want to:
- Run a single instance of the Go binary
- On a box with huge disk space & bandwidth
- And relatively low CPU/memory
I don't want such a box in my Kubernetes cluster (it's a one-off), and I need none of Dockers scaling properties, so I'll run it direct on hardware.
Well, guess what? There's no install instructions for that. In fact, the "official" way is use the Docker image. Luckily the
Read more →
Dockerfile isn't much more than a limited shell script, so following the trail of docker/distribution -> Registry Image -> Dockerfile I was able to recover manual install instructions (all two of them).