Alright, as you are here I am assuming that you are either interested in becoming a DevOps professional or you are already a DevOps engineer and want to grow in your DevOps career. Let us discuss what it takes to be a DevOps professional. DevOps careers usually have a following job title Junior/Associate/Senior DevOps Engineer or Site Reliability Engineer or Staff Software Engineer Devops or sometimes titles related to Application Infrastructure. In order to get into the above titles of DevOps, it is essential that you have some good working experience as either a Systems Administrator or Systems Engineer or Cloud Engineer or other related titles. You should have a proper understanding of some topic which are essential in order to crack and interview or to start your career in DevOps and the topics are software development, networking, computer architecture and cloud computing.
Let me list out the technologies first before I give a brief introduction to each of them. Below technologies are some of the important technologies and practices which are preferred to learn and have good experience before getting into DevOps career. This will also give an idea to the DevOps professionals where they need to concentrate inorder for them to grow in their career.
- Programming/Scripting languages for automation
- Linux
- Command line (Linux Terminal / Windows Powershell)
- Software development life cycle (e.g., Agile/Waterfall methodologies)
- Cloud service providers (e.g., AWS,Azure,GCP)
- Networking and Security
- Source code management (SCM)
- Microservices / Monolithic architectures
- Web Servers
- Build Tools
- Databases (SQL/ NoSQL)
- Containerization
- Orchestration
- Logging and Monitoring
- Configuration management
- Continuous integration and continuous deployment (CICD)
Let’s talk briefly about each technology now. These are the must know (not always but preferred) technologies required to be learned for any DevOps engineer.
- Programming / Scripting languages for automation:
(e.g., bash, Python)
- Should know at least one programming language to work with scripting. Scripting plays a major role in the DevOps area as this helps in automating tasks by avoiding the repetitive tasks to improve speed, productivity and efficiency. Any scripting language can be used for this purpose and companies won’t be specific about the language, they prefer any scripting language you are comfortable in.
- Linux:
(OS/ file systems/ administration/ networking)
- One must know various types of Linux distributions and what their advantages are along with their file system architecture, boot process, user/permissions/access administration part, networking tools and commands. Linux command line commands are mandatory to use and operate Linux OS as you will be spending all your time in the command line when using it. Linux is one of the most used operating systems from past few years due to the flexibility and the nature of the development of software applications. Aagin, it is highly preferred due to its unparalleled security and scalability. Linux allows easy installation of packages as an open source and gives the user full control over the source code. There are a variety of Linux distributions out there and are available at no cost except for RedHat Enterprise Linux as they provide support for enterprise companies. Managing servers is the main prerequisite.
- Command line (Linux Terminal / Windows Powershell):
(e.g., Bash, Powershell)
- Working with commands in terminals is what a DevOps professional’s everyday job is. One must know proper Linux shell commands such as Bash commands to operate files and permission of files and users and network monitoring and analysis tools. Companies who use Microsoft OS, should know Powershell commands. As Linux is widely used, learning Linux commands and tools will give a better scope to get into DevOps.
- Software development life cycle (SDLC):
(e.g., Agile/Waterfall methodologies)
- There are certain practices that are followed in the software development processes such as Agile methodology and Waterfall methodology for better achievement of project completions and maintenance by proper coordination with business teams and development teams. Currently most of the companies are using Agile methodology as this works better for the current software development architectures and practices. Waterfall methodology is fading out slowly and completely.
- Cloud service providers:
(e.g., AWS,Azure,GCP)
- Cloud platforms provide the necessary services, infrastructures and tools to deploy and run applications on a pay-as-you-go basis. Any one cloud service platform must be known for a DevOps individual. There are many cloud service providers out there and the major ones are Amazon Web Services (AWS), Microsoft Azure and Google Cloud Platform (GCP).
- Networking and Security:
(e.g., OSI Model, HTTP, HTTPS, )
- This particular area should be a must known area by any DevOps individual as this plays a key role in setting up the infrastructure, security and access points to the servers and applications. Without networking there would be no proper access and security. As security is the main concern, networking would be on one of the top lists for DevOps. Knowledge of networking and security terminologies and protocols such as OSI Model, HTTP, HTTPS, SSL, FTP, etc are prerequisites. Should have knowledge on how a request passes through the network such as “What happens when you enter a website in the browser?”.
- Source code management (SCM):
(e.g., GitHub, GitLab)
- This is a place where a number of developers work together as teams and store their code with proper version controlling and tracking changes in the project’s source codes during the development of the applications. This leads to faster developments and support.
- Microservices / Monolithic architectures:
- One must have experience and good knowledge of microservices architectures and monolithic application architectures. There are many companies who are still using monolithic while many are moving to microservice architectures as their services are fine-grained and the protocols are lightweight.
- Web Servers:
(e.g., Apache HTTP, Nginx, Apache Tomcat, NodeJS, IIS, Lighttpd)
- A DevOps professional must know different types of web server present out there and their best practices for different applications and how to setup the applications in a particular web server.
- Build Tools:
(e.g., Gradle, Maven, PyBuilder, Ant, NAnt)
Some applications need to be made executable applications from their source code before they can run properly, so in order to make them executable they need to be built first and the build tools help in automating the building process. The building process makes the code into an executable form by the following certain activities such as compiling, linking, packaging the code.
- Databases (SQL/ NoSQL):
(e.g., MySQL, MongoDB)
- One must know the differences between SQL (for structured data) and NoSQL (for unstructured data) databases and should have the knowledge of which works best for a particular application. Connections, access levels and working knowledge of databases is needed as to implement connections of various SQL and NoSQL databases to applications. Everything is pretty much documented in their respective websites.
- Containerization:
(e.g., docker)
- Containerizing applications have many benefits and this is currently a growing ecosystem. Containerization gives faster start-up of applications and easy scaling. It is portable between various platforms and cloud platforms. Once its setup, it can be used by anyone and on any platform – simply anywhere. A better and easier way to spin-up images with higher utilization of compute resources in a lightweight manner rather than using VMs.
- Orchestration:
(e.g., kubernetes, docker swarm)
- Orchestration is a process of automating the workflow processes that is required to deliver resources as a service by using required tools to scale up and down and provide proper availability of the application at all times. Containers are widely used in orchestrating microservices for various services of the applications and configuration management tools are used to maintain high availability of servers.
- Logging and Monitoring:
(e.g., Prometheus & Grafana)
- Once the application is up and running, it should be monitored to make sure the application is available to the end user all the time. Logging and monitoring will help us in giving alerts and analyzing how the servers are running and behaving in all times (such as weekdays, weekends, holidays, sale seasons, working hours, etc), how much load is being taken by the server, what’s the CPU utilization is, and track how many incoming and outgoing request. By keeping track of servers and their usage, we can set up automated rules to scale up and down with usage, budget and other project requirements.
- Configuration management:
(e.g., Chef, ansible, puppet)
- Configuration management tools help in making the applications work smoothly, and efficiently by automating rigorous tasks by using Infrastructure-as-a-code as software applications run in different machines and Operating Systems . Using various configuration management tools, we can simply write code in a single file by mentioning the requirements of the infrastructure in it, then run the file, and manage a huge number of servers and machines starting from installation to setting up configurations, etc. Infrastructure-as-a-code is written in different languages in different tools.
- Continuous integration and continuous deployment (CICD):
(e.g., Jenkins, GitLab )
- CI/CD basically refers to the combination of automating both Continuous Integrations and Continuous Deployment or Continuous Delivery. CI/CD automation tools are used for automating various stages (such as: Development phase, Testing phase and Production) of application development which gives frequent deliveries to the end customers in less time. Several CICD pipelines can be set up to automate the processes such as triggering the source code management when updated to certain branch (mostly ‘master’ branch), containerizing the application, orchestrating it, building and testing the application and finally deploying it to production.
The above mentioned technologies and tools are the most common ones and there are a lot more out there that are ever changing and highly useful, depending on the application development, usage and pricing.
I will be discussing every technology in detail in my upcoming posts. Keep an eye out for the new posts!
If this article helped you understand in a better way and if you would like to add more to this article, please feel free to comment below with suggestions.
As always, please follow DevOpspal social media for more updates and notifications on new content. Feel free to share your thoughts and add any technologies and tools related to DevOps in the comment section below.