Skip to main content

Command Palette

Search for a command to run...

How to Become a DevOps Engineer

Roadmap for Aspiring DevOps Engineers

Updated
8 min readView as Markdown
How to Become a DevOps Engineer
M

I am available for technical writing jobs.

In this article, you will learn what concepts and tools you need to understand and what are the tasks and responsibilities of a DevOps Engineer. There are two main parts when you create an application:

  1. Development
    • Developing of application
    • Testing of application
  2. Operations
    • Deployment of application
    • Maintenance on a server

DevOps works as a link between development and operations.

You need to dive into details to understand the DevOps tasks and tools needed to carry out these tasks.

1. Concepts of Software Development

It all starts with the application. Developers team will program an application with any technology stack, programming languages and build tools. They will have a code repository to work on the code in a team. DevOps Engineer will not programming the application but he needs to understand the concepts:

  • How developers work?
  • Git workflow they are using.
  • How the application is configured for other services and databases?
  • Concepts of automated testing.

2. Operating System & Linux Basics

The application is deployed on the server to give access to the users. For this, you need an infrastructure of on-premise servers or cloud servers. So, servers are created and configured to run the application. DevOps Engineer is responsible for preparing the infrastructure to run the application. Most of the servers where applications are running, are Linux servers. You need knowledge of linux and the ability to use command line interface. You will do most of the work on the server using command line interface. So, knowing basic Linux commands, installing different tools and softwares on servers, understanding linux file system, basics of how to administer a server, and ssh into the server are essential for becoming a DevOps Engineer. You also need to know basics of networking and security which are following:

  • Configure Firewall to secure the application
  • Proxy Servers
  • Load Balancers
  • HTTP/HTTPS
  • IP, DNS

However, to draw a line between IT operations and DevOps, you do not need to understand advanced operating system or advanced networking and security skills or administering the servers from start to finish. These are different professions like Network and System Administrators and Security Engineers. They specialize in one of the above areas. Your job is to understand the concepts and know all of this to an extent. So, You are able to prepare the server to run the application. You do not need to completely take over the managing and whole infrastructure.

3. Containers - Docker

Containers have become the new standard these days. You will probably run the application as container on a server. This means, you need to generally understand the concepts of virtualization and containers. Also, you need to have the ability to manage containerized applications on a server. One of the most popular container technologies is docker. So, You definitely need to learn it. Developers will create new-features and do bug-fixes on one side. On the other side, you will manage and configure infrastructure on servers to run this application. One major concern is, how to get these features and bug-fixes from the development team to the servers to make it available for the end users. How do you release the application's new versions basically? This is where main tasks and responsibilities of DevOps Engineers come in. They do this continuously in an efficient, fast and automated way for every new version of an application.

4. Continuous Integration & Continuous Deployment (CI/CD)

First of all, when a new-feature or bug-fix is done, you need to run the tests and package the application. So, you can deploy it. This is where build tools and package manager tools come in. Some of the examples are maven and gradle for Java applications and npm for Javascript applications. So, you need to understand the process of testing and packaging the applications. Containers are adopted by more and more companies as a new standard. You will build docker images from your application. You must save this image in an image repository. You will use docker artifact repository on nexus or docker-hub. So, you need to understand how to create and manage artifact repository as well. You do not need to do this manually. Instead, you need one pipeline to do this in sequential steps. You need build automation here. One of the most popular build automation tools is Jenkins. You need to connect this pipeline with Git repository to get the code. So, this is the part of continuous integration process. Code changes from the code repository get continuously tested. New feature or bug-fix is deployed to the server after it is tested, built and packaged. This is the part of continuous deployment process where code changes get deployed continuously on a deployment server. You can do some additional steps like sending notifications to team about the pipeline state or handling failed deployment. This flow represents the core of CI/CD pipeline. This happens at the heart of DevOps tasks and responsibilities. So, as a DevOps Engineer, you should possess the ability to configure the complete CI/CD pipeline for your application. This pipeline is continuous and has an infinite cycle because the application improvement is infinite. New features and bux-fixes get added all the time that are needed to deploy.

5. Cloud Providers & IaaS

Every application runs in the infrastructure. Many companies are using virtual infrastructure on the cloud instead of creating and managing their own physical infrastructure. These are infrastructure as a service platforms like AWS, GCP, Azure and Linode. Virtual infrastructure helps in saving costs of setting up your own infrastructure. These platforms also manage a lot of stuff for you. It makes much easier to manage your infrastructure in the cloud. You can create network, configure firewalls, route tables and all parts of your infrastructure using ui though services and features that these platforms provide. However, many of these features and services are platform specific. You need to learn them to manage infrastructure there. So, if your application will run on AWS, You need to learn AWS and its services. AWS is pretty complex but you do not need to learn all the services that it offers. You just need to know those concepts and services that you need to deploy and run your specific application on the AWS infrastructure.

6. Container Orchestration - Kubernetes

Your application will run as a container because you are building docker images. You have to manage containers. For smaller applications, docker compose or docker swarm is enough to manage them. If you have a lot more containers like in case of microservices, you need more powerful container orchestration tool to do the job. Most popular one is kubernetes. You need to understand how kubernetes works and have the ability to administer and manage the cluster along with deployment of application in it.

7. Monitoring

Now, you have all of these containers running in kubernetes. How do you track performance of your individual applications? Whether everything runs successfully or your infrastructure has any problem? How do you know in real time if users are experiencing any problems? One of your responsibilities as a DevOps Engineer is to set up monitoring for your running application, the underlying kubernetes cluster and the servers on which cluster is running. So, you need to know a monitoring tool like Prometheus or Nagios.

8. Infrastructure Provisioning & Configuration Management (IaC)

In your project, you will need development, testing or staging environment to properly test your application before deploying it to production. So, you need that same deployment environment multiple times. Creating and maintaining that infrastructure for one environment already takes a lot of time and it is very error prone. So, you do not want to do it manually three times. You want to automate as much as possible. How to automate this process? You can do this in the following way:

  • Create infrastructure
  • Configure infrastructure
  • Deploy application on configured infrastructure

You can do this by using two types of Iac tools. Infrastructure provisioning tool like Terraform and configuration management tool like Ansible. You need to know these tools to make your work more efficient. You can make your environment more transparent for easy to replicate and recover.

9. Scripting Language

Since, you will closely work with developers and system administrators to automate some tasks for them. You will most probably need to write scripts to automate tasks like doing backups, system monitoring tasks, cron jobs, and network management. You need to know a scripting language to do this. You may need to use operating system specific scripting language like bash or powershell. You may also need to use more demanded or powerful language like Python, Ruby or GoLang which are operating system independent. You just need to learn one of these languages. Python is the most popular and demanded langauge in DevOps space. It is easy to learn, easy to read and very flexible. Python has liabraries for most of the databases, operating system tasks as well as for different cloud platforms.

10. Version Control - Git

With these automation tools and languages, you write all of the automation logic as code like creating, managing and configuring infrastructure. You manage this code with Git just like the application code. You also need to learn Git as a DevOps Engineer.

There are so many tools available in DevOps space. You may get confused while choosing tools to learn. You should learn one tool, most popular and widely used, in each category. Once you understand the concepts well, building on that knowledge and using an alternative tool becomes much easier, if you need to use another tool in your company or project.

DevOps

Part 1 of 1

Find technical guides about topics related to DevOps