Date: July 5th, 2018 Most recent Kubernetes release: 1.11.0
Kubernetes is a big piece of software clocking in just shy of 2 million lines of code. It can be intimidating to get started, but once you get the hang of it, you'll be amazed at how many tickets start to make sense and how you can quickly identify and fix bugs!
If you are just starting your Kubernetes journey, I would encourage you to read this documentation and get a high level understanding of the major components. To call something a Kubernetes cluster it needs most of the components listed there running on at least one node. Conveniently, all of the code for the components lives in the Kubernetes monorepo.
Now that you know what each component does, you can pick a component that sounds interesting to you. If you're having trouble picking a component, one thing I like to do is pick the thing that is farthest outside of my comfort zone. For example, if networking is a weak spot of yours, pick the kube-proxy. If you've got the network chops but don't really do web servers, pick the kube-apiserver.
One tool every coder needs is a good code editor. The feature that helps me the most when reading code is jump to definition. I use VSCode with the typical Go plugins and that fulfills that requirement to my satisfaction. You could use vim, Goland, or emacs, just so long as you are comfortable with the tool and you can jump between functions effectively, you'll be ready to go.
Kubernetes lives at https://github.com/kubernetes/kubernetes. Usually, the import path for Go code that lives on github is the URL without the scheme (https://). So you might expect
go get -d github.com/kubernetes/kubernetes to work, but that's going to confuse your tools. The package name is actually
k8s.io/kubernetes. So go ahead and clone the repo using this command
go get -d k8s.io/kubernetes. If you don't have go installed, follow the instructions on golang.org.
Open up the Kubernetes directory with your trusted code editor. Take a look inside
cmd/. This is where you find the entry point to all of the components that live inside Kubernetes. Every component in Kubernetes is run as a command line program and the references are all online. Here is where the
kube-proxy's entry point is. This patter of
cmd/<component>/<component>.go is going to be pretty much the same across every component.
Now start exploring the file! Chances are the first file you open under
cmd/<component>/<component>.go is going to be very small. Read through each line. Do you know what it does? If you go to the definition of the function call on this line you will realize how deep this code goes. You have a lot to read!
Now do this until you are satisfied with your understanding. It will take a while and that's totally normal. This stuff is not easy to pick up. Heck, you could even get a post or two out about what you found useful, interesting rabbit holes, and things you found surprising about the Kubernetes code base!
If you're trying to break into Kubernetes development, there's no better way to read lots of the code!