DevOps involves both Dev and Ops operations, so DevOps engineers have a broad skill tree that spans many domains, and each domain has several similar tools. Let alone newcomers, even many old birds find it too much to learn.
My strategy is to learn and master one tool in each area. Once you master one tool, other tools often follow. If you’re already working with DevOps in your organization, it’s natural to master the tools you use in your organization. For starters, here are a few tools that I think are the most mainstream.
Version management: Git
Both the support engineers and DevOps’ own Infrastructure as Code are inseparable from the versioning tools of the code. The most popular version management attack is Git, and the most popular Git codebase platform is GitHub.
It is recommended that DevOps engineers master basic Git operations, learn common Git Flow, and familiarize themselves with GitHub configurations.
I think the most useful feature on GitHub is the Web Hook, which allows you to integrate other tools to achieve some cool features.
Operating system: Linux
Most applications today are deployed on Linux systems, so DevOps engineers need to understand basic Linux concepts and use basic Linux command lines.
It would be nice to have some Bash scripting as well. I didn’t spend much time learning Bash scripts, though, because I tend to write complex scripts in Python.
In addition, it is recommended that DevOps engineers learn basic network knowledge, such as IP, DNS, HTTP, and HTTPS, as well as basic system security knowledge, such as how to configure users, user groups, SSH based on secret keys, and firewalls.
Cloud platform: AWS or Aliyun
The code is naturally deployed to the server, which is now mostly in the cloud.
Nowadays, mainstream cloud platforms not only provide cloud servers, but also provide various other services, such as databases, message queues, object storage, etc. So it’s important to master the basics of a cloud platform.
In my opinion, AWS is still the best public cloud platform, but Ali Cloud is still the most widely used in China. I suggest that you choose one of these two platforms to start learning.
Code build and automated testing: depending on the programming language you need to support
Deploying Dev code to Ops requires code building, package management, and automated testing.
Depending on the language you need to support, choose a different technology, such as Maven for Java, NPM for Javascript, or YARN.
CI/CD: Jenkins
Of course, we don’t want all builds and tests to be done manually, but automatically, continuously, and ideally continuously deployed to production.
This is where the CI/CD platform comes in.
The oldest and most mature CI/CD platform is Jenkins. But I think it’s a bit old and cumbersome, so you can also look at GitLab or GitHub Actions.
Container engine: Docker
Container technology is becoming more and more popular, not only for breaking up a server into several, but also for changing the paradigm of software development. The most mainstream container engine is, of course, Docker.
Container Choreography: Kubernetes
If you are deploying only a few containers on a single server, use Docker or Docker Compose instead. But if you have multiple servers, deploying hundreds or thousands of containers, then you need a container choreography system.
Kubernetes has basically become the industry standard for container choreography systems and is highly recommended for DevOps engineers.
Monitoring: Prometheus
The more complex the system becomes, the more difficult it is to understand the operating state of the system. We certainly don’t want to treat complaints as alarms, so it’s important to monitor the system.
The most advanced monitoring system currently available is Prometheus, which is more suitable for container environments than traditional monitoring systems.
Infrastructure is code: Terraform, Ansible
We’ve talked about how many systems, and yes, DevOps is about that many things.
We don’t want all of these systems to be configured manually, we want them to be configured automatically through code, which is less error-prone on the one hand. On the other hand, you can use Git to manage configuration files, which makes it easy to trace configuration changes.
The most useful tool for infrastructure configuration is Terraform. All of our cloud resources, GitHub and CICD pipelines are configured with Terraform.
For operating system and application configuration, I recommend Ansible, which is lightweight and quick to use.
Script language: Python
Even with all these tools, you still have to write your own scripts to implement certain functions or link systems together. So it’s important to have a scripting tool. I recommend Python, which is easy to learn and has extensive libraries.
These are my recommendations for DevOPs-related tools, which are somewhat subjective. What tools and skills do you think you need to learn?