Gravitational (YC S15): Software On-Prem or in Cloud from Single Code Base
techcrunch.com
techcrunch.com
1) We think developers have had to take on too much responsibility for operating the software they build (DevOps). We hope to create more clearly defined roles for developers and operators through better tooling for operators.
2) A lot of the engineering challenges with SaaS comes from multi-tenancy, which is one of the reasons Dev and Ops have merged into one role.
3) A big reason to use cloud software is that you (as a user) don't have to operate it but that has been conflated with the requirement that you need to give up control of your data.
4) Adoption of containers (Docker[0], Rkt[1]) and container orchestration (Mesos[2], Kubernetes[3]) technology have created the opportunity to rethink the traditional model for delivering and operating software.
[1]: https://github.com/coreos/rkt
Edit: added some examples of container and orchestration tech with links
We've built some manual deployment scripts for creating new instances, but having to build everything ourselves has been time-prohibitive. I really wish I could find some ready-made tools for our use case.
Shoot me an email to ev@kontsevoy.com, will be glad to chat more about this.
1. Package your per-tenant application into a Kubernetes
pod (think of it as a lightweight VM, a collection of
Docker containers running on a same host).
2. Write a request router: someone needs to look up tenants
based on the virtual hostname in a request.
3. Use k8s API to find a pod with label == tenant. If
doesn't exist -> create one.
4. Forward the request there.
I'd imagine you'll have to "garbage collect" and gracefully shutdown pods when they sit idle for a while. I'd probably pack that logic into a pod itself.But now I see that Pods support some really interesting data volume management systems that could support moving it around if we need to migrate Pods between hosts.
Thanks!
...except we decided against using these PaaSes and placed a bet on Kubernetes.
In fact, our belief is that developers should think less about orchestration and let other people do the work. Kubernetes offers a perfect set of abstractions to make this thinking practical.
I'd recommend checking them out too since they're Docker based and have a significant roster: Travis, NPM, Code Climate, etc.
[0]: https://www.youtube.com/watch?v=V6e_A9VzPy8
Some questions:
All based on what we do at Kentik, where we run a large distributed column store with high speed data ingest layers feeding it, and a relatively more easy core cluster of portal/high-level metadata nodes. Ingest nodes are 20 core low-disk and data nodes 36-core 24x2tb disk w/ ZFS, which we rely on for compression.
We use docker but on top of known equipment types of deterministic latency and performance. Machines are netbooted and much of the system is controlled by puppet push. Typical clusters range from 10 to low hundreds of nodes. We do on-prem but they are typically on top of bare metal and using our control stack.
So with that as background...
For an application that requires high speed native (in particular disk) performance and persistent disk to run, how is Gravitational requiring that at deployment time?
Is there an ability to add metrics to dashboards for on-prem 'operators' to access? Send those through logged mail gateways for SaaS companies to watch on-prem status remotely, at least at an aggregate level (dashboards plus perhaps some log excerpts)? Have part-time (customer-controlled) logged ssh gateways for supervised and/or logged remote access by SaaSco engineers?
How do you do versioning, deployment, and distributed rollout to running systems with 24x7x100% uptime expectation? Is there the ability to support partial upgrade of only some nodes of specific roles followed by automated and/or human checks? How about rollback?
Thanks, and good luck with the company!
I'll try to be concise:
- There is no performance penalty.
- We can do hardware profiling prior to installation/upgrade to
guarantee capabilities as defined in the system requirements
for an application.
- Updates are applied in a "rolling" fashion with rollbacks in
case of a failure.
- No, I am afraid we cannot not do 24x7x100% the application needs
to be designed to deliver this.
Happy to dive into the details. Your profile doesn't have an email address listed, ping me at ev@gravitational.com!So HW profiles can include IOPS and throughput testing, disk space, etc?
The 24x7x100% is more of a concern re: not restarting all VMs at once, or at least being able to specify subsets and rollout orders.
Will take to email to discuss further.
thanks
We port your application deployment to work with Google Kubernetes. As long as the app works on Kubernetes it works with us too on AWS, Google cloud compute and bare metal servers.
Is the business model taking over the management of on site SaaS applications?
If so, what's the difference between this and outsourcing maintenance (i.e devops) of your application to a third party?
Our objective is to enable operators (whether the operators are at the software vendor or at third parties) to maintain applications across many environments, effectively.
Once the application is ported, operations becomes much more efficient and increases the odds of success if a third party is operating it.
Just asking because I was in the planning stages for something and this was the first step to what I wanted to achieve. I don't know if it's worth learning Docker/Kubernetes or signing up for something like this before I've coded anything.
Docker and Kubernetes are fine tools for deploying and orchestrating an application into an environment you have full control over (typical SaaS scenario). Our "distribution" of Kubernetes is optimized for running in "hostile" unknown environments with varied networks, storage, etc. It comes in HA-configuration with self-updating and self-monitoring turned on.
Secondly, once you have thousands of instances deployed across the globe, we give you unified and secure remote access to do ops in a scalable way. The true cost of going on-prem is not deployment (it's not that hard, you're right: Kubernetes does most of the heavy lifting).
The true cost of going multi-region/on-prem is operations. And, of course, the security complications that come with it. Our OpsCenter tackles this problem: it gives you access to thousands of absolutely identical instances of your app, while staying compliant with on-site security policies.
Give us a call, we'll have a solution engineer spend some time with your team and we'll do all of the integration work.
The end result: you have the same codebase which runs in your own 5 AWS regions, plus 5000 on-prem locations, and you don't need to:
a) fork your codebase
b) hire a ton of ops engineers