Future of DevOps: No doubt DevOps is one of the most fascinating careers in the current IT industry. With an increase in demand every year, according to a survey by Statista 28% of recruiters face challenges when hiring DevOps experts in the work field.
What is DevOps: Think of any website that you visit on daily basis and never felt slow or down like Youtube (Instagram is an exception). Ever wondered how this is achieved? Utilized by a vast number of people, without being slow and updated without any maintenance window is achieved with DevOps. In short, keep the site up and cost down.
So, starting from a git push to the end consumer without any downtime and minimal efforts is achieved through automation to eliminate any human error that we might face. Remember automation is the key skill in DevOps.
Where to start?
I have divided things to learn into steps to get you started in DevOps. It might be overwhelming but consistency is the key.
1- Application: As a DevOps Engineer, you’ll be working daily with applications written in different languages such as react, PHP, angular, Django (python), etc. So it would be best if you had a basic understanding of popular languages.
2- Linux: Mark my word in real-life scenarios you’ll live in a terminal. So, it’s crucial to know the basics of Linux commands like navigating directories(cd, ls, ls -la), moving, copying, tar, processes(ps, htop, top), file system(du, df, free), installing packages(apt, yum, apk, dpkg), patching, text manipulation(awk, sed, grep, sort), different services, systemd, system logs, etc. Don’t stick to a single flavor of linux, make sure you learn different types of linux such as debian, cent, etc.
3- Networking: Networking is one of the most important but not so-famous term in DevOps. Learning networking in deep is difficult but the basics can be learned easily. Understating the OSI model, the difference between TCP and UDP protocols, common ports, IPv4 & IPv6, DNS, network and host, client and server communication, subnetting, private and public IP addresses, VPN, communication in the network, routing traffic, etc.
4- Common protocols: After learning the basics of networking, you would have come across different terminologies like SSH, SCP, HTTP, HTTPS, FTP, SFTP, etc. You should have the basic definition clear of these terms and their usage.
5- Scripting: Automating smaller tasks requires scripting. Assume you want to take a backup of MySQL databases daily at 11 PM. This can easily be achieved by a script that creates a dump of databases and uploads it to remote storage after compressing. Understanding shell and text manipulation (awk, sed, echo, grep, sort, head, tail, cut, wc) can make your life easier.
6- Cloud: This is where the real fun begins. Cloud is a topic that can’t be learned fully (my perspective), things we learn today may become outdated in the near future but methodology remains the same. Learning cloud providers is like a puzzle, connecting services to create a robust and highly available infrastructure while keeping the cost low. I would recommend learning AWS first before any cloud providers because of its simple interface, plenty of services, and vast popularity. Learn fundamentals of the cloud such as virtual machines, storage, networking, load balancing, autoscaling, databases, etc. Coming to AWS you can start from the basics such as their infrastructure (Regions & AZs), legacy services like EC2, S3, IAM, EBS, Autoscaling groups, VPC(private and public subnets, route tables, NAT and internet gateway), Load balancers, RDS, etc. You can create a free tier account in AWS valid for 12 months and try out the services. Keep the basics strong!
7- Terraform(IaC): After you have learned the basics of the cloud it will be easy for you to learn Infrastructure as code. So, what Is IaC? When you create infra manually there is a high probability that mistakes will happen and when you pass this infra to someone else it will be difficult for another person to understand. So, when you write infrastructure as code everything is documented, can be easily shared with others, easy to replicate and destroy in minutes. Terraform is the best choice to write infrastructure as code because of its easy-to-learn syntax, vast community, multi-cloud support, reusable modules, etc. Terraform is idempotent means what you write in configuration terraform creates exactly that resources. When you apply terraform for the second time, terraform checks the state and makes sure that exact infra is created, if there is a need to create something more or if everything is created terraform would do nothing. Remember terraform is easy to learn but hard to master.
8- Configuration management: When you have your infrastructure ready now it’s time to install the required packages and Software. Suppose you have 100 servers and you need to install MySQL, node js, and Nginx on all of them. So, what will you do? Here Ansible comes into the picture. Ansible is a configuration management tool that works on push mechanism, which means ansible pushes small chunks of modules by SSH to create the desired state of machines(installing software). You can also create playbooks on your own or use from ansible-galaxy.
9- Docker: Docker is an open platform for developing, shipping, and running applications with containers. Now docker has become the industry standard for building container images. You can learn docker very easily through any youtube video. It’s a heavy application to install docker locally without a good-spec laptop, I would suggest using play with docker to practice it. In real-life scenarios, you’ll be using Docker to only create images(Dockerfile).
10- Kubernetes: Here comes the king of containers, the great K8s. Docker is good at creating container images but docker and docker swarm lack when it comes to orchestrating containers. Kubernetes is a container orchestration tool created by Google. later on, Google worked with the Linux Foundation to form the Cloud Native Computing Foundation (CNCF) and offer Kubernetes as a seed technology. Its features like autoscaling, load balancing, and persistent storage took the market by storm. In real-life scenarios, you’ll be using k8s to manage your container workloads. Installing k8s locally is not possible because of its master and worker-like infra, minikube(not so practical) is like only master infra & can be installed locally. I would suggest using play with k8s to practice Kubernetes like real and also for training. There is a very famous quote about k8s
Give Docker to a person, make him busy for the day, Give him k8s make him busy for life
11- CI/CD: When you have created the whole setup now it's time for automation. CI/CD stands for continuous integration and continuous deployment. Suppose you have a Kubernetes cluster where you are deploying code in production. every time a developer pushes a code in the repo you have to trigger a job with pulls the code from the repo builds the docker image, tags it, and deploys it with Kubernetes. This is a simple pipeline that deploys code. This can be done easily with Jenkins. It's an open-source automation server to reliably build, test, and deploy their software. learning Jenkins is not so hard, You can find a plugin for almost everything. There are several other tools for CI/CD like GitHub actions, ArgoCD, CodePipeline in AWS, etc.
12- Monitoring: So till now we have done a lot to create infrastructure but how we can ensure that everything will work as expected? As AWS’s CTO said, “Everything fails all the time”. So, we need to monitor our infrastructure. The two most popular tools for monitoring are Prometheus and Grafana. Prometheus is used to gather metrics of the machine with the help of node exporter and Grafana is used to display the metrics through interactive dashboards. Alert manager in Prometheus is used to send alerts to slack or other receivers. Monitoring is very crucial in DevOps because you can’t monitor everything on your own & things will fail, you need to be alert when it happens. You can learn Grafana with play with grafana.
roadmap.sh here you can find a detailed roadmap for DevOps and other careers also. After you complete these topics, now apply for internships (I got my first internship also from Internshala) to gather real-world experiences & Keep learning.