Orientation and First Weeks
In the time between accepting the offer and starting my first day, I managed to learn one of the two skills I was missing. Unfortunately—and since I didn't have enough computers sitting around to make a cluster—it wasn't Kubernetes. In my naivety, I hoped that wouldn't be too much of a problem. Well, dear reader, I was assigned to the team that manages and automates the company's Kubernetes clusters.
"This is fine," I thought to myself while panicking about my inability to do anything productive during the onboarding process. It's just like Docker, which uses containers to run isolated programs on a single computer. Kubernetes couldn't be too different... right? Wrong. If you think of a container as a pea in a pod, Kubernetes is the whole entire farm of peas—including the farmer and tractors. That is to say: running containers is the goal, but there's a lot of effort and work that goes into doing it.
And at this point of my internship, I was but a mere pea-consumer, uneducated with the ways of farming. Thankfully, I had a wonderful group of coworkers to support me on my learning journey. They didn't expect students to start out knowing the ins and outs of Kubernetes, and they provided help and guidance while I familiarized myself with everything.
Learning and Adaptation
At this point, you may be wondering what exactly Kubernetes is. In simple terms, it's software that manages and automates the configuration and deployment of containers across multiple computers. With that in mind, let me go back to my farm analogy:
- A container is a pea. It's complete, but it doesn't do anything until you give it resources.
- A pod is a group of co-located peas.
- A deployment is a request asking the farm to keep a number of a specific kind of pod alive at all times.
- A node is a farm plot, providing resources for some pods.
- An operator is a farmer whose job is to watch over the farm and make changes when necessary.
The general idea of Kubernetes is that it's a reconcilation loop where the farmer is constantly looking at the pods on his farm and comparing them with the deployment manifests he has. For example, suppose the farmer was asked to keep 12 snow pea pods alive and three of them withered away overnight. The farmer sees that he has nine living snow pea pods and three dead ones, but needs 12 living ones. He would attempt to reconcile this discrepancy by removing the three dead snow pea pods and adding three new snow pea pods wherever there's space on the farm.
That's just scratching the surface level of things, too! Kubernetes can be used to manage all kinds of resources, such as hard drive allocations, network connectivity, and even domain-specific resources controlled by purpose-built operators.
Accomplishments and Challenges
Throughout my time as an intern, I learned a lot about Kubernetes. And unfortunately, like all software, it has some pain points. There are some combinations of options, that when used together, cause unexpected behaviours that can negatively impact deployments.
In my role as an intern, I designed and developed a tool to automatically detect some of these issues and send alerts to tenants. I'm proud to say the tool is still used on a daily basis even a year after my co-op experience concluded!
Wrap Up
During my internship, I ended up diving straight into the deep end of working with Kubernetes. Starting out with absolutely no experience in Kubernetes, I quickly learned not only how to work with Kubernetes as a user, but also how Kubernetes works on a fundamental level.