Welcome to another VSHN.timer! Every Monday, 5 links related to Kubernetes, OpenShift, CI / CD, and DevOps; all stuff coming out of our own chat system, making us think, laugh, or simply work better.
In this edition we are going to talk about container runtimes, the basic building blocks enabling everything we do every day at VSHN.
1. These days there is no need to introduce Docker anymore. When it appeared in 2013 it triggered a durable change in the way server applications are developed and deployed. But we are living in 2019, not in 1995 anymore, and the industry these days expects open standards to grow and evolve. That is why Docker, together with other vendors such as Google, created the Open Container Initiative, while at the same time opening up the code of runc, one of the the lower layers of Docker. After its introduction, runc became the reference implementation of container runtimes of the OCI runtime specification.
2. But where do containers come from, anyway? They are a modern evolution and a combination of several Linux technologies, namely Linux namespaces and cgroups. The former abstracts system resources, like the file system, while the latter provides limits to the consumption of CPU and memory. But to understand more their nature and function, Ian Lewis from Google wrote a series of four articles that describe their inner soul: part 1, part 2, part 3 and part 4. Simple, short and fantastic explanations to understand the core technology making cloud native apps possible.
3. These days there are many other container runtimes popping up. Just to name a few: Podman, Canonical’s LXD, and CoreOS’ rkt. And one can expect many more in the future for sure, given the fierce competition in this space.
4. Containers became so pervasive that they begat a whole new category of software systems: “container orchestration systems“, a family in which Kubernetes finally became the dominant option. After a short war with Docker Swarm and Apache Mesos, that is. The weight of Kubernetes (and Google) was such that, in order to open it to other runtimes (at the beginning it only supported Docker) the project published its Container Runtime Interface (CRI). The Cloud Native Computing Foundation established containerd, a reference implementation for container runtimes, “with an emphasis on simplicity, robustness and portability“, as one of the first CRI-compatible runtimes. Some examples of Kubernetes-ready container runtimes include of course Docker and containerd, but also cri-o and frakti.
5. We clearly cannot get enough of container runtimes. Want to build yours? Of course you can! Liz Rice shows you how to write one in 100 lines of Go in this video on YouTube. Enjoy!
Do you use some other unknown container runtime? Have you written your own? Do you have any best practices you would like to share with the container community? Get in touch with us through the form at the bottom of this page, and see you next week for another edition of VSHN.timer.