This is the first segment in a series that we'll title "DevOps Toolchain". For most, DevOps isn't just a thing or a title, but a culture. In a sense, it is also a methodology. Developers are supporting systems operations and systems operations are supporting developers, through unifying goals and building tools together.
But, this isn't going to be a history lesson, or another lecture on why DevOps is important. This series is going to explore the tools that are popular and common among DevOps movements and walkthrough building, understanding, and utilizing these tools efficiently. The goal of this is not only to introduce you, the reader, the aspiring DevOps practitioner, or engineer to the tools, but to also learn and grow together.
So, let's begin with a general overview of what's going to be covered throughout the next couple of months.
Terraform is a tool that deploys infrastructure to a platform or service provider of your choice. It is platform agnostic, which means you can deploy to AWS, Azure, Google, KVM, and OpenStack. There also a plugin for [url=https://github.com/flynnhandley/hashicorp-plugins]Hyper-V[/url].
Terraform is an open source tool written in Go. We'll talk more about Go as this series progresses. You may be surprised to find a lot of popular DevOps and infrastructure tools are written in Go.
Everyone has heard of Docker at this point. But, I sometimes think that not everyone understands what Docker is. I certainly didn't, at first. I had an idea, but as I learned more about it, I realized I was using containers and Docker interchangeably. Docker offers similar services to several tools, while not specializing in any of them.
- Version Control
- Configuration Management
Those are a few challenges Docker aims to solve. There are several approaches to implement Docker. Primarily, this series is going to focus on the Dockerfile and Docker-Compose.
Docker is also written in Go.
Jenkins is a tool written in Java. It is used for testing, building, and deploying software. Included is a WebUI with an abundance of plugins to make your job easier.
Jenkins lives and dies with its configuration. Will you have simple shell scripts that pull from GitHub? Will you have sanitization built in? Full on npm building your React application? You have the power of choice, sometimes in overwhelming respects.
Git is a version control system that maintains snapshots of working repositories. Setting up git locally is fairly easy, you run
install git appended to your system's package manager and, along with some dependencies, you'll have a nice setup.
Git is so much more than that, though. You can set an upstream to your server hosting Git and store your code and its branches remotely. You can also configure local, system, and repository settings through various git files. While it's easy and sometimes recommended to just defer to something like GitHub, exploring
git in a base state is worth doing for ample learning opportunities.
GitLab is a form of Git that has a ton of features out of the box. The installation process utilizes a Chef script and the system itself is Ruby based.
Aside from the normal version control, snapshotting, and repo management, you also get issue tracking, a wiki framework, and build and integration systems. GitLab has evolved to not only store your code, but test and deploy it, attempting to replace many of the tools listed in this series. We won't explore the last option until much later, but it's worth knowing about upfront. GitLab is not an all or nothing tool, you can utilize a handful of the tools or dive in and make it your primary weapon.
Virtual Private Cloud
Why use a VPC? Why not use a VM on Linode or Lightsail? Do I really need to spend the time building up a whole cloud network, risk incurring charges, for just a handful of VMs.
Technology is coming full circle. In the early days of computing during the 70s and 80s, users had dumb terminals connected to a mainframe where most of the processing is done. Now, we have lightweight laptops, Chromebooks, and thin clients doing the exact same thing, with AWS, Microsoft, or even Citrix offering computing power. In the year 2034, the Desktop will make a huge comeback as people will want more control over their systems and need local processing power. Just you wait!
I understand this part of the series might turn off a few people. Know that AWS offers a free annual subscription and a lot of the virtual machine instances are labeled under free tier.
Software Defined Networking
Software Defined Networking (SDN), or what some might call Networking as Code, is an incredible strategy to architecting a network. SDN is vendor neutral because the practice is developed through open standards. Network engineers can automate the process of allowing certain aspects of the network to scale and mold with the traffic. SDN is dynamic in nature. It uses OpenFlow as the protocol, allowing dissociation of the network control and forwarding functions.
This will be one of the final sections, as it branches a bit from systems and deployments into a pure networking subject. I plan on diving deep to have a rigorous understanding and hope to break down the concepts in a simple, understandable manner.
DevOps is culture. With that, you are the most important component to the DevOps Toolchain. This conclusion will have in-depth discussion on what I have learned (as well as the rest of the team) from our experiences in getting into a more aggressive role of deploying software and infrastructure. This discussion with include books, study habits, staying focused, tips for working with teams outside your department, what culture can look like, and continuing to learn and grow in your career.
This will be a grueling undertaking. My timeline spans a few months. I hope to see enough interest generated in this that we can transform these walkthroughs, guides, and blog posts into something more.
Next time, we are going to dig into Terraform, set up Terraform on our local environment, and write our first configuration file.