From which background are you transitioning into DevOps?
Depending on which background and pre-knowledge you have, you need to first make sure to get any missing prerequisite knowledge.
As a system administrator or a network engineer, learn software development workflows. As a developer, learn the basics of infrastructure, virtual servers etc. Of course, with zero or little IT background, you have to get all this prerequisite knowledge from server administration to development first.
DevOps covers the whole software development lifecycle, so you work with lots of different tools and technologies. Plus, DevOps is still evolving and there are lots of new tools being developed all the time.
As a DevOps engineer you will not be programming the application, but as you are working closely with the development team to improve and automate tasks for them, you need to understand the concepts of:
And generally understand what the whole software development lifecycle covers from idea to code, all the way to releasing it to end users.
As a DevOps engineer you are responsible for preparing and maintaining the infrastructure (servers) on which the application is deployed. So you need to know the basics of how to administer a server and install different tools on it.
Since most servers use Linux OS, you need to know and feel comfortable using Linux, especially its Command Line Interface. Basic concepts of Operating Systems you need to understand:
You also need to know the basics of Networking & Security in order to configure the infrastructure.
Docker is by far the most popular container technology.
As containers have become the new standard of software packaging, you will most probably run your application as a container. This means you need to generally understand:
A container is a standard unit of software that packages up code and all its dependencies so that the application runs quickly and reliably in any computing environment. Things you should know:
CI/CD is kind of the heart of DevOps. In DevOps, all code changes, like new features or bug fixes, need to be integrated into the existing application and deployed to the end users continuously and in an automated way. Hence, the term: Continuous Integration and Continuous Deployment (CI/CD).
When the feature or bug-fix is done, a pipeline running on a CI server (e.g. Jenkins) should be triggered automatically, which:
There are many CI/CD platforms out there, such as - GitLab, GitHub Actions, Travis CI, Bamboo, TeamCity. The most popular one currently is Jenkins.
Skills you need to have:
Some popular Cloud platforms are - AWS, Microsoft Azure, Google Cloud. AWS is the most powerful and most widely used IaaS platform, but also a difficult one.
Nowadays, many companies use virtual infrastructure on the cloud, instead of managing their own infrastructure. These are Infrastructure as a Service (IaaS) platforms, which offer a range of additional services, like backup, security, load balancing etc.
These services are platform-specific. So you need to learn the services of that specific platform and learn how to manage the whole deployment infrastructure on it.
Example, for AWS you should know the fundamentals of:
Since containers are popular and easy to use, many companies are running hundreds or thousands of containers on multiple servers. This means these containers need to be managed somehow. For this purpose, there are container orchestration tools.
Kubernetes (also known as K8s) is the most popular container orchestration tool. Kubernetes automates the deployment, scaling and management of containerized applications.
So you need to learn:
Specific K8s knowledge needed:
Once software is in production, it is important to monitor it to track the performance, discover problems in your infrastructure and the application.
So one of your responsibilities as a DevOps engineer is to:
Prometheus: A popular monitoring and alerting tool.
Grafana: Analytics and interactive visualization tool.
You should also understand how systems can collect and aggregate data with the goal of using it to troubleshoot, gain business insights etc.
ELK Stack: A popular log management stack.
Manually creating and maintaining infrastructure is time consuming and error prone. Especially when you need to replicate the infrastructure, e.g. for a Development, Testing and Production environment.
In DevOps, we want to automate as much as possible and that's where Infrastructure as Code comes into the picture.
With IaC we use code to create and configure infrastructure and there are 2 types of IaC tools you need to know:
Terraform: This is the most popular infrastructure provisioning tool.
Ansible: This is the most popular configuration management tool.
Since you are closely working with developers and system administrators to also automate tasks for development and operations, you will need to write scripts and small applications to automate them. For that, you will need some scripting or basic programming skills.
Examples: utility scripts like flushing the cache, starting the builds and deployments etc.
This could be an OS specific scripting language like bash or Powershell. But what's more demanded is an OS-independent language like Python, Ruby or Go.
These languages are more powerful and flexible. If you know one of these, it will make you much more valuable as a DevOps engineer.
There are many programming languages, but I would recommend starting with Python. Python is widely used, easy to learn and used in many different cases, especially in DevOps.
You write all automation logic as code. And just application code, automation code should also be managed and hosted on a version control tool, like Git.
Git is a CLI Tool, which you install locally. It enables the tracking of changes in the source code and enables better collaboration on code.
So you need to learn:
Your files are stored centrally in a remote Git repository on the web. The most popular Git repositories are GitHub and GitLab.