| devops - Michael Levan
5 Best Tools to Learn to Become a DevOps Engineer
DevOps as a whole is much more than tools and software. It's about working together with various teams that have the same goal in mind, quality engineering, and the ability to continuously deliver value to end users. However, to continuously deliver value, quality processes, and engineering, you need tools and software.
Tools and software for DevOps engineers have evolved the past five to seven years, but core technologies have stayed the same in the DevOps space.
- Managing containers with orchestration
- Development practices
- Continuous Integration and Continuous Delivery (CICD)
These tools are the core of any environment looking to ship quickly and efficiently to distribute an application. However, these tools aren't just for production. I personally use containers, orchestration, development practices, monitoring, and CICD in all of my development work that isn't going to production as do many DevOps professionals.
In this post, you will get a detailed overview of the best types of tools and software needed to succeed in the DevOps space today and well down the road.
Why this Matters
The goal of this tutorial is to help you learn what tools and software can help you be a successful DevOps engineer. DevOps very much started off about culture, but with the shift in needs, DevOps is becoming tool-centric as well as about culture.
With all of the software delivery and tooling used to ship products globally, organizations need DevOps engineers who specialize in specific platforms to help with quality engineering.
DevOps Culture Explained
Before getting into the tools, you need a basic understanding of DevOps culture — and why it's important. The term DevOps was coined in 2009 by Patrick Debois. The idea behind DevOps is simple: stop throwing broken servers and broken code over the fence.
What this means is developers were writing untested code, giving it to operations, and having operations put the code on servers. Then the application would break. Operations would then, as a result of this untested code, be up all night fixing the issue.
The same thing goes for operations. As soon as an issue would occur, the immediate response would be, "it's the code!" and the issue would be thrown back over the fence to developers. Developers would look at the application and see that it was running just fine. Diving deeper, the developers would see that the application was maybe running out of memory or processing power. At that point, the issue would be thrown back over the fence to operations.
Doing the above ensures three things will occur:
- Users of the application don't receive quality.
- Teams within the same company are fighting with each other instead of working together to resolve the issue.
- The organization is not shipping software efficiently or reliably.
Because of this, it was time for a change. The change was to take something that developers and operations individuals that care about quality engineering have been trying to do for years and coin a word for it: DevOps.
Below are some tools to get you started in learning what is needed to ship software quickly, reliably, and efficiently. These tools are not the end-all be-all for DevOps, but they help the process move forward.
Containerization has been blowing up in the DevOps space for the past several years. The interesting part about the recent popularity is containers have been around since 1979 in the Linux world. With that, Docker creating a containerization platform in 2013 helped boost popularity with containerization. As organizations evolved, they started to see the power behind building an application that could run on containers.
Containers provide an easy way to test code. Using a virtual machine, there are a few key components that you need to get started:
- An operating system, which may or may not require a license.
- Resources (processor, memory, storage) on a virtualization platform. If an organization is not using virtualization, the application may need an entire server just to run and be tested.
- Access to create the virtual machine or a speed-dial to the IT department to create it for you depending on the severity.
As you can see, the main issues with virtual machines for hosting applications are that it simply takes a long time to create. Implementing infrastructure-as-code practices certainly speed things up, but it's still not as fast as creating a container.
The key component that differentiates containers from virtual machines is the speed to create the container. Containers are faster for applications to run on because of ease of use and creation. A virtual machine requires a ton of resources and a container does not.In fact, a container can easily run on a localhost that uses Windows 10, OS X, or Linux desktop — and you'll barely know it's there.
Although there are several containerization platforms, the most popular at the moment is Docker, primarily because of the open-source initiatives that go into it. Docker also has an open-source registry that has an incredible amount of pre-made Docker images, both official and unofficial.
Say you are writing some code for a PayPal integration in the organizations software for an extra payment option. This is a large integration and it needs to be thoroughly tested. What are you going to use to test the newly written code? A virtual machine that you have to request?
A virtual machine that is already created, but running code that may interfere with the code you wrote for the PayPal integration. You really want a net-new environment, but it'll take a while to hear back about creating the virtual machine you desperately need. Instead, you can quickly create a container to test the code. Once the code is tested, the container can be deleted or continue to run. All of which can be done on a localhost without having to put in a request for a virtual machine.
The one thing I would like to point out is that using containers does not equal reliability. In fact, there are many cases that organizations do not need containers at all. Running applications on a virtual machine is perfectly fine. It really depends on how fast an organization wants to go.
Containerization is great, but it doesn't scale by itself. Running one container in a development or production (which you don't want to do because if the container stops, so does the application) environment is only a piece of the puzzle. To scale out the application across multiple locations or to have redundancy requires orchestration.
Orchestration has one purpose: to scale containers. Orchestration automatically handles the scheduling and reliability of containers. In fact, two of the most popular orchestration platforms, Kubernetes and Docker Swarm, handle the healing of containers for you as well. What does this mean?
Let's say you are running three containers for an application and one of those containers fails. The orchestration platform (Kubernetes or Docker Swarm) will automatically know that a container has failed and will create a new container.
At the time of writing this, Kubernetes is far more popular than Docker Swarm. However, the Docker engine is the most popular containerization platform running in Kubernetes. In fact, orchestration would be useless with containerization. The purpose of orchestration is to orchestrate containers.
Typically, when people hear development, they think, "I have to write a big application." This is not the case at all. Development comes in all shapes and sizes. If you have ever written a PowerShell one-liner or a bash one-liner, congratulations, you are a developer. Understanding development and the need to write code is crucial in any journey to become a DevOps engineer. You don't have to write the next big social media application, but you do need to write automation code to make delivering the application you are working on move faster.
For example, say you have to create 50 virtual machines. The first thing that goes through anyone's head is, "This is going to take a while, but that shouldn't be the case for a DevOps engineer. The first thought should be, "What infrastructure-as-code language am I going to use to deploy these virtual machines?"
The two most popular scripting/programming languages in the DevOps space are Python and PowerShell. Python is used for a ton of different development, but almost all platforms have some SDK for Python. AWS and Azure have a great SDK for interacting with their services.
PowerShell is just as popular. At the end of 2018, Microsoft announced PowerShell Core, which is an open-source version of PowerShell. The open-source language is now being used on not only Windows, but OS X and Linux.
4. Continuous Integration and Continuous Delivery (CICD)
Continuous Integration and Continuous Delivery is by far one of the most important aspects of DevOps. CICD is what takes us from manually deploying artifacts to automating the entire software delivery process. Let's break down what this means.
Continuous Integration (CI) is the ability to have developers take source control and store it in one location. This location can be used for testing the code and building the code. Once the code is built, it can be used as an artifact (think binary). An artifact is simply a collection of code that can be used in a deployment process.
Continuous Delivery (CD) is the deployment process mentioned in the CI section. Much like the CI process, the CD process allows you to test the code that's packed into an artifact. What the CD process also gives you is the delivery of the code. The delivery of the code can be automatically deployed to any environment and as many times per day as you would like.
There are many CICD platforms. Below are the two most popular platforms right now.
- Azure DevOps gives you the ability to not only build and deploy code, but have a centralized location for things like documentation and tickets. Azure DevOps has a built-in wiki that can be used for all of the documentation processes in an organization. It also has kanban boards and sprints to ensure productivity is being measured appropriately. Along with these rich features, it all has a git source control repository to store all code for an organization.
- Jenkins is an open-source CICD platform that has been around for many years. Jenkins has established itself as one of the most popular CICD platforms on the market. Because of it being open-source, there have been other CICD platforms that have forked Jenkins and are now using parts of Jenkins.
We've covered whyDevOps is important and why it should be used across all organizations, even those that are not not start-ups or creating software. Now, that you know some of the core tools and platforms that serve DevOps pros well, you can start exploring them yourself and position yourself for a career in DevOps.