Road to become a DevOps Engineer
Tags: devops
Published: 2020-07-16 02:59:45

In today's world, a DevOps engineer is one of the most demanding jobs in all IT organisations. It is a challenging job which requires a vast skill set and experience in different DevOps tools. DevOps is a hot topic and the demand for DevOps engineers are going high every year. So if you are someone who is trying to become a DevOps engineer and wants to make it as your career, then you are on the right track. If you are a developer or a system admin and wants to switch your career to DevOps, or even if you are just at the starting phase of your career, you can start your journey to become a DevOps engineer by mastering some basic skillset.

## What is DevOps?
DevOps is a practice to manage the entire software development life cycle, that is, development, testing, deployment, operations. DevOps aims to shorten software development lifecycle by automating processes involved.

## Who is a DevOps Engineer?
A DevOps engineer is someone who has a well understanding of the Software Development Life Cycle (SDLC). A DevOps engineer is expected to work with developers, operation guys, quality engineers, release engineers & managers to have a smooth development & release life cycle of the software. A key skill to achieve this is to master various automation tools for developing CI-CD pipelines.

## How To Become A DevOps Engineer?
Let’s begin the roadmap, by listing down basic skillset that companies look for in a DevOps Engineer.

### Step 1: Operating System Fundamentals
This is an essential skill for any DevOps engineer. Get to know how an operating system works. As most applications & companies rely on Linux, I would recommend getting a sound knowledge on Linux OS topics.
I am listing below some core topics which you should understand in this context.

* Kernel Management
* Memory Management
* Device Drivers Management
* Resource Management
* I/O & Network Management
* Security Management
* Threads/Process Management
* Virtualization & Containerisation
* File System Management

>Recommendation: Ubuntu, CentOS, RHEL

### Step 2: Source Code Management (SCM)
A DevOps engineer must have proficient knowledge on at least one SCM tools, preferably GIT. GIT is the most popular and widely used SCM tool. Get good hands-own knowledge on git-flow.
>Recommendation: GitHub, BitBucket

### Step 3: Programming Fundamentals
A programming language enables a user to interact and manage the system resources such as the kernel, device drivers, memory devices, I/O devices; also to write software. This is a key skill as you need this at various stages of your DevOps journey. You should have a good understanding of programming basics. You will be dealing/automating/deploying different types of applications written on different languages. So to debug, build, deploy & automate this application you should have programming knowledge. It does not matter which language you choose, the key is to understand programming fundamentals.
>Recommendation: Go, Python, PHP

### Step 4: WebServer Management
Most of the applications you will be automating in your career will have a webserver. So to master webserver management will be very good for you. Learn how to set up a web server, how to configure it based on different needs, how to optimise it etc.
>Recommendation: Nginx, Apache, Tomcat

### Step 5: Database Management
Just like web server, in almost all projects you will have to deal with at least one database. So this is required to debug/automate applications in your DevOps journey. Learn how to set up a database, basic concepts on how it works, manage the configuration, how to interact with a database, how to import/export data from a database etc.
>Recommendation: MySQL, PostgreSQL, OracleDB, MongoDB

### Step 6: CI-CD Tools
This is essential & most required skill. Continuous integration (CI) and continuous delivery (CD) embody a culture, set of operating principles, and collection of practices that enable application development teams to deliver code changes more frequently and reliably. The implementation of this is mostly done via CI-CD pipelines. To create, manage & configure these pipeline, there is a lot of tools available. Try to get a good grip on at least some tools. With the help of Continuous Delivery, software release becomes more efficient and easier.
>Recommendation: Jenkins, TravisCI, CircleCI, Bamboo

### Step 7: Infrastructure as Code
Infrastructure as Code (IaC) is defining the entire environment definition as a code or a script instead of recording in a formal document. This is a very important and modern skill required for all DevOps Engineers to sustain in the market. Using this you will be able to configure/deploy/manage infrastructure resources on a physical/virtual server or Cloud.
We can split this into 4 sub-sections.
1. Containers
2. Configuration Management
3. Container Orchestration
4. infrastructure provisioning

#### 1. Containers
Containers are a type of technology that makes it easier to host applications inside portable environments. A popular technology in this segment is Docker. With Docker containers, developers own what's within the container (application and service, and dependencies to frameworks and components) and how the containers and services behave together as an application composed by a collection of services.
>Recommendation: Docker

#### 2. Configuration Management
Configuration management is nothing but defining all the configurations of the servers or any other resources as a code or script and checking them into version control. 
>Recommendation: Ansible, Chef, Puppet

#### 3. Container Orchestration
Container Orchestration is a term that defines the automated configuration, coordination, and management of Containers. It’s a tool that schedules the workload of individuated containers within many clusters, for applications based on microservices.
>Recommendation: Kubernetes, Docker Swarm

#### 4. Infrastructure Provisioning
Provisioning infrastructure manually is a time-consuming process and it is impossible to guarantee zero errors. This is one of the prerequisites for DevOps implementation in your organization and it treats IT infrastructure as software.
>Recommendation: Terraform, CloudFormation

### Step 8: System & Application Monitoring
Now that you have set up servers and application deployment, monitoring these servers and application is equally important. It is crucial to continuously monitor the software and infrastructure to understand how well your DevOps setup is performing. Also, it is vital to monitor system events and get alerts in real-time. 
>Recommendation: Prometheus, Nagios, New Relic, Jaeger, ELK Stack

### Step 9: Cloud Providers and Services
Nowadays many companies have their infrastructure on the cloud. So DevOps professionals must learn about Cloud Services and Providers. Cloud computing is a higher level of virtualization. Cloud is the next big thing, and sooner or later, you have to move your application to the cloud.
>Recommendation: AWS, Azure, Google Cloud.

### Conclusion
Once you master the above 9 steps, you can consider yourself as a DevOps engineer. It is not an easy path, but it is worth the effort. There is a lot of other areas and tools which you can implement or use as part of your DevOps practice. But I just mentioned some popular & key skills and tools.

**Let the journey begins.. :) All the best!**

Original Blog Post: [Road to become a DevOps Engineer](https://devmatrix.in/roadmap-to-become-a-devops-engineer/)
Follow on Facebook: [DevMatrix Facebook Page] (https://www.facebook.com/devmatrix.in)