Running a modern infrastructure stack
blog.barricade.io
blog.barricade.io
Author here, I suspect all this means is that Datadog's marketing is as effective as their product.
It's rare I give any software or service truly glowing praise. Rare enough that I'm pleased to do so at any opportunity I get.
Stackbuilder!
https://github.com/tim-group/stackbuilder
The docs for Stackbuilder are still horrible, but here's an example stack:
https://github.com/tim-group/stackbuilder-config-example/blo...
Assuming you have a compute fabric in place, running a script like that through the tool will provision and configure VMs for all the parts of a production system: it knows about Java applications (started with java -jar), Apache proxy servers, Linux NAT, IPVS load balancing, MySQL databases, Puppetmasters, and possibly other things. The fabric provides KVM for VMs, and BIND for DNS, controlled via some custom MCollective plugins. Configuration is done via Puppet, but Stackbuilder creates the Puppetmaster as part of the build. Application firewalls and Nagios checks get configured as part of the build, but i can't remember if it's Stackbuilder itself that does that, or some of the Puppet code.
BOSH is the same space:
Again, it requires an existing fabric, but that can be plain AWS or OpenStack (or VMware). It can then build anything you can write a manifest for; it operates at a lower level of abstraction than Stackbuilder.
On the one hand, they don't have all the same higher-level services as AWS, like ELB, let alone managed database services. On the other hand, I don't think I'd sleep well running anything based on EBS ever again, since EBS is so notorious for cascading failures.
AWS is a known quantity to me, Joyent is unfortunately not. I have a lot of time for Bryan Cantrill though, so I'm sure they're doing good stuff - I just don't have the extra cognitive cycles to handle a whole new base layer on top of all the scheduler / container stuff right now.
- Whether they provide some kind of built-in service discovery.
- Whether all existing Mesos frameworks will support Triton based Mesos deployment since many frameworks make use of different networking modes, docker storage engine.
1. Using AWS services where we can (DynamoDB)
2. Provisioning more "traditionally" to instances, and managing those independently of the Mesos scheduler
3. Experimenting with scheduler based solutions[1] (which are still pretty bleeding edge, but are promising)
As I mentioned, EMC are (to me) doing the most interesting stuff here[2] because they're leaning on a lot of existing production systems like EBS and Mesos' own scheduler.
[1]: https://github.com/mesos/elasticsearch
[2]: http://blog.emccode.com/2015/10/08/enabling-external-volume-...
I'll be keeping on top of these developments, but for now, managing yourself or leaning on AWS services is definitely the pragmatic decision.
[1]: https://github.com/mesos/kafka
So you can write a BOSH 'release' which is a script for setting up a database cluster with all the necessary, like this:
https://github.com/cloudfoundry/cf-mysql-release
However, you have to buy into BOSH and CF to make use of this
Also, most of the interesting and high-quality services are part of Pivotal's paid version of CF. Which might well be worth the money - many of the services are built by colleagues of mine, and i can assure you that they are of the finest quality! If not, there are a bunch of open-source contributed services. For example, a metrics service with InfluxDB and Grafana:
https://github.com/cloudfoundry-community/metrics-boshreleas...
A logging service with Logstash and Elasticsearch:
https://github.com/cloudfoundry-community/logstash-docker-bo...
PostgreSQL:
https://github.com/cloudfoundry-community/postgresql-docker-...
I have no idea how highly-available and resilient these are, though. It's much harder to write an HA service release than a normal one.
In my defence, the Cloud Foundry services are the only serious attempt I'm aware of to package highly available database setups for deployment on your own infrastructure, and that's something I really want to see become commonplace. I'd be even happier if some other group came along and did it in a way not tied to Cloud Foundry or BOSH, Ansible playbooks or something. But as yet, as far as I know, they haven't.
On the subject of kubernetes and heterogeneous environments, kubernetes itself may allow a mix of instance types (node types) in a cluster, but as implemented in GKE for example it does not. I believe ECS has similar constraints. Our response has been to think in terms of separate clusters for services, edge routing, persistence, etc.
I also appreciate the end where Ross talks about limiting the amount of innovation and trying to be practical whenever possible. Too many people are completely reactive to technology and using it only trades out one set of problems for another because it all has to work together.
The design on the blog and main barricade site is really awesome too. Great post!
If you are using containers, you need to create proper users presumably. Or you need to give all the permissions to the instance.
Maybe this isn't a problem in practice because people group related services together into separate orchestration clusters (i.e. a Kubernetes for each service grouping).
But it would be great to hear some real experiences on this.
Can I ask you to expand on this a little? There are a bunch of cloud log management solutions, and I'm not sure what makes any of them Stripe equivalent or not.