DevOps, as well as developer is a perpetual learning path. If you want to start your DevOps journey, here is a guideline.
What you need to know depends on the job you need. If you do YAML all day long, you might not need to know every Linux commands. If you spend hours watching dashboard, charts and others monitoring tools, would not be the same if you are the only person on the service that do a little of everything.
As usual, it depends…
Broad vs Deep
The difficult tradeoff is about “broad vs deep”, meaning you should know lots of stuffs exists, not as deeply on every topic. Some of them are required to be comfortable with.
Just imagine those two dialogs.
- Do you know Hashicorp Vault?
- Well, I see the idea of managing secrets that could be consumed from other services, maybe by some Kubernetes secrets, accessed by API or CLI, with lots of engine and providers, very flexible. I have not used it in production, but I get the idea, played with it on my spare time and watch some talks.
This could be Okay, depends on the situation and the expected level. You can even read later some documentation to catch up on subjects. But now imagine the same question about an important topic like Linux or Docker.
- Do you know Linux?
- Well, have not used it, but I get the general idea, an OS, right?
- Hum… yeah… It is not going to work, sorry.
And you cannot catch up reading some Linux documentation like that.
Few years ago, you could still hear some people say “Docker? yeah, but not for production”. Let us face it, they were wrong. Everyone agrees on that now. It is so broadly used in large company, for heavy use in production worldwide, that there is no more discussion about “is it for production?”.
Those days, you need to move around code in production without thinking about if the servers have the dependences needed, or even the setup. If the container run and passes tests, it will run in production environment, simple as that.
Without containerization, there is no microservices, DevOps would be at that achievement.
For DevOps, know how it works, what it means, how to debug and log. Learn docker compose at it would save some time. Know what a multi-stage build is. Just play around with some containers.
Kind of the next step of containerization. It is how to manage lots of containers on lots of servers. It could be Kubernetes of course, but why not play a little with Docker Swarm.
Play with some reverse proxy with service auto-discovery, like Traefik, or name it. Istio and Envoy could be great but more advance topic. Do not bother now with “how to manage a Kubernetes cluster”, every cloud provider has Kubernetes managed cluster offers.
Start playing around with minikube for a start.
Play with SSL certificates, nobody serious set a website in production without a certificate anymore. Let’s encrypt is fine and free. Set one up with Certbot if needed, Traefik can handle automatically let’s encrypt as well. Get a cheap domain name if needed (like ***.ovh for 2€ a year, or even a .com or .fr if your French as me, not that expensive)
You cannot skip on this one, it is too big. I will talk more on this one in a separated post later.
Just learn GCP, AWS or Azure.
More coming soon…
Depends on your work, you might be a Cloud Architect or SRE without touching ever VM, but let us be honest, in most cases, you will need some descent knowledge about Linux. At least know your ways around. I guess the more you know, the better it is for you, but I have no need to go deep down. Once again it depends on your job. If you are aim a CI/CD, or monitoring stuffs without managing VMs, I guess Linux does not matter that much. I guess you will always at some point be asked to do some Linux. Do not skip this one.
So many things to learn in Linux, you will find all you need on the web.
- VIM (nano…)
- Process, network…
A good basic introduction to Linux should do it. Basic Linux commands should be done without thinking.
I’m not saying you have to do one-liner with awk and grep without thinking but kill a process should be straight forward. Edit file (with vim of course!) should be a second nature.
Want to find some text in a folder? grep -rnw -e ‘where_is_my_vhost.com’. could be useful to find a configuration file based on domain name.
I was listening the other day, Sam Newman (author of building microservices and monolith to microservices, both on O’Reilly) on a talk, joking like: “don’t do bash, I mean, don’t try this at home kids”. I know lots of DevOps would disagree on this one, especially Ops guys. But Python scripts is just so much more readable, that is mean it would be much more maintainable.
You do not need a deep knowledge on Oriented Object. But functions and modules with imports could be nice. here is an example, python’s Gitlab module would make some automation easy, you might refactor some code for some “getInstance” in one module. Otherwise, you will end up with copy-paste on all files, that could make tricky to modify.
I am a developer so my point could be biased. (well, DevOps now, but… still developer).
If you have no knowledge on how web page is done, here is a step-by-step progression you can try for yourself.
- Do a basic hello world with apache and HTML
- Same thing with PHP
- Switch PHP version
- Laravel hello world.
- Laravel with a basic CRUD, that’s mean (like this example, a simple application that add logs just with API) like the application with a simple logging system
- At this time, you could deploy it inside Docker (FIXME link) on Cloud Run or even Kubernetes. Here is an example of a laravel application on Cloud Run
- Next, try other framework, Symfony, Django, Rails.
- Even try some VueJS (Vuecli install with webpack)
- At this point, you should know composer, NPM, Webpack, Laravel-mix. difference between Package.json and Package.lock, same thing for composer.
- I’m not talking about java, tomcat and .war or even Dotnet that could be interesting to check.
- A ReplicaSet of MongoDB
Do not need to go deep on each subject but go broad. You might never need it, depends on your responsibility, but at least you will learn the language of “what you need to install a modern website”.
I am using HTTPie all the time, wget or Curl. But you might be more comfortable with postman or insomnia. The idea is to make request from anywhere (mostly from a server), to anywhere.
- GET, POST, PUT (obvious)
- HTTPie, Curl, Wget or Postman, Insomnia.
- Bearer Authentication
- OpenAPI, Swagger.
Next, it is monitoring. It is an important topic, but I will not talk too much about it. You should have enough with everything else.
You can check ELK or Prometheous with Graphana. I am just dropping some name without any explanation. If you want to dig into monitoring, you will find everything you need.
Infrastructure as Code
Yes, it is a big topic as well, check Terraform. Here is a small exercise, the idea is to setup an VM instance from a backup with Terraform. I done this to drop my personal cost of VM as backup is much cheaper storage. It is a practical case, not that useful, but still a good exercise.
Learn about some automation tools as Ansible.
Do not start with that, but if you are curious, you might want to check those products.
- Vault : secret management.
- Vagrant : might be more useful for developer
- Packer : create a image for VM. Useful.
- Consul : Key value database. I use it with Traefik.
- Terraform : see Infrastructure as Code, a big topic.
- Other ? Maybe, no need to check on Nomad as you might check Kubernetes instead.
Still there? Not too scare?
Once you learn a little bit about every topic, you should have a better sense of what you need and what you want. If you want to specialize in a topic like Cloud Architect, you should know what to do.
After? Keep learning, again and again. It will never stop. It goes faster and faster.