Deis v1.0 – Production Ready
deis.io
deis.io
That being said, I'm a little confused as to how Deis can be considered production ready when the underlying infrastructure (Etcd and Fleet from CoreOS) aren't. Both are making great progress, and I wouldn't worry too much about using them directly, but "production ready" abstractions on top of something maybe-not-so-production-ready makes me cringe a tiny bit.
https://github.com/coreos/etcd/blob/master/Documentation/pro...
As early adopters of these technologies, we have strong relationships (and often formal L3 support) with the teams involved. We are often the first to report issues as well as the first to test fixes. You can view this announcement as a vote of confidence in those projects and our ability to roll out fixes as bugs surface.
Hope to see you back in the #deis channel soon!
https://github.com/deis/deis/releases
https://github.com/boot2docker/boot2docker/issues/571
https://github.com/deis/deis/issues/2230
Why not wait until that is resolved before announcing production ready? :-(Couple questions:
1. What about storage? I know you use ceph for the Docker registry, etc. Is that exposed so that apps can somehow use it?
2. When I tried it, performance was kind of lacking (for things like pushing apps and making config changes). Was this just a limitation of my setup (I used 3x2GB DigitalOcean nodes) or something you guys are working out?
Thanks again!
1) we expose ceph in the router, so your apps could use it. This will have to be managed by you however as we don't have a user story for plugging apps into backing services asides from `deis config:set`[1]... Yet.
2) Performance is still something we're working on. When you deploy an application using a Heroku buildpack[2], your app is compiled into a container which sits on top of Heroku's cedar stack, which is around 800MB[3]. It's a beefy stack so fleet will take some time deploying that image. This should only occur the first time it's scheduled onto a new host as future images will just use the cache for that image, significantly speeding up deployment times. If you deploy an app using a Dockerfile and it's been optimized correctly (we have an app sitting under 5MB for test purposes)[4], deployment times should be very speedy.
Hope that answers your question!
[1]: https://github.com/deis/deis/issues/231
[2]: http://docs.deis.io/en/latest/using_deis/using-buildpacks/
Content Management Systems like Drupal or Wordpress typically store file uploads or configuration files directly onto the filesystem. With Deis or any other PaaS, this filesystem is ephemeral unless there is a shared filesystem mounted inside the container, typically via SSHFS[2] or some other remote filesystem.
We want to tackle this problem with a service gateway[3] for apps to attach backing services like a shared filesystem, but for the moment there's always S3 :)
[1]: http://12factor.net/processes
If this is only about pushing the next Go-based Todo web app to some servers, i'm disappointed... :(
Usecase: Is it possible to run mail servers on it?
It's still really early days, I have seen a few mentions on their github page that outlines the features you're wanting, and I can't wait for them myself.
Most apps I've been making follow a similar recipe: run single ubuntu instance on digitalocean, use nginx for http to serve static content for single page app (ex. angular project), and nginx proxy to gunicorn to serve a python flask API that stores and retrieves data to/from mongodb.
Where in that picture would something like Deis fit in? Or is this not for me?
With Deis, you first allocate the number of machines you want to be your cluster and install Deis on them. Think of the cluster as a large physical machine that can run many services. You might have a production cluster (7 machines), dev (3 machines), staging (3 machines), etc. Now, deploy your apps to that cluster via a git push for each.
Need to boot a new front-end server to handle load? Just run an extra container in your cluster. Same with API.
How would you do that with your current setup? I'm guessing provision an entire second machine (or VM, same thing) and put them behind a load balancer.
With Deis, each cluster is exposed behind a single load balancer and each app/service is exposed as a subdomain on that loadbalancer. Deis handles the internal load balancing.
Cluster getting full? Just add a new machine/vm to it.
So, if you like the idea of Heroku, you might like Deis, especially if you'd like to use your own hardware/VPC or want to use Docker locally and in production.
I deploy python apps (running behind gunicorn) on heroku and basically pay for the convenience of dealing with their client and ecosystem rather working with VM boxes directly. Deis provides similar abstractions without the per-process price tag.
If you don't have a problem manually managing / self rolling your app deployments, you don't need it.
What are some projects focused on implementing these *-as-a-service components in a cloud-agnostic manner? Rancher is one that came up earlier today on HN.
[0] http://www.ibuildthecloud.com/blog/2014/11/11/announcing-ran...
[1]: https://github.com/progrium/dokku
[2]: https://flynn.io/
I know that Deis is focused on running 12-factor apps and does not try to provide a platform on which to implement backing services. There are proprietary implementations of backing services that are tied into specific cloud providers, such as Amazon's RDS. There are open-source implementations of backing services that are tied into specific cloud implementations, such as OpenShift's Trove. What I am asking is this: what projects are attempting to implement open-source backing services in a cloud-agnostic manner?
Put another way, if I choose to run Deis right now, I have the benefits of a PaaS without lock-in. However, I still have to either accept a degree of lockin to a service like RDS or attempt to roll my own automated database management. What projects should I be watching or contributing to that are trying to change this for databases? For queues? Etc.
I mentioned Rancher because they included creating clones of EBS and RDS in their goals, but surely they're not the only project biting this off.
[0] https://flynn.io
Asides from Deis being production-ready and tacking on a few extra features like `deis pull` and Dockerfile deployment workflows, we take a different approach to our components. We use the best-of-breed components from other OSS projects and focus entirely on the application deployment workflow. Flynn is focused on building the platform from the ground up. They provide the network equipment and messaging primitives (layer 0, as they call it) as well as the platform itself (layer 1) completely from scratch. Deis uses common OSS tools such as nginx and ceph to provide our layer 0 and part of our layer 1 for us and focus entirely on using those components to serve our needs.
Short answer: A lot. At Flynn we're building solutions to what we see as the big problems that developers will face in the next few years. Deis seems to be solely focused on Heroku-like featureset.
Flynn runs anything that runs on Linux, including stateful services like databases. In fact, we package major open source databases as "appliances" that run within the Flynn cluster for ease of use.
Deis has historically required users to use very specific technologies (initially Chef, and now CoreOS). Flynn does not rely on a specific Linux distribution or configuration management system. In fact, Flynn was designed to be modular to give users the greatest possible choice of components (Deis uses a few components we created for Flynn).
Flynn is designed to be a single toolkit that lets you run everything, not just twelve-factor stateless webapps.
We have created a lot of new technology where necessary but we also use off-the-shelf components like CoreOS's etcd, which Deis also uses. Neither we nor CoreOS consider etcd production-ready, and we don't consider any platforms (including Flynn) production-ready until etcd and all underlying components are stable (Deis also depends on the CoreOS alpha channel).
When you see a "1.0" release from Flynn it will come with our full confidence in the stability of all of its components. We also aim to go well beyond what's possible in Heroku today.
Deis/Dokku are great tools for developers looking to abstract away a lot of the pain of getting an app into production.
EDIT: I was thinking of switching it over to Deis, but it needs a minimum of 2gb of ram, with a suggested amount of 4gb...not a great fit for my 512mb DO droplet :(
If you're looking for a similar workflow but with a smaller footprint, Deis now sponsors the Dokku project: http://deis.io/deis-sponsors-dokku/
Deis = heroku-like interface on top of your own private cloud which must be running CoreOS and certain other things like Ceph distributed filesystem, but can be set to run on a variety of third party commercial cloud providers' infrastructure.
So basically, if you only ever want to use these features, and you are happy with a heroku-like interface to your infrastructure, Deis is useful.
OTOH, if you might want to run a non-Linux node, a specific filesystem or node-local configuration for performance, security or other purposes, or have infrastructure that is not feasibly manageable with a manual process, Deis is not currently useful.
That said, neither are most of the latest-gen infrastructure solutions.
There are a few things like Dockerfile deployments and a `deis pull` workflow for importing your docker images from either DockerHub or an in-house registry as an app, but for the most part you have the right idea. Open-source Heroku has been the general elevator pitch but there are a few docker goodies in there.
> and certain other things like Ceph distributed filesystem
That's an implementation detail of the platform itself, not a hard requirement that you need to set up yourself. We spin up a containerized ceph cluster for database, docker-registry and logger HA.
> if you might want to run a non-Linux node, a specific filesystem or node-local configuration for performance, security or other purposes, or have infrastructure that is not feasibly manageable with a manual process, Deis is not currently useful.
We're quite receptive to suggestions and proposals such as compliance, security, node-local configurations et al. We're always happy to discuss changes in either the mailing list or in an issue in order to make the platform work for a range of environments, so it is definitely possible to bridge these two sides together :)
Not trying to bash, just curious.
Email me for a longer answer: gabriel@opdemand.com. ;)
The community is absolutely amazing here. I have had pleasant conversations with everyone from day 1. The OpDemand folks were very welcoming to my suggestions and they really helped me get started in the early days. everything is done in the open. Not a single feature goes by without a fair trial or a discussion from the community.
Hacking on Deis, getting started and tuning it to your liking has always been there from the get-go. Cloud foundry... not so much.
Cloud Foundry provides the application deployment workflow, but they're missing a few core features, most notably application rollbacks and zero-downtime app migrations at the router level. There is also no scheduler tag support so you cannot control what node your apps will be scheduled to.
They use forks of heroku buildpacks, making them heroku-incompatible in some cases. Their java buildpack is specific to cloud foundry. Hello vendor lock-in.
In-place upgrades work beautifully. I've been dogfooding a running Deis cluster for about a month now, testing upgrade paths from version to version. Just stop the components, bump the platform version and boot them up again. Boom, v0.14.1 to v0.15.0. Cloud Foundry's upgrade path is to basically stand up a second production cluster, migrate your data, app slugs, cluster config and cut over DNS records to your new cluster.
If you have any more questions on Cloud Foundry vs. Deis, Gabriel or myself would be more than happy to discuss with you over IRC or email. My email is matthewf@opdemand.com
While I agree tag support would be cool, complaining about CF buildpack incompatibility is a bit disingenuous, no? I mean, you generally can use a Heroku build pack on CF, but if you have unique requirements, that's why there are CF-only buildpacks. The general reason is that some CF deploys don't have internet access and therefore need a completely offline cache of the binaries.
Secondly,
> they're missing a few core features, most notably application rollbacks and zero-downtime app migrations at the router level
I'm curious why you think this? For example:
http://blog.pivotal.io/cloud-foundry-pivotal/case-studies-2/...
http://www.activestate.com/blog/2014/09/cloud-foundry-diego-...
https://blog.openshift.com/openshift-v3-platform-combines-do...
The primary disadvantage I can see for Deis is that it can only deploy single Docker containers (vs Kubernetes pods). Given the Heroku-style setup it makes sense, but it is limiting for more complex applications.
On the other hand, the simplicity of Deis is attractive. I kind of wish I could use it, but I feel like it just isn't feasible for a full suite of microservices + dependencies.
Regardless, congrats on 1.0!
Can I use Deis (albeit in a much smaller scale) to quickly spin up lightweight VM-ish entitys for prototyping new webapps/backends (i have an unused box at home), or am I coming at this from the wrong end :) (Link to a _good_ explanation of Docker, preferably a video ;), would be gratefully appreciated)
Docker - specify a config file and boom you have a VM with the system, the language, the libraries preinstalled
Deis/Dokku - gives you tooling to deploy/stop/access apps on your VM with an easy cli
https://github.com/radekstepan/im-runnable
It creates a little service that lets you run code (like Python, Node) in Docker sandboxed environment.
http://deis.readthedocs.org/en/rtfd-org/components/provider/
That being said, we support any provider which runs CoreOS. Deis is just an platform which utilizes Fleet, Etcd and Docker. The best place to start would be to take a look at the Quick Start documentation: http://docs.deis.io/en/latest/installing_deis/quick-start/
Also, how does it fit in with Ansible?
on the minimum cluster of 3 nodes with 2 gb each, what is the minimum amount of apps that could be run?
[1]: http://docs.deis.io/en/latest/using_deis/using-buildpacks/
[2]: http://docs.deis.io/en/latest/using_deis/using-dockerfiles/
I can't give you an answer on how many apps you can run on a 3x2GB cluster. It really depends on how much memory/clock cycles your apps require.