How to Build Your First DevOps Lab – Part 1: Introduction

When you are looking to learn more about a particular topic or subject, the big question is always, where do you start? With a topic as big as DevOps that has so many different applications and techniques, it can be very difficult to know where to start.


In this blog series, I will try to alleviate some confusion and walk you through a simple DevOps lab build with two Ubuntu VMs and one Windows VM; which can continue to be used after you have gone through the blog series to gain more experience. There are only going to be a few applications covered in this blog series. So, I would highly recommend after reading through the series and doing the build out yourself, looking into other applications that are available and widely used, such as Kubernetes, Chef, and Selenium, to name a few.


Skills that would be useful for this lab build include, but are not limited to the following:

  • An understanding of hypervisors and virtualization

  • A basic understanding of networking

I know, it’s a very short list, but I wanted to keep things as simple as possible so that just about anyone could follow along. You will need some understanding of how to set up VM’s and their network configurations as that is not covered in this series.


Of course, additional skill sets will always help you, but most applications in this series have an associated walkthrough of the set up. With DevOps, you will want to develop skills with different programming languages (e.g., Python, Go, Ruby, etc.) as well as CLI tools such as bash or PowerShell; these languages are used to build scripts that further enhance the automation that can be achieved with the applications discussed in this blog series. For this blog series, that is not necessary as all the commands and code is provided to you either directly in the blog or on GitHub.

This blog series will explain how to set up and configure all the different components, but it will not go in depth on how to use these different components. The best way for you to learn these different applications is to do research, watch tutorials, and apply what you have learned through those materials.


This series will also help you get a jump start on learning these applications by walking you through how to set up an environment, but the rest is up to you. In the last part to this blog series, you can find links to different resources for learning the different applications in this environment. In the following sections, we’ll cover the lab layout, each component, and then requirements.


As a side note, if you already have your own hardware to complete this lab build on, then there shouldn’t be any cost associated with the buildout. However, if you don’t own your own hardware, you should still be able to build the same lab in AWS or similar for little to no cost. AWS offers t2.micro EC2 instances for free if you stay within certain limits, which can be found here. All the software can be found online and used for free; the only software that had limits with the free version is Splunk, but that limit should never be an issue with this lab build.


Lab Layout

As mentioned previously, the lab buildout will consist of two Linux VMs and a single Windows VM. The applications that will be used in this lab build will be Ansible, Jenkins, Splunk, Docker, and Jira. If you are not familiar with some, or any, of these applications, that is alright. Throughout this series, we will have a brief overview of each product before implementing each one. The buildout will be as follows:


Linux Master

  • Jenkins (Automation Server)

The Jenkins server is what automates a lot of the processes in the lab. It does this using jobs, which can be further expanded with plugins. The automation possibilities are endless with Jenkins

  • Splunk (Event Logging)

Splunk is used to gather Events from remote machines. These events can be used to trigger alerts within your environment or see historical data for analysis, for example. These events can also be great for discovering issues in an environment, such as the root cause for an outage, or a possible breach in security.

  • Ansible (Application Deployment)

Ansible is leveraged to run commands on remote machines in this lab. Though it can also be used as a configuration management tool to standardize settings across machines.


Linux Node

  • Docker (Container Management)

Docker is the lightweight OS-virtualization tool that is used to run another piece of software isolated from the Host. For instance, Jenkins can be run in its own Docker container that would be completely separate from the underlying Host, whether it be Linux or Windows.


Windows Workstation

  • Splunk Universal Forwarder

Cloud

  • Jira (Issue Tracking)

Jira is used to track issues on projects, individual tasks, etc. Jira can be an effective platform for Teams to collaborate on issues their project may be experiencing.


Component Purpose

The Linux Master VM will be hosting the majority of the applications for this buildout, which I would not recommend in a production environment. But, to keep things as simple and as slimed down as possible, that is how it will be configured for this blog series.


The Linux Node will solely act as our Docker container host; we will be leveraging Ansible to deploy Docker containers.


The Windows workstation will not have any purpose other than to send logs to Splunk so that you have data to play around with and create dashboards/searches against. You can also deploy the universal forwarder to your Linux node if you’d like.


Lastly, we have Jira, which we will be deploying via Atlassian Cloud. This allows us to utilize the free service provided by Atlassian and reduce the footprint in our local environment. Below is an image of how the different applications will interact:



Hardware and Software Requirements

Since we won’t be going over the actual installation of the operating systems, I wanted to do an overview of what you should have as far as hardware and software for this lab build.


Virtualization will be your best option for building out this lab environment. I am running everything on an Intel NUC with VMWare ESXi installed on it. If you don’t have any equipment around that you can install a hypervisor on, then any machine that you can install VMWare workstation, VirtualBox, etc. and has about 8GB of RAM will work just fine. As for RAM and CPU, I would recommend the following for each VM:

  • Linux Master

o 4+ GB RAM

o 2 vCPU

  • Linux Node

o 2+ GB RAM

o 2 vCPU

  • Windows workstation

o 2+ GB RAM

o 2 vCPU


For the operating systems, I am using Ubuntu 18.04 and Windows 10. The Ubuntu ISO can be found here, while the Windows ISO can be found here. When you visit the Ubuntu page, you will have the option to download either the desktop or server installation. It is up to you what you feel most comfortable with. If you prefer command line configurations, then use the server installation, otherwise use the desktop installation.


When you install the Windows workstation, you will need to select the option stating that you don’t have a product key, unless of course you do. This will allow you to proceed with the installation and use a non-activated version of Windows.


A look ahead

This will be a multi-part series, each covering a different section of the lab build. If you will be following along, I highly recommend going through each section in order with the exact configuration done in each part. This will ensure everything will function as intended.


Below is a list of each part. We hope you enjoy!


DevOps Lab Build Series Index

Part 1: Introduction

Part 2: Configuring the Ubuntu Master

Part 3: Setting up your Ubuntu Node

Part 4: Configuring Splunk

Part 5: Jira Cloud Integration