DevOps is defined as a set of practices that tries to shorten the systems development lifecycle while maintaining high software quality by combining software development (Dev in ‘DevOps’) approach with information systems operations (Ops in ‘DevOps’) knowledge and practices. Oh, OK… what?!
Basically, in roughest terms, this means doing the Ops work (as in systems and network administration) by applying some techniques from programming, aka software development. In other words, you’re doing the systems and network administration by programming it.
So, it is an amalgam of software development and systems administration. Which means you can approach it from three sides:
as a software developer, as a systems admin or as a complete noob.
In this article, I’ll try to explain what you, the aspiring noob, need to learn to become a DevOps engineer. If you, however, belong to those other groups (devs or admins) you can also benefit from this by finding out where your knowledge is thin and what you should learn to enter the path of DevOps engineering. Learning paths will differ, for sure, but in the end, all three groups will have to acquire the same set of skills and the same knowledge.
I’m assuming that you have some general knowledge of computers, computer networks, Internet protocols and general programming.
The DevOps Basics
DevOps is, after all, ‘Ops’. So, you have to learn how to administer hosts and set up networks. Which means ‘hard’ systems administration. You don’t need to be the master of this stuff (but it will benefit you nevertheless) – some junior level admin course will do. You have the choice of Linux or Windows and should at least get the basics of both, but master at least one of them. I’ll recommend Linux as most DevOps is centred around Linux, but Windows is OK as well.
There are a lot of online courses for Linux or Windows administration and some of them will even prepare you for relevant certification exams. I can recommend ‘Complete Linux Training Course to Get Your Dream IT Job 2020’ on Udemy. The course should, at least, teach you to work in the command line and the basics of shell scripting. For learning Windows administration, Udemy offers ‘Microsoft Windows 2016 Server Training for Beginners’.
You will have to know networking stuff, at least the basics of it. Here is a good course for you: ‘Introduction to Networking’ by NYU, offered via EdX platform.
Now, for the ‘Dev’ side: you should learn some programming. I’m recommending taking some free online course or tutorial for Python (aim for Python 3 as Python 2 is deprecated) – it is a scripting language that is good for automating stuff, and you will find a lot of examples that will help you at your job. Of course, learning Bash scripting for Linux and PowerShell scripting for Microsoft Windows is a must. Try to get as proficient in it as you possibly can.
Also, get acquainted with programming languages your development team is using. You don’t have to be a proper developer, but you should at least get to know the tools and the workflow which is specific to a given language.
The DevOps Tools
There’s a lot of stuff that you need to learn here. Let’s start with basic tools.
Git is a source code version control system used by most developers these days. It’s almost certain that you’ll need to pull the codebase from some git repository, run automated tests on it and then deploy it somewhere. And, of course, you should automate that workflow. Apart from that, you will certainly use git for your own purposes, to keep your code in check. Git is the tool to use for GitHub, GitLab or Bitbucket. It has some rather steep learning curve, but it’s powerful, especially when you master hooks.
Jenkins And Travis CI
Jenkins and Travis CI are continuous integration (CI) automation testing tools. Automated testing is essential in the DevOps workflow and these tools can be configured to pull code from the git repository, build the testing environment, run predefined tests, make decisions based on test results and tear down the testing environment. Needless to say, you’ll need to know git and other tools and how to write scripts that will execute parts of the workflow. Udemy offers a bunch of Jenkins courses, like ‘Jenkins Tutorial for Beginners (DevOps and Developers)’.
Docker containers are an essential part of modern IaaS and PaaS. You’ll need to know how to create, update and manage docker containers, as well as how to monitor and secure them. Docker containers are usually used with Kubernetes, so knowing how to use them is a must for a DevOps engineer. Again, Udemy offers a bunch of courses where you can learn about Docker, such as ‘Docker Crash Course for busy DevOps and Developers’.
If your project is more complex than a single Docker container, you’ll need something to manage your container fleet. Which, today, means that you’ll need to learn Kubernetes. EdX offers ‘Introduction To Kubernetes’ and Udemy offers ‘Certified Kubernetes Administrator (CKA) with Practice Tests’.
Configuration Management Tools
Puppet, Chef, Ansible, SaltStack… a bunch of tools that enable you to manage your configurations in a well-behaved way using descriptive languages which describe what you want to achieve, not how to do it. If you’re lucky enough, you’ll need to learn only one of these tools. However, if you plan to work with multiple clients, you’ll have to adapt to their choice of tools, which means learning several of them, even perhaps all of them.
The chance is that your projects will run fully or partially on some cloud infrastructure. The logic is similar, but the execution is different, so you’ll need to learn (and possibly been certified) most of them. AWS, Microsoft Azure and Google Cloud Platform are top three public cloud providers and they all offer certifications specialized for DevOps engineers.
Provisioning and Orchestration Tools
Each public cloud provider offers some tool or API for provisioning and orchestrating infrastructure and services. Do I need to mention that all of them are different? If you chose to go multi-cloud, or create a hybrid cloud, you’ll need something that can link them all. Tools like HashiCorp’s Terraform and Packer are such tools, which can interface with most public cloud provisioning APIs, but also private cloud infrastructures like VMware vSphere, OpenNebula or OpenStack. Terraform is used for cloud provisioning and orchestration, while Packer is used for provisioning compute nodes. ‘Terraform – Beginner to Advanced 2020’ on Udemy will teach you Terraform (note: you’ll still need to learn different cloud APIs to successfully use Terraform for cloud provisioning).
Monitoring and logging tools
This is another important category of tools for your DevOps tool stack. There are a lot of monitoring tools that you can use for managing your infrastructure like Nagios, Icinga, Zabbix, Prometheus, just to name a few. You need to know how to install them, how to size them, how to configure them and how to use them efficiently.
Centralized logging is another one of those essential tools. Stuff like ELK stack, Graylog or something else is necessary for the ‘Ops’ part of your job – to monitor and analyze your production systems.
A Cherry on Top
DevOps is not just scripting, OS administration and tools. There’s an entirely new paradigm (oh, how I hate this word!) that you need to learn, along with some stuff that is always necessary to know and adhere to.
Invest your time in taking a good security course. Security is not an afterthought and it must be included from the initial design of the system, all the way to its life cycle. ‘Network Security’ is a course that will teach you the fundamentals of securing networks and systems.
General DevOps Principles
Courses like ‘Introduction to Site Reliability Engineering and DevOps’ from Linux Foundation, and ‘DevOps Practices and Principles’ from Microsoft, both available on the EdX platform will teach you the gist of DevOps culture and impact for your organization.
When it comes to DevOps education, questions we usually hear relate to the average timespan needed for someone to consider themselves an expert. We hear estimations from a minimum of several weeks to six months. The truth is, philosophical as it may be, that the learning never stops. And to truly call yourself a DevOps expert, make sure to start the practice whilst boosting your theoretical knowledge.