Linux DevOps tools: Building Linux Infrastructure as Code Workstation
I have been doing quite a bit of DevOps work the past few months and have found myself working with Linux tools more and more. With this being said, I have built up a Linux DevOps workstation to use as a DevOps platform side-by-side with my Windows workstation. This is being ran inside a VMware Workstation environment currently on my new IBM P620 ThreadRipper (more on that in a future post). I wanted to put together a quick post and detail the Linux Devops tools that I am using and have subsequently loaded on the Ubuntu workstation. Also, a few little pesky issues that I have ran into that are due to coming from Windows as well as another issue I will detail. Let’s look at Linux DevOps tools: Building a Linux Workstation.
Why Linux for DevOps?
You may ask – why a Linux workstation? I will say this, my Windows 10 workstation has performed admirably carrying out DevOps work and I envision going back and forth between the two for now. However, it comes down to the fact that when you get deeper in to the DevOps world of containers and Kubernetes, most of the tools are natively written for the Linux world. You will find yourself trying to make tools work like they are in Linux when you run them on Windows. So, I finally got to the point of, why not just run them in Linux like they are written to do?
Also, going the other direction, things have matured on Linux beyond our wildest imaginations thinking back even 10 years ago. There are so many great tools that now work on Linux, ironically, thanks in part to Microsoft. When you think about PowerShell Core and VS Code, these work great on Linux. So, I applaud Microsoft for embracing the Linux world like they have all the way around, including WSL which I have written about quite a bit as well.
So there you have it, for me, now is a great time to embrace Linux full on with DevOps work I am doing as this will help to ease some of the pain I have been experiencing on the command line tools side of things running on Windows.
Linux DevOps tools
To begin with, I am working with an Ubuntu 20.04 workstation loaded in VMware Workstation with the latest patches in place on both fronts. What Linux DevOps tools am I loading?
VS Code
- VS Code – My IDE of choice working with Terraform, Docker, Ansible, and others. This can be installed from the Ubuntu app store.
PowerShell Core
- PowerShell Core – PowerShell Core terminal for interacting with various environments including vSphere!
Copy
# Update the list of packages
sudo apt-get update
# Install pre-requisite packages.
sudo apt-get install -y wget apt-transport-https software-properties-common
# Download the Microsoft repository GPG keys
wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
# Update the list of products
sudo apt-get update
# Enable the "universe" repositories
sudo add-apt-repository universe
# Install PowerShell
sudo apt-get install -y powershell
# Start PowerShell
pwsh
Git
- Git – A must-have if you are working with Github or interacting with most code repositories and versioning systems
sudo apt install git
Docker
- Docker – The de facto container runtime used everywhere. Loading Docker locally and installing the Docker plugin in VS Code to interact with Docker containers in VS Code
sudo apt install docker.io
Kubectl
- Kubectl – THE tool for interacting with Kubernetes clusters – managing, configuring, installing, etc
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
Helm
- Helm – A “package manager” of sorts for Kubernetes clusters that allows installing applications in your K8s clusters
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
Amazon CLI v2
- Amazon CLI v2 – The tool for interacting with Amazon Web Services and using various credentials to authenticate with your environment
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Terraform
- Terraform – The infrastructure-as-Code platform that is used by most to interact with all types of environments, including vSphere, AWS, Azure, GCP, etc.
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
Also, as you can see above, I try to install as many of these as possible with package management. This allows easily managing the lifecycle of the tools in the future when new releases come out. Simply running your apt package management commands will pull down the latest versions.
Concluding
It is really an exciting time for DevOps. There are so many great tools out there as well as great platforms. You can use just about any platform you want to use to write Infrastructure-as-Code. However, Linux certainly has advantages when it comes to interacting with containers and Kubernetes environments with the various tools that are natively written for Linux anyway. I will keep this post updated and let you guys know my experiences migrating from Windows to Linux for DevOps purposes.