My DevOps learning path
Tags: devops, learninginpublic, sre
Published: 2021-02-26 12:37:34

My goal for the time after my university is to find a job in the field of DevOps or Site Reliability Engineering. The Phoenix Project[^1] and the DevOps Handbook[^2] books by Gene Kim where both great books to get a glimpse about what matters in DevOps. Especially The Phoenix Project was great since it is written as a fictional story not as a "real" technical non-fiction book but still delivers in explaining the Three Ways[^3] which are the three principles of DevOps perfectly.

Although I have been increasingly involved in software development in recent years, I am drawn to the field of DevOps. Perhaps this has something to do with my background as a system integrator. I am fascinated by the complexity of designing systems reliably and rolling them out as automatically as possible. The knowledge I have built up in JavaScript and NodeJS could help in this process.

This is the knowledge and understanding of the topic that I have right now.
I will try to write a post about the knowledge I’m gaining about these when I’m going forward in the process. 

Following are the steps I will take to learn those topics. 

First I started with getting knowledge about Kubernetes. It seems to grow to be the state of the art orchestration tool for systems and pretty much every job posting requires at least basic knowledge of it.

## Kubernetes LinkedIn course
To get a quick introduction to the terms of Kubernetes I used my LinkedIn Learning membership that I can use as a student of the University of Cologne. This course by Karthik Gaekwad gives an overview of the terms and techniques of Kubernetes.
Kubernetes (K8s) is used to orchestrate containers on one’s infrastructure. Orchestration in that case means deploying applications to infrastructure and managing the application’s state, replication status. K8s also has integrated health checks for Pods (the smallest possible entity, one Pod holds one or multiple containers). So when a Pod crashes Kubernetes will make sure that the crashed Pod will be restarted.
In some cases, it lacks a little bit of explanation of terms that are used in the current video. Anyways, overall it was a great video course to get into K8s.

### Resources
* [Learning Kubernetes](https://www.linkedin.com/learning/learning-kubernetes/)

## DevOps with Kubernetes course by the University of Helsinki 
This free course is developed by Jami Kousa who works at the University of Helsinki. The course has been recommended by a friend who used it to get the knowledge for his Certified Kubernetes Application Developer (CKAD) certificate. It uses [k3d](https://k3d.io) for setting up the local Cluster. The Google Cloud Platform also is introduced in the course especially the Google Kubernetes Engine which is used in one part of the course.
Kubernetes (K8s) is used to orchestrate containers. 
The course introduces one to Kubernetes and shows one how networking and storage works. After that in Part 2 one will work with *Clusters*, *StatefulSets* and *Jobs*. Plus there is a chapter about monitoring the cluster. Part 3 looks to be about the Google Kubernetes Engine and building a Deployment Pipeline. Part 4 is newly added and will introduce GitOps. What it is and why it is important will be described in the next chapter. The last part of the course is about the internals of Kubernetes, *Custom Resource definitions* and *Service Meshes*.
I think that this course will be a great introduction to Kubernetes and a good way to get the hands dirty.

### Resources: 
[DevOps with Kubernetes 2020](https://devopswithkubernetes.com/)

## Gitops 
GitOps is a topic that is newly added as a part of the DevOps with Kubernetes course. So I think this is a good opportunity to get more into the actual implementation and usage of Kubernetes „in the real world“.  
When working with Kubernetes Clusters GitOps is a way to manage the clusters and automate the application delivery via git. Git in this case is the single source of truth. This means that the desired production environment is defined in a git repository which will be used to identify any drifts off of the running infrastructure. Using those container definitions helps to automate the continuous delivery of one’s applications.
Because the definitions are managed in a git repository it is easy to see the changes of an application definition. Plus it is way easier to rollback to a working definition of a system when problems happen, since the prior version can be found inside of the git history.
The [Guide To GitOps](https://www.weave.works/technologies/gitops/) by Weaveworks seems to be a great source of knowledge about GitOps. I heard about the company and their knowledge base in a recent Software Engineering Radio podcast with Alexis Richardson the founder and CEO of Weaveworks [^4].
I will use the two sources below and the course section as my starting point for learning about GitOps. 

### Resources:
* [GitOps.tech](https://www.gitops.tech)
* [Guide To GitOps](https://www.weave.works/technologies/gitops/)
 
## Ansible / Terraform
Ansible and Terraform or Infrastructure as Code tools in general are important things to know in the world of automating deployments.
Both applications seem to be fundamental tools in building automated infrastructure. Also in the world of GitOps, they look to have an important role since both of those tools help declaring the infrastructure.
Ansible is a tool that is mostly used to provision a server. This means that the definition contains the applications and configs that have to be present on the machine. It was acquired by Red Hat in 2015. Ansible uses so-called playbooks that are written in the YAML format. It is also possible to do Ad-hoc task executions for example to ping all the available hosts.
Terraform uses its’ own configuration language. It is called HashiCorp Configuration Language or HCL for short. Terraform is mostly used to configure cloud resources and helps for example to define the availability zones or instance types of a resource. It can also help to organize infrastructure across multiple clouds.

### Resources:
* [Ansible](https://www.ansible.com)
* [Terraform by HashiCorp](https://www.terraform.io)

So these are the topics I will learn in my semester break and possibly in the months after that. Going through these will probably bring up a lot more topics that will follow for example command-line tools like `jq` or `yq` and `awk`. I will keep you informed about the current state.

Thank you for reading, 
Niklas

[^1]: https://itrevolution.com/book/the-phoenix-project/

[^2]: https://itrevolution.com/the-devops-handbook/

[^3]: https://itrevolution.com/the-three-ways-principles-underpinning-devops/

[^4]:  https://www.se-radio.net/2020/12/episode-440-alexis-richardson-on-gitops/