In this post
I'll just explain what I actually do, and have done over the last, almost 3 years as a consultant in this field, without trying to define a job role.
DevOps is a term that suffers from a
huge overload of meanings, and might be mean many different things to different people or organizations, so I’ll not dare to attempt finding or describing a canonical definition for what a DevOps Engineer does, or even if it’s actually a job role/position or a cultural movement.
The motivations for this post are that sometimes
I also have difficulties in explaining what is it that I actually do in a single sentence, as I’m not your Java expert, Frontend Dev, Sysadmin or other common role you usually find, and that has a single area of expertise strictly defined within a realm/domain of knowledge (sysadmin being a little vague too).
I’ve seen a post under Reddit Devops Chanel that made me question myself if I could describe it in a post in my own blog, after answering the original poster. Here it is my attempt.
What I Do as DevOps Consultant
Background before DevOps role
So when I first started working for the company I’m currently at I’ve had a few short term experiences in the IT field, with a total of around 7 months between them, one for a summer internship that took around 4 months where I got experienced with Full Stack Development, at the time using APS.NET framework along with backend templating using Razor, and some kickout.js mix, using svn as our SCM (sigh.. :D ), after that and also during my BsC, I’ve been 3 months as a Junior Researcher in part time, where I ended up having contact with Virtualization, on a research projec to find impacts of Virtualization in RTOS using a Siemens project at the time named Jailhouse, that allowed to grant virtualization cells (let’s call it this) access to hardware that couldn’t be shared amongst other cells, this was my first contact with Hypervisors, their types, and how they work, and I believe
virtualization concepts are a critical concept to know when working in a DevOps / Infrastructure role.
My Roadmap in a DevOps role
Fiercely - a consulting company that helps IT companies improve their organization process through improvement of Development processes and worflows, infrastructure automation, and overall mindset changes in an opinionated manner.
Since coming to fiercely, where I’ve started working in industrial IOT environment, where I was given the choice of the language, frameworks as long as they would make sense both at an Architectural Level and business requirements.
In that project I ended up using python with flask, got my first contact with
docker, while having to
manage networks, industrial protocols, cross
compiling to arm devices, optimization of RAM resources, and how to harden a software project to withstand physical environment challenges, such as power outages (hello corrupted files, I’m writing this to you), network outages, etc… At the same time, I developed in an internal project with Open ERP (named ODOO ) while configuring it automatically from python scripts (ODOO is written in python as well)
From there I’ve moved to consulting, where I ended up having contact with
Configuration Management, using
Ansible, while keeping the Development environments to guarantee same state across developer’s machine using Vagrant with
LXC (later moved to
Docker) providers and ansible
, here the mindset comes to play -> a known sentence in DevOps world, avoid the
"It works on my machine"
To make all this work together, and for those who have been to configuration management, this is not just , hey use some ansible playbook, because when you are writing those, you need to have
full context of infrastructure and development, you need to also have the knowledge of Operating Systems, their peculiarities, their own scripting (from
powershell and a lot others), and above all a full knowledge of
Software Architecture that is the greatest requirement to any Devops role (forget roles that require you know the latest tool where they require you 5 years of experience for a one time usage tool, that was actually release 1 year ago, and was in beta for 1 year), just have deep knowledge of how software should work, the known patterns, and after that is just tooling syntax.
Since a DevOps role requires you to go across organizational structures, knowing how to program, how network should work, how virtualization happens, soft, type 1, type 2, etc.., you also have to make glues, and those happen most of the time from pipelining your workflows.
CI/CD (continuous intgration/Continuous Delivery) tools, and sourcing your
IAC (infrastructure ascode) and Application code under Source Code Management. To achieve that, I’ve worked extensively with
git, and lot ofgit workflows, while automating and configuring
Jenkins using both
groovy to allow
yaml configuration for human beings that can’t be bothered with groovy and shell script, and that’s where I’ve spent a lot of time, and it’s a constant presence as DevOps, even if I’m not using as much ansible as I would like these days, CI/CD tools and their pipelines are an ever green field.
Security and Access Control
Also end up working with Authentication, Authorization, using LDAP, Keycloak (and all its integrations, SAML , Oauth etc.. ), and keycloak as also been a constant presence, even though there are many tools out there, as I’ve said, we are opinionated, and knowing a triple A (Authorization, Authentication and Access Management ) solution such as keycloak (RedHat knows their stuff :D ) is a must have in your tool belt.
Infrastructure as Code
Besides Docker, Vagrant, and even ansible in some scenarios (in what IAC relates too), I’ve also had contact lately with Terraform, and a short contact with CloudFormation, as besides some On Premises with ESXi for instance(I haven’t automated that one.. yet) you will also end up automating some Cloud Infrastructure, and this where the roles start getting fuzzy, a lot of companies are requiring some Terraform expert, or some Azure DevOps Ninja or AWS Boss, and forget that most of the times, these tools are at the end of the line, and for a good devops role, you require a lot of tools, and you will not end up working with these solo in a DevOps role, otherwise, you are looking for some Terraform Expert/Azure Role and becoming a new Cloud SysAdmin and not actually a DevOps role.
Load Balancer and Reverse Proxying
Well, if you don’t actually end up configuring a
Nginx, a HaProxy or Traefik either in their instance (Docker or otherwise) format or installation, you are doing it wrong. I’ve configured Load Balancers, mostly as Reverse Proxies a lot of time, even though I haven’t met a lot of configuration of ELB or their Azure counterpart yet.
This also comes with having Certificate management that you won’t be able to run from :D
Last but not least, yes, I Develop as Full Stack Development as well these days too, using
you built it.. you run it, so end up, both writing the applicational line, to the Infrastructure code supporting, to the LB in front of it, their deployment and QA pipeline
Well… almost forgot about these.. ElasticSearch, PostgreSql , MySql, etc.. Well I’m not a DBA , but end up configuring this guys as well, from their connections, to their ACL, to their backup and management, but I’m far from being an SQL expert, and would avoid being in a narrow field anyway, being databases, or plane AWS expertise.
Well, so far I’ve been exposed to a lot of languages and lot of different environments, so most of the time, besides all the coding involved, I end up talking to humans most of all, and part of my job is actually helping other fellow engineers having a DevOps mindset, simplifying things, making their life easier to run their own applications inside their whole organization,
reducing the gap between Devs and Operation teams.
Tl;dr you end up working with a multitude of technologies. So DevOps is sometimes used as an umbrella term for being the
Jack of All Trades, Master of Architecture, though I’m not entitling myself as Master of anything, there is still a long road to walk.
Hope you enjoyed it.. hope it brought some light to you on what actually some DevOps do.. or if you are already doing similar things, that you found some similarities between your work, and mine.
Thank you for reading this far :D
Here it is an excellent DevOps roadmap by roadmap.sh