Understanding DEVOPS

Understanding DEVOPS

In this article, I'll share a route map and evolution of DevOps, that I find helpful for anyone new to DevOps, regardless of their background. This article helps to have a basic understanding of DevOps, and also for beginners to get an overview of concepts and tools to start with.

Scenario before DevOps

Agile Methodology

Agile methodology is a practice that promotes continuous repetition of development and testing throughout the software development life cycle of the project. Both development and testing activities are concurrent, unlike other models of software development like the Waterfall model, and v-model. While the Agile approach brought agility to development, it was lost on Operations that did not come up to speed with agile practices.

There was a lack of collaboration between Developers and Operation Engineers and this slowed down the development process and releases.

Software companies had begun to realize the need for better collaboration between the teams and faster delivery of software. This gave birth to the DevOps approach. DevOps enabled continuous software delivery with less complex problems to fix and faster resolution of problems.

DEVOPS :

Conventional definition of DevOps is as follows:

DevOps is the combination of cultural philosophies, practices, and tools that increases an organization's ability to deliver applications and services at high velocity: evolving and improving products at a faster pace than organizations using traditional software development and infrastructure management processes.

Being precise-

  • DevOps is a combo of Development and Operations.

  • There are a lot of processes in between for a product to get released. They include: Coding, Building, Testing, Packaging, Release, Operations, Monitoring.

  • DevOps is about making this process of continuous delivery fast with minimal bugs.
  • Instead of manual inefficient processes, create fully automated streamlined processes for the release cycle.

Screenshot (88).png

In simple words, DevOps is a set of practices and tools that help an organization deliver better products faster by facilitating and Integration of the development and operations functions. DevOps is a software development approach through which superior quality software can be developed quickly and with more reliability. DevOps aims to shorten the system’s development life cycle while delivering features, fixes, and updates frequently in close alignment with business objectives.

Here is a video about DevOps :

Devops by Nana

GENERAL CONCEPTS/PREREQUISITES TO LEARN DEVOPS :

Git and GitHub:

Screenshot (2).png

Version control systems are needed regardless of what tech domain you work with. Git is a command-line tool that is used as a version control system. GitHub on the other hand is where the code you write is stored. Using GitHub is a great choice since apart from just pushing your code to a repository, you can use GitHub actions as well, which allows you to create things like a testing pipeline, auto-updates for your dependencies, and more.

Resources:

Git and GitHub by Kunal Kushwaha

GitHub best practices by SayamPathak

Git course at Dataquest

DigitalOcean's guide and cheat sheet for Git

Computer Networks:

Screenshot (3).png

As a DevOps engineer, you are going to be working with Kubernetes a lot. And in Kubernetes, you often have to manually configure how the cluster is going to connect and access the internet, or any network. This also plays into data security to ensure any third parties cannot access your application without permission. Thus you need to have a basic understanding of networks.

Resources:

Computer Networks by Kunal Kushwaha

Linux basics :

Screenshot (4).png

Linux operating system is something that every developer should learn. Linux has a lot of different distributions such as Ubuntu, CentOS, Kali, Arch and so many more. A good understanding of Linux commands is much needed for a DevOps engineer. Usually, an application needs to be deployed on a server so that eventually users can access it. Hence we need some kind of infrastructure, and you as DevOps Engineer might prepare the infrastructure to run the application. Since most servers run on Linux it is much needed.

Resources:

Linux fundamentals workshop by SayamPathak

linux commands by Kunal Kushwaha

YAML :

YAML is a data serialization language used for the configuration of files and applications where data is stored or transmitted. It is majorly used in Kubernetes configuration files. Comparatively, YAML is pretty easier and cleaner than others like JSON and XML.

Screenshot (5).png Resources:

YAML by nana

Complete YAML course by Kunal

CORE DEVOPS CONCEPTS :

programming languages - python, Go (Go Lang):

You need a programming language to write code for automation.

  • Python: Python is also used in some projects to code. But the majority of projects are not going with Python, instead, they choose the Go language.

Screenshot (7).png

  • Go: Golang is widely used for writing automation scripts in DevOps over python. Go has a faster rate of execution, also it can run multiple functions at a time. You'll learn more about it when you start doing hands-on in Go lang.

    Resources:

GO by Nana

GO by free code camp

Cloud :

Until now it is all about development. Coming to the operations phase, you should know the basic concept of how to deploy and manage your application using a cloud provider. As a DevOps engineer, should know to deal with operations part as well. So it is important to know about cloud concepts that come along with how to deploy your application using cloud providers like AWS, Azure, GCP, Civo, etc. You should also know about storage, network, compute, and billing for these. Concepts like virtualization, Infrastructure as Service, Platform as a Service (PaaS), Software as a Service(SaaS), etc. are much needed.

Screenshot (2).png

Kubernetes :

Kubernetes is a container orchestrator also known as K8S. It is an open-source container orchestration system for automating software deployment, scaling, and management. While Docker is a container runtime, Kubernetes is a platform for running and managing containers from many container runtimes. Kubernetes supports numerous container runtimes including Docker, CRI-O, and any implementation of the Kubernetes CRI (Container Runtime Interface). There are many resources to learn Kubernetes. Civo - a cloud provider company has free Kubernetes course videos, which are pretty cool to learn. Links to resources are given below.

Screenshot (6).png

Resources:

Kubernetes

Kubernetes by Civo

Kubernetes by Nana

Workshop by SayamPathak

CI/CD pipelines (Continuous Integration / Continuous Delivery):

Screenshot (4).png

The name itself says it's meaning -Continuous Integration (CI) and continuous Delivery(CD). This is the major concept of DevOps. This concept is the heart of DevOps. The workflow in CI/CD is briefed as:

  • Continuous Integration ensures whether the code that is updated, is committed or not. This is certainly maintaining the integrity of code, and testing of the image as it works expected or not.

  • Continuous Delivery ensures that after passing all checks, your image is staged or not. The image gets deployed and tested to ensure it runs properly or not and finally, it is added to the release cycle.

There are specific tools to handle the CI part and other tools for the CD part. For example, you have Circle CI and ArgoCD. And to automate this task, you can use Jenkins. This can also be done using GitHub Actions.

Resources:

GitLab by Nana

GitHub Actions

GitHub Actions by Kunal

Infrastructure as code :

Screenshot (7).png

Infrastructure as Code is used to codify your infrastructure. This means that you can write some code that will automate the process of provisioning Infrastructure. Now you may ask, why would you need to automate this process? The answer is scaling. As you scale your Kubernetes objects, the resource requirements are also going to increase. In that case, you don't want to be manually provisioning more resources. This is where Infrastructure as Code comes into play.

Resources:

Infrastructure as Code (Terraform by Kunal

Pulumi by Kunal

Observability:

In general, observability is defined as follows :

Observability is a way to monitor your Kubernetes Clusters, and how many resources they consume, create logs of all actions, record the latency and relationship between operations and clusters and check your application performance. For observability, four different aspects are being considered, which are Monitoring, Logging, Tracing, and Profiling, all of which can be done using different tools.

  • One of your responsibility as a DevOps Engineer may be to set up monitoring for your running application, the underlying Kubernetes cluster, and the servers on which the cluster is running to track performance and discover problems.

Screenshot (8).png

Resources:

Thanos

kubernetes monitoring

Chaos Engineering:

In Chaos Engineering, Chaos is exactly what it sounds like. This is done to build robust and resilient systems which won't fail under heavy loads. Top tech organizations such as Amazon, Netflix, and Microsoft utilize chaos engineering to achieve a better understanding of internal systematic behavior and flaws. Resources are given below for Chaos Engineering.

Screenshot (9).png

Resources: Chaos mesh

Chaos by kunal

Policy Engines:

A policy engine is a software component that allows an organization to create, monitor, and enforce rules about how network resources and the organization's data can be accessed. These help Kubernetes clusters secure from external and internal threats. These are very important for security issues.

Screenshot (10).png

Resources:

Kubewarden

OPA-Open policy agent

Service Mesh:

It is a way to control how different parts of an application share data with one another. Unlike other systems for managing this communication, a service mesh is a dedicated infrastructure layer built right into an application. Istio is an open-source project for Service mesh.

Screenshot (11).png

Resources:

Service mesh by nana

There are certain tools for all the concepts mentioned like

  • Git, Maven, and Gradle can be used in this phase for building/ packaging the code into an executable file that can be forwarded to any of the next phases.

  • Entire testing phase can be automated with the help of a Continuous Integration (CI) tool called Jenkins. GitHub actions are also recommended for Continuous Delivery (CD).

-Terraform is a tool for Infrastructure as code.

  • Prometheus, Thanos, and Grafana are tools for monitoring.

-Chaos mesh and Litmus are tools for Chaos Engineering.

-Istio and LinkerD have greater familiarity when it comes to Service Meshes.

  • Kubescape is another K8s open-source tool that provides multi-cloud K8s single pane of glass, including risk analysis, security compliance, and image vulnerability scanning.

There are various tools with much efficiency, some are mentioned above. There are a lot more tools evolving depending on the needs of the industry. As DevOps is evolving rapidly, learning is always embraced. Learning new things and new tools to work with is something more enjoyable and interesting.

So start learning things today, right now😍 .

✨HAPPY LEARNING✨