Lately, I have been doing an online presentation. I thought that the title “50 faces of DevOps Engineer” would be pretty adequate and also controversial. After the presentation I realized that actually, I should name it “50 shades of DevOps Engineer” to make it controversial, but it only shows how far I was from watching “50 shades of Grey”.
Anyway, after the presentation people wanted to know what they should learn first, what are the best resources to learn tools like Linux or Terraform to name a few. If you also ask yourself these questions then this article is for you.
This article is not about what is DevOps, Kubernetes and so on. It’s specifically about the tools that each DevOps should know to be able to work and what resources we can use to learn these topics in as friendly a way as (not) possible. 🤠
What should I know vs. what should I know to start my first job as DevOps Engineer?
The number of tools required for a job as a DevOps Engineer can be terrifying. Indeed, it is even for me, working as a DevOps for a couple of years now. This is the list of example tools that every DevOps should know. Of course, you can find a lot of alternative tools eg. Jenkins, but this is just an example of the most popular one.
Ok, stop panicking. I have a better list. It’s a list of tools that are a minimum for a junior DevOps Engineer position and I promise it looks much better.
Linux
Linux or Windows — this is the question?
Windows is still required in some companies, but from my experience, it’s usually in banks and similar institutions. Linux is the core of tools used by DevOps engineers such as Kubernetes, Docker, around 80% of web servers run on Linux. Linux is open source, easier to integrate with tools, powerful and by the way I love it.
Stats don’t lay. Linux is the future, used by companies like NASA, the New York Stock Exchange, Google and Amazon to name a few.
How to learn Linux?
I don’t have Linux! How can I practice?
- Install Linux with Vagrant: https://developer.hashicorp.com/vagrant/tutorials/getting-started
- Use virtual machines in TryHackMe: https://tryhackme.com/module/linux-fundamentals
- Install WSL on your Windows: https://learn.microsoft.com/en-us/windows/wsl/install
Docker & Kubernetes
Docker and Kubernetes are like a power couple. We can do pretty amazing magic with hundreds or thousands of Docker containers inside the Kubernetes. You are not a true DevOps Engineer without knowledge of Docker and Kubernetes.
Starting with Docker. You don’t have to know all Docker commands and tricks.
Understand this process:
Dockerfile -> docker build -> Docker image -> docker run -> Docker container
After understanding how to build the application with Docker, you can start to learn about a tool for managing an army of Dockers which is Kubernetes.
Should be a lot of fun!
Ok, let’s be honest. Learning Kubernetes may be challenging for someone who doesn’t know a lot about networking, systems administration, databases, scaling, replicating and so on. That’s why maybe the best idea is to have a Linux administrator/SysOps Engineer/Cloud Engineer background before starting the journey with Kubernetes. However, you can start with a small project using minikube.
How to learn Docker?
How to learn Kubernetes?
- My project where I teach how to deploy Kubernetes clusters in AWS + GCP + Azure using Terraform (for Polish speakers): https://www.tfmaestro.pl/
- https://kubernetes.io/docs/home/
- https://minikube.sigs.k8s.io/docs/tutorials/kubernetes_101/
- https://devopscube.com/learn-kubernetes-complete-roadmap/
AWS, GCP or Azure?
The big 3 cloud providers are Amazon, Microsoft and Google. AWS which is an Amazon cloud is leading, but we can see a trend that Azure cloud is speeding up, probably because of a big investment in AI technologies by Microsoft. It’s your choice, usually if you know one of the big three cloud providers, you are in a good place. Learn the core functionalities on one of the cloud providers like eg. VPCs, load balancers, Kubernetes services (GKE for Google, AKS for Azure or EKS for Amazon), virtual machines and you can switch between cloud providers much easier with these strong fundamentals.
How to learn cloud?
- My project where I teach AWS + GCP + Azure (for Polish speakers): https://www.tfmaestro.pl/
- AWS free tier: https://aws.amazon.com/free/
- Azure for students: https://azure.microsoft.com/en-us/free/students/
- Azure free tier: https://azure.microsoft.com/en-us/get-started
- GCP free tier: https://cloud.google.com/docs/get-started
GitHub & GIT
Just create your account on GitHub if you don’t have one yet and learn how to push code from your local computer to the GitHub repository on your account using git commands. It’s the most basic thing to learn and if you are a developer, you already know these things, which is a big advantage and makes your path to Devops Engineer much easier.
How to learn GitHub and GIT?
- GitHub: https://docs.github.com/en/get-started/start-your-journey/hello-world
- Game to learn GIT! Just awesome: https://ohmygit.org/
- Learn GIT branching: https://learngitbranching.js.org/?locale=pl
Python
Python is the most popular language used in DevOps space, because it’s quite easy to learn compared to other languages and it has a large number of libraries dedicated to cloud providers, databases and other useful things.
Python is popular and widely used in almost all IT branches from data analysis, and networking to web development and cybersecurity.
How to learn Python?
- Project in Python with Django framework: https://tutorial.djangogirls.org/en/
- https://www.learnpython.org/
- Python projects: https://thepythoncode.com/articles?o=date
Ansible
Ansible is Infrastructure as a code tool which basically means it’s a tool by which we can describe the creation of our infrastructure by code. Usually we use Terraform in the first stage of infrastructure creation like creating a Linux virtual machine and Ansible is the second stage, which is eg. creating users, configuring swap or installing packages like curl, git and traceroute.
There are other similar tools like Puppet or Chef, but Ansible is definitely the most popular, so it makes sense to start with this one.
How to learn Ansible?
- Ansible + Vagrant project: https://spacelift.io/blog/ansible-tutorial
- https://docs.ansible.com/
- https://hackr.io/tutorials/learn-ansible
Terraform
We use Terraform to create the infrastructure literally. You can do magic with these tools and to be honest, it’s not super difficult to learn. This tool is written in Golang, so if you know this language, learning should be even easier.
You can actually, use Ansible to create the infrastructure as well, but Terraform is a much better tool dedicated to this. Ansible will be better to deploy configuration eg. on a server created by Terraform.
BUT first, you should learn about Linux if you are about to create a Linux server. You should know something about internal/external IP addresses, firewalls, CPU, RAM and generally what is needed to create a server. For example, you can read Google documentation on how to create a virtual machine in GCP: https://cloud.google.com/compute/docs/instances/create-start-instance
Writing a Terraform modules is basically moving all the steps to create a virtual machine from GCP documentation into Terraform code.
How to learn Terraform?
- My project where I teach Terraform with AWS + GCP + Azure (for Polish speakers): https://www.tfmaestro.pl/
- https://developer.hashicorp.com/terraform/tutorials
- Project ideas: https://www.projectpro.io/article/terraform-projects-examples/621
- Terraform + AWS project: https://helenchukwukelu.hashnode.dev/terraform-project-for-beginners
- Terraform + GCP: https://cloud.google.com/docs/terraform
Jenkins or GitHub Actions
CI/CD tool is a core of every DevOps Engineer work, so you have to know one of them. There are a lot of tools to choose from.
However, the most popular tools in 2024 are Jenkins, GitLab, CircleCI, TeamCity and Travis CI, so you can start to learn the most popular tool or just a CI/CD tool that is quick and easy to learn.
Jenkins is a very popular tool, but GitHub Actions is much easier and less complex than Jenkins. Also, GitHub Actions will be easy to implement if you want to integrate it with the GitHub repository.
You can read the comparison of these 2 tools in this article: https://k21academy.com/devops-foundation/github-actions-vs-jenkins/
How to learn Jenkins?
- https://www.jenkins.io/doc/tutorials/
- Jenkins pipelines: https://www.jenkins.io/doc/book/pipeline/docker/
- Jenkins + Docker: https://www.jenkins.io/solutions/docker/
- Set up Jenkins on Docker: https://medium.com/@gustavo.guss/quick-tutorial-of-jenkins-b99d5f5889f2
- Jenkins on Kubernetes: https://devopscube.com/setup-jenkins-on-kubernetes-cluster/
How to learn GitHub Actions?
- https://docs.github.com/en/actions/quickstart
- https://labtrikz.com/en-us/learning-paths/2048
- https://github.blog/2022-02-02-build-ci-cd-pipeline-github-actions-four-steps/
Precious YouTube channels
Summary 🖖🏻
Guys, this is really all you ever needed! All for free. Learning will take some time, but you don’t have to spend lots of money on bootcamps.
Learn these things and I promise you, you will crash it on an interview!
Fingers crossed!
I will write more articles on what and where you should learn technologies in order to get a job as a Linux Administrator, SysOps Engineer, Cloud Engineer or DevSecOps Engineer. I was in that place once as a beginner, so I know how it is to be confused about learning all these things.
There will be resources to learn such topics like networking, systems administration, cybersecurity, so stay tuned!