Interested to find out what skills are needed to chase a DevOps/Cloud engineer role? Let’s explore together the chaotic landscape around the DevOps model.
These days everyone has its own definition of DevOps. For me, it’s an umbrella term. It gathers everything around the development software lifecycle and the effort to continually improve the software & value delivery.
It’s an attempt to bring together Operations and Development, two traditionally separate teams with different perspectives and priorities. Developers want to bring new features to the table as fast as possible while Ops teams focus on stability and want to ensure that everything keeps running.
Combining these two roles, we end up with a hybrid one. A role of someone that shares the pains and responsibilities of both teams and tries to align them in the same direction. Which is to build a battle-tested software development & delivery process focused on operational excellence that brings value as soon as possible.
Originally, DevOps was supposed to be a culture that spreads equally between developers and operations rather than a specific role but the reality is different.
Based on the above, I’ll try to gather a set of tools and technologies a DevOps engineer should know. Of course, this list is highly affected by my personal taste and experiences and it’s not supposed to be a thorough one, but a guide towards the DevOps path.
I’ll by analyzing overtime each of these subjects in detail as separate articles so stay tuned.
My grouping of consists of these categories: programming language
, OS & server management
, cloud
, containers
, networking
, web servers
, Infra as a code
, CI/CD
, monitoring
versioning
, container orchestration
.
Programming language
Knowledge of at least one programming language, mainly for automation and scripting. Python
or Go
would be my two main picks here.
Python due to its wide adoption, ease of learning, suitability for automation, and popularity with anything data related.
Go
because it’s fast, well-scaled, focused on system programming and has given birth to lots of foundational DevOps tools like Docker
, Kubernetes
, Terraform
, Istio
among others.
OS knowledge & server management
The main focus here should be Linux
as the OS that serves the majority of systems and workloads. Mastering Linux takes time and practice and there is no shortcut.
Start with ubuntu
, centos
or fedora
. OS administration
is the basic skill here since it provides you with the ability to navigate Linux and perform various operations.
Practice in bash scripting
, text manipulation tools like awk
, sed
, grep
etc., text editors, systemd
, resources management, filesystems, process management & monitoring
.
Cloud
AWS
or Google Cloud
are my choices here, two of the most used cloud platforms. The main point is to have a solid understanding of any cloud provider’s tools, processes and be able to design and operate cloud-based solutions comfortably.
Containers
So far the choice here is quite straightforward, Docker
is the main tool around. Check my Docker mini-tutorial series here for more info.
Networking
No need to be a network engineer but a solid basis of networking and how some fundamental protocols function is essential.
Generic knowledge around how HTTP/HTTPS
, SSL/TLS
, FTP
work along with some basic network debugging skills in Linux with tools as traceroute
, tcpdump
ping
, nmap
netstat
etc. Firewall
, routing
, ssh
are also some important topics.
Web Servers
Basic ideas around webservers and their usage. Nginx
or Apache
the two obvious choices here.
Knowledge of the concepts of reverse and forward proxies
& loadbalancer
and the ability to configure them are super handy.
Infrastructure as a Code
I’ll group IAC
and configuration management
together here and my selection consists of Ansible
and Terraform
.
Treat your servers like cattle not pets. Spawn them, use them, and replace them auto-magically.
Continuous Integration & Continuous Delivery/Deployment
Lots of new exciting tools to pick from. My personal taste leans more towards newer tools like, Circle CI
, Github Actions
and Gitlab CI
.
Knowledge on how to set up and maintain automated digital pipelines is at the core of a DevOps role.
Monitoring
Observability is crucial in modern complex systems so knowing your way around infrastructure and application monitoring goes a long way.
The most popular choices here include Grafana
, Prometheus
, Elastic Stack
among others.
Versioning, code repository & collaboration
Versioning is a building block for various DevOps processes as without it we wouldn’t be able to achieve a high level of automation and digital pipelines.
Github
& Gitlab
are the two main players on this subject.
Container orchestration
For more complex solutions with numerous containers, a container orchestration solution is a necessary evil.
The industry standard here is kubernetes
but is a complex tool that requires practice. Docker swarm
can also be an easier alternative to begin with.
Alright, that was it, my quick guide around the DevOps jungle. Stay tuned for more details on each subject and tool.