Tools of the Trade

Learn about the main tools DevOps engineers are using today

Welcome to another insight from the DevOps Insider.

The modern software engineer has a wide set of tools available to them.

DevOps engineers are no different.

The toolkit for a DevOps engineer can vary depending on the area of the world you’re in and what your company uses. There’s a lot of tools, but there are a few that are nearly ubiquitous.

Git

Git is everywhere. Software configure managment (or source code management) tools are critical for any organization to utilize. Git is the number one tool for this on the market now. It’s free to use. It’s flexible, configurable, and a true life-saver.

Don’t know git?

I strongly recommend you start learning today. You can use it in your own personal projects. Here is a nice resource to start learning.

You will almost always be asked a few git questions in an interview process as a DevOps engineer. I cannot stress how important it is to know git.

CICD Automation Tool

A CICD automation tool will always exist for any DevOps engineer. There’s a plethora of these available these days. The most commonly used is Jenkins.

Jenkins is an open-source automation server. Under the hood, it is a Java Spring application. It is relatively easy to setup, integrates with Git services via plugins, and much, much more.

One massive advantage that Jenkins has over other tools in the space is its age, plugin ecosystem, and configurability. Some of the more common problems faced by DevOps engineers can be solved via plugins. Plugins are easily downloaded and installed. Once installed, you can use the functionality without the need to write complex scripts.

Jenkins pipelines are written in Groovy. Groovy is not so different from Java, but it does have its quirks and fun features. However, Groovy isn’t a well-known language outside of Jenkins. Therefore, if you want to learn Jenkins, I’d recommend setting up a Jenkins Server locally and play around with the script console.

Docker

Docker is a critical technology within most organizations these days. I’ve written an entire article on why every aspiring DevOps engineer should learn Docker. If you do not know Docker yet, please start learning now!

Docker allows us to be flexible with our infrastructure choices as engineers. Docker containers can be ran on local machines, serverless architectures, Kubernetes, and regular servers. It’s an incredible platform and if you’re not using it today, I highly recommend at least learning the basics.

Kubernetes

I’m not suggesting every project in the world uses Kubernetes, but I will say that it is an amazing platform to run large-scale enterprise applications on. Many of the hardest challenges in engineering are solved by throwing Kubernetes at a project.

A few good examples of these hard problems are auto-scaling, load balancing, and container lifecycle management.

For auto-scaling your cluster, you can setup a cluster-autoscaler via Helm. Next thing you know, you’re able to infinitely (until you run out of money/resources) your application.

I would suggest learning the basics of Kubernetes by setting up a kind or minikube cluster locally. Keep in mind it can be resource intensive, so be weary of the machine you’re attempting to run it on.

If you’re looking to go deeper on Kubernetes, I recommend this course on Udemy.

Terraform

Terraform is a declarative infrastructure management tool.

What does that even mean?

It’s declarative in that you do not tell Terraform exactly what to do, you tell it the end goal you want to achieve. Secondly, it helps you manage your infrastructure easily! Using Terraform, you can write all of your infrastructure as code (IaC).

This means that you can have your infrastructure in source code. This is an excellent tool to utilize for disaster recovery, handling configuration drift, and overall infrastructure management.

Terraform is one of my favorite tools to use. The HCL language it is written in is easy to understand and it’s extremely powerful. This is a must for anyone interested in DevOps.

Ansible

Ansible is a configuration management tool. It’s built with Python and helps you configure your servers easily. You can run a single script across dozens of servers with one command. It’s an incredibly powerful tool for not only system admins, but also DevOps engineers.

An interview question I once received (and have now used in my own interview process), is what is the difference in usage between Terraform and Ansible?

My answer would be the following:

“Terraform helps you provision the resources that you need. Ansible is used to then configure the apps and services that run on those resources.”

Python

This is more dependent on the organization you’re in, but Python is the go-to for many orgs. You will also Go as another option. I do like Go, but the majority of positions I’ve seen in the DevOps space, and my own organization, Python is more prevalent.

Python is feature-rich. Almost all cloud providers have an SDK for Python to interact with their services. This is crucial for DevOps engineers. We need to be able to interface with the infrastructure and receive data about what’s happening.

Bash/Powershell

I’m going to refer to these as simply “shell” scripts.

This one is a must. Learning shell scripts is essential. There are times where it really doesn’t make sense to run a script in Python since we can handle it in a bash or PowerShell script.

Also,

Many companies have old bash or PowerShell scripts that are still being used and need to either be updated or rewritten in a language like Python.

Understanding what those scripts do by looking at the code is critical for your success as a DevOps engineer. Not to mention, it will enhance your overall terminal/shell skills. The commands are the same within the shell and the scripts.

Monitoring Tools - Splunk, Prometheus, New Relic, and more.

Continuous monitoring is one of the main pillars of DevOps. Being comfortable with one or more monitoring tools will make your life much easier as a DevOps engineer. Prometheus is an open-source monitoring solution for many platforms. It’s quite easy to install on Kubernetes if you’re looking to get started. Since it’s open-source, many organizations utilize it in their tech stack.

New Relic and Splunk are other tools that are quite popular as well. However, it’s hard to test with these without having a significant amount of data. It also requires that you instrument your projects with their tool. I would recommend having an understanding of these tools, but I wouldn’t focus on a single one until your organization requires it.

Honorable Mention: CD specific tools

Jenkins can handle many continuous deployment functionalities. However, there are other tools that can do a better job.

Harness is a tool that handles Kubernetes deployments easily and efficiently.

Octopus is a tool that handles deployments to various environments as well.

Both tools have great UIs and are used by a few of the clients that I have worked with. I found both to be easy to use and quite feature rich!

Conclusion

This is certainly not an exhaustive list of tools for every DevOps engineer. There are alternatives for almost everything in this list. These are just the main ones that I have used and have experience with. I’ve scoured the job market over the past few months to get an idea of what the best tools for any DevOps engineer and these were the top results.