Google Summer of Code (GSOC) program 2018 has come to an end and we followed up with CNCF’s seven interns previously featured in this blog post to check in on how their summer project progressed. Over the summer, graduate student at Zhejiang University and currently an intern at HarmonyCloud.cn Jian Liu worked with mentor Harry Zhang, Fupan Li, and Lantao Liu to “Integrate containerd with Kata Containers,” a project aimed at creating a containerd-kata runtime plugin for containerd to integrate with Kata Containers.
My story started in January 2018 when I noticed that the CNCF community had some container technology-related ideas for GSoC 2018. After browsing all the topics I was very interested in the topic of “KataContainers support for containerd/cri-containerd.” I already had some knowledge about Kubernetes, so I spent quite some time to deeply study documentation and code for “containerd” and “KataContainers.” Once I had a much better understanding of these two projects, I drafted a design proposal and was luckily selected as a GSoC candidate! I believe the study of these open source projects’ source code helped a lot in my design proposal.
In the Kata/CRI native manner, the theory was that we could avoid using too many independent shim and proxy processes. Some investigations showed a shim consuming too much memory, causing huge overhead costs in high density cases. So our project was aimed at removing independent shim and proxy processes to save memory and start the container more quickly.
In the beginning of the project, we were going to develop a kata-runtime plugin for containerd. When we implemented part of the interfaces that containerd’s runtime plugin needed, the basic container operations worked successfully. That moment was engraved on my mind. It meant that I went from a container user to a container developer. So excited!
But soon, something unexpected happened.
After I have already finished some part of the task, the containerd upstream community proposed a fresh new proposal “Shim API v2.” The goal was to establish a new standard to make containerd compatible with various runtimes. This sounds very helpful to our ongoing work, and after discussing with maintainers from Google, KataContainers and containerd community, we decide to make a huge turnaround.
While considering the remaining time of my GSoC program was short, I began to feel worried about whether I could finish these new tasks. Fortunately, my mentors connected me with a maintainer of the KataContainers project, and he set up the skeleton code for me and the two of us cooperated closely on the new design together. Also, maintainers from Google and the containerd community gave me lots of useful ideas on how to follow the upstream progress. With this timely guidance, when it came to the end of GSoC, I had successfully implemented many functions of what Kubernetes CRI required and passed 95% of node e2e conformance tests. More details about my work can be found at here.
Eventually we used containerd+shimv2+kata-runtime to test the time of starting pause container. And the result is following.
This GSoC project was really challenging for me, and I felt a flood of new knowledge poured into my mind. The practical experience had given me a profound understanding of the open source world. My love for the open source community grew stronger. With a burning passion, I continued to follow the project after GSoC. This past summer was really amazing. Developing in this excellent community, I gained so much joy.
I would like to thank my mentors for their constant support and guidance, especially Harry Zhang, Fupan Li and Lantao Liu. As well as thank Google Summer of Code team and the CNCF organization for giving me such a golden opportunity to contribute to the open source community. I am eager to continue developing and contributing to open source world.
Last but not least, CNCF community is a good starting point for every student. There are many great projects in it and always an option that can fit you.