I’ve added the ability to deploy a Kubernetes cluster with Oh-My-Vagrant (omv). I’ve also built an automated developer experience so that you can test your Kubernetes powered app in minutes. If you want to redeploy a new version, or see how your app behaves during a rolling update, you can use omv to test this out in minutes! I’ve recorded a screencast (~15 min), if you’d like to see some of this in action.
Kubernetes is a container cluster manager. It groups containers into pods, and those pods get scheduled to run on a certain machine in the cluster. We’ll be talking about Docker containers in this article, although there are lots of great new technologies such as nspawn.
An advantage of using Kubernetes is that it was created by a team at Google, who has a lot of experience running containers. A lot of smart folks (including many from Red Hat) are working on this project too! It is becoming the foundation for other software such as OpenShift v3. Google has released a paper on their earlier work (Borg), which is interesting, but lacks many details, and (unsurprisingly) no source code is present.
Some big disadvantages include the requirement of a CLA to contribute to the project, and the lack of good documentation and articles about it. Kubernetes itself, can’t yet be decentralized, but this might change in the future. It’s (currently) very difficult to construct the foo.json files required to build an application.
While the project is open source (ALv2) I’ve gotten the feeling that Google has a pretty strong hold on the project and has some changes to make before the community really trusts them. This can be a learning experience for any company where proprietary software is the culture. I wish them well on their journey!
To deploy a Kubernetes cluster with omv, the
kubernetes variable needs to be set to something meaningful. It’s also recommended that you boot up a minimum of three machines. Here is an except from an example
--- :domain: example.com :network: 192.168.123.0/24 :image: centos-7.1-docker :sync: rsync :extern: - type: git system: docker repository: https://github.com/purpleidea/docker-simple1 directory: docker-simple1 - type: git system: kubernetes repository: https://github.com/purpleidea/kube-simple1 directory: kube-simple1 :puppet: false :docker:  :kubernetes: applications: - kube-simple1/simple1.json :vms:  :namespace: omv :count: 3
In the above example, you can see that we’ve only listed one Kubernetes application, but an arbitrary number can be included. The
kubernetes variable can also accept a key named
master if you’d like to choose which of your vm’s should be the primary. If you don’t specify this, the first vagrant machine will be chosen.
In the list of applications, instead of only specifying the .json file, you can instead specify a dictionary of key/value pairs. The .json key (
file) is required, but you can also specify additional keys, such as the boolean key
roll. When true, it will cause a rolling update to occur instead of a normal” update.
If you’re interested to see what needs to be done to set up Kubernetes, the bulk of the work was done by me in 1f26, but figuring out manual steps was only possible thanks to the work of my hacker friends: scollier and eparis.
Due to the power of the omv project, when you
vagrant up, the necessary docker and Kubernetes projects listed in the
extern variable will be automatically cloned and pulled into your omv environment.
You’re probably due for a screencast (~15 min). Have a watch, and then if you need review, go back and read what I’ve written above.
(Thanks to the Gluster community for generously hosting this video!)
I haven’t talked about networking, or actually building applications.
Container network might be a lot easier if you use an overlay network like flannel. Unfortunately, this isn’t yet built into Oh-My-Vagrant, but is in the list of feature requests if someone shows some interest.
Building useful applications is harder. In my screencast, you’ll see where to put the code, and how to iterate on it, but not what kind of code to write, or architecturally how your multi-container applications should work. Unfortunately this is out of scope for today’s article! My goal was to make it easy for you to focus on that topic, instead of having to figure out how to build the infrastructure. Hopefully Oh-My-Vagrant helps you accomplish that!