As a DevOps professional, sometimes I forget how it is getting into DevOps from the perspective of a beginner. So I wanted to create this article outlining a path I would take, if I was starting from zero again. 0️⃣ And having the knowledge that I have now, what the most efficient path to get there would be like.
So basically what are the steps to becoming a DevOps engineer, what do you need to learn and in which order?
What is DevOps?
If you don't know what DevOps is. there is a clear explanation in this article
#What is the DevOps skillset?# Now first to understand how to become a DevOps professional, let's define exactly what skill set you to require for that. 🤔
Software Development Basics
As you are working closely with the development team to improve and automate tasks for them, you need to understand the concepts of:
how developers work and
what workflows they use,
how they collaborate on developing features,
the modern processes like agile and scrum,
what Git workflow they use and
generally understand what software development life cycle covers from idea to code all the way to releasing it to the end users.
Now here it's important to mention that you don't need to be a software developer or the one implementing those agile and scrum processes. You need to understand how those things work on a high level, conceptually.
Software Deployment
The next one is software deployment. Once the feature is developed, it needs to be released to the end users, which means you need an environment, where your application will be running and be available for the end users.
Operating Systems & Linux Basics
As a DevOps engineer, you need to know how to
provision and prepare these environments and
maintain them.
For that, you need knowledge of general server administration like creating virtual machines, mostly with Linux operating system, installing software, doing patches, configuring networking on-premise as well as on the cloud.
Containers with Docker
As part of the more modern infrastructure concepts, you need to understand how to work with containers and the most popular container technology, which is Docker.
Container Orchestration with Kubernetes
For projects with tens or hundreds of Docker containers, you need to know how to work with container orchestration platforms like Kubernetes, which is the most popular one nowadays.
Cloud - Learn 1 of the most popular cloud provider
If you're working on a cloud like AWS, which is the most popular and most used cloud platform for now, you also need to know AWS-specific services and how to manage the whole deployment infrastructure on AWS.
CI/CD - Continuous Integration and Continuous Deployment
Connecting all these pieces together and kind of the heart of the DevOps processes is CI CD pipelines.
It's not just about deploying it to the deployment environment, we don't just take it and throw it on there. Why? Because humans make mistakes, either because of lack of knowledge in some area or just accidentally. So instead we add many gatekeepers before the deployment, so the deployed code needs to go through various of these gate checks to be allowed on the final environment and that's what the DevOps CI/CD pipeline is for:
testing code,
packaging,
deploying to
production
to deliver it to their end users.
Now what are those gatekeepers? Well, testing the code quality, testing code logic, testing that it didn't break any previously existing code, checking for any security issues, testing that it functions as it's supposed to etc. So tools for implementing this whole CI/CD pipeline with all those gatekeepers is a super important skillset.
Monitoring and Observability
As we are humans and we can assume that even with the most cautious measures and a lot of extensive testing, we can't always 100% test every single aspect of the deployment and some issues may slip through to production
env. That's why vital part of the DevOps skillset is to create a process of handling discovered issues in production instead of having a panic mode. So what does that skillset include? Well, it's a thing called "monitoring and observability".
So in the last stage of CD or continuous deployment, after deploying the code changes, we don't just say: "hey we're done, that's deployed so now let's move on to the next task", instead we observe and monitor closely what happens. If some user encounters an error, if something crashes or doesn't work, so we know we need to proactively fix that. So maybe for a couple of hours or within the next days of deployment, we're actively looking and observing whether some kind of issue appears in the production.
Automation
And finally, the last missing piece of really conquering DevOps is automation.
Let me give you some examples, for every new code released:
you always need to test your application,
you always need to check for security,
you always need to package and deploy application changes.
These tasks should happen automatically, so you make sure to execute automated tests that developers or test engineers write, you have automated security checks, quality checks and you have scripts or automation code that deploys that code to the production env:
Infrastructure as Code
DevOps doesn't end with automation, but also automates things done less frequently ( not on every automatic deployment ); for example steps like provisioning infrastructure or setting up a Kubernetes cluster Some of the most popular tools in this area are:
Terraform
- for Infrastructure Provisioning (IP
),Ansible
for Configuration Management (CM
)