Skip to main content

Command Palette

Search for a command to run...

Understanding DevOps

Updated
17 min read
Understanding DevOps
A

I'm a DevOps magician, conjuring automation spells and banishing manual headaches. With Jenkins, Docker, and Kubernetes in my toolkit, I turn deployment chaos into a comedy show. Let's sprinkle some DevOps magic and watch the sparks fly!

DevOps is a software development methodology that improves collaboration between developers and operations teams by using various automation tools. These tools are implemented using various stages that are part of the DevOps Lifecycle. DevOps is a culture that improves the organization's ability to deliver applications.

OR

DevOps is a mix of various tools and technologies and is purely based on the project. It can have Security Monitoring, Support, Development, chatbots, Tools, AI, etc. (The Development part can include your Java and Node.js)

What are DevOps Benefits?

  • Improves the Application Quality

  • Ensure that every action carried out in the software delivery process can be tracked.

  • Security

  • Development Speed

  • Cost-effective lean approach.

Why DevOps?

  • Faster Software Delivery

  • Improved Collaboration

  • Reduced Deployment Failures

  • Enhanced Quality and Stability

  • Scalability and Flexibility

  • Reduced Time to Recovery

  • Cultural Transformation

  • Innovation

  • Cultural Transformation

  • Alignment with Business Goals

  • Cost Efficiency

DevOps includes:

CI/CD pipelines
Automated SSL Certificate Rotation
Secret Management (e.g., Vault, SOPS)
Canary Deployments with Progressive Rollouts
Autoscaling with Metrics-Driven Policies
Immutable Infrastructure with Blue-Green Deployments
Debugging with Distributed Tracing
Cluster Autoscaler Tuning for Workload Spikes
Self-Healing Infrastructure (e.g., Health Checks & Restart Policies)
GitOps with Advanced Reconciliation Loops
Service Mesh Implementations (e.g., mTLS, Traffic Shaping)

Operating tools are not DevOps - just a part of it.

What are the anti-patterns of DevOps?

A pattern is a common usage that is usually followed. If a pattern commonly adopted by others does not work for your organization and you continue to blindly follow it, you are essentially adopting an anti-pattern. There are myths about DevOps. Some of them include.

• DevOps is a process

• Agile equals DevOps

• We need a separate DevOps group

• DevOps will solve all our problems

• DevOps means Developers managing Production

• DevOps is Development-driven release management

• DevOps is not development-driven.

• DevOps is not IT operations-driven.

• We can’t do DevOps – We’re Unique

• We can’t do DevOps – We’ve got the wrong people

What is Automation, Scaling, and Infrastructure?

Automation lies at the heart of DevOps. It involves the use of tools and processes to replace manual tasks, thereby reducing human error, increasing efficiency, and accelerating delivery. Automation encompasses everything from code integration and testing to deployment and monitoring. By Automating Routine tasks, development teams can focus on innovation and problem-solving, leading to higher-quality software.

Scalability and Efficiency:

Scaling is another vital aspect of DevOps. As businesses grow, so does the demand for their products or services. DevOps provides the means to scale applications and infrastructure seamlessly. Cloud platforms like AWS, Azure, and Google Cloud offer powerful tools for dynamically allocating and managing resources, ensuring that applications can handle varying workloads without disruptions.

Infrastructure as Code (IaC):

Infrastructure as Code is a fundamental concept in DevOps. It involves managing and provisioning infrastructure using code and automation tools. This allows for consistent, reproducible environments across development, testing, and production, reducing the risk of configuration drift and ensuring that deployments are reliable.

Developer vs DevOps

Developers are responsible for writing and testing code that meets the functional requirements of the software. They typically work closely with product owners or project managers to understand the requirements of the software and to ensure that it is delivered on time and on budget.

DevOps engineers, on the other hand, are responsible for ensuring that the software development process is streamlined and efficient. They focus on automating processes, managing infrastructure, and optimizing the software delivery pipeline. DevOps engineers work closely with developers, IT operations, and security teams to ensure that the software is delivered quickly with minimal downtime and errors.

In summary, while developers focus on writing and testing code to meet functional requirements, DevOps engineers focus on the software development process itself, ensuring that it is optimized for speed, quality, and reliability.

@blog.bytebytego.com

DevOps Responsibility

  • Checking Email / JIRA Tickets

  • Checking Notifications from the Monitoring System

  • Ensuring that there is no critical alert unattended.

  • Provide Help and Support to Developers

  • Creating Jenkins Jobs for Deployment

  • Supporting existing Infra and Creating New Servers

  • Deploying Code on Dev & Prod Servers

  • Checking for Proper Approvals Before Code Release

  • Build And Release Process

  • Managing User Access to Resources (Grant / Revoke)

  • Managing GIT Branches

  • Automation (Jenkins / Ansible)

  • Server and application support

  • Ensuring Backup and Creating Backup Policy

How would you describe a successful DevOps engineer or a team?

  • Collaboration

  • Communication

  • Set up and improve workflows and processes (related to testing and delivery)

  • Dealing with issues

Can you describe which tool or platform you chose to use in some of the following areas and how?

Continuous Integration (CI): ---------------Jenkins, Travis CI, CircleCI, GitLab CI/CD

Continuous Deployment/Delivery (CD): ----------Jenkins, GitLab CI/CD, Travis CI, Circle CI, Spinnaker

Version Control: -----Git

Provisioning infrastructure--------Terraform, AWS CloudFormation, Azure Resource Manager (ARM) Templates, Puppet

Configuration Management-----------Ansible, Puppet, Chef, SaltStack

Monitoring & Alerting ------------Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana), New Relic

Logging -----------------ELK Stack (Elasticsearch, Logstash, Kibana), Splunk, Prometheus, Grafana, and AWS CloudWatch Logs

Code review--------GitHub, GitLab, Bitbucket

Cloud Services-----AWS, Azure, Google Cloud Platform (GCP)

Code coverage-----------SonarQube

Issue Tracking---------------Jira, GitLab Issues, GitHub Issues, Trello

Containers and Containers Orchestration----------------Docker, Kubernetes, Docker Swarm, Amazon ECS

Tests-------Robot, Serenity, Gauge

Collaboration and Communication: --------------Slack, Microsoft Teams, Confluence, Jira

Security ----------SonarQube, OWASP Dependency-Check

Artifact Repository-------------------Nexus, Artifactory

What is Version Control?

  1. Version control is the system of tracking and managing changes to software code.

  2. It helps software teams to manage changes to source code over time.

  3. Version control enables the current team to analyze the deletion, editing, and creation of datasets made since the original copy. It brings clarity to the development of the software.

What are the benefits of using version control?

● All team members are free to work on any file at any time with the Version Control System (VCS). Later on, VCS will allow the team to integrate all of the modifications into a single version.

● The VCS asks to provide a brief summary of what was changed every time we save a new version of the project. We also get to examine exactly what was modified in the content of the file. As a result, we will be able to see who made what changes to the project.

● Inside the VCS, all the previous variants and versions are properly stored. We will be able to request any version at any moment, and we will be able to retrieve a snapshot of the entire project at our fingertips.

● A VCS that is distributed, such as Git, lets all the team members retrieve a complete history of the project. This allows developers or other stakeholders to use the local Git repositories of any of the teammates, even if the main server goes down at any point in time.

Name some Version Control tools

  1. Git

  2. Bitbucket

  3. Fossil

  4. AWS Code Commit

What is Source Code Management?

It is a process through which we can store and manage any code. Developers write code, Testers write test cases, and DevOps engineers write scripts. Different teams can store code simultaneously. It saves all changes separately. We can retrieve this code at any point in time.

What is Agile, and is DevOps different from Agile?

The Agile methodology is a way to manage a project by breaking it up into several phases. DevOps is a practice of bringing development and operations teams together, whereas Agile is an iterative approach that focuses on collaboration, customer feedback, and small, rapid releases.

Difference between Scrum and Kanban

Scrum and Kanban are both popular agile project management frameworks that help teams organize and manage their work. They share the goal of improving efficiency, collaboration, and the delivery of high-quality products, but they have different principles and methodologies.

ScrumKanban
Time-boxed sprints with fixed durations.Continuous and flow-based
Specific roles and ceremoniesFlexible roles and meetings
Scope changes are discouraged during sprintsAllows scope changes at any time
Focus on predictabilityFocus on optimizing the workflow

What is CICD in DevOps?

CICD stands for Continuous Integration and Continuous Delivery. These are two different concepts that are complementary to each other.

Continuous Integration (CI): Continuous Integration is a software development practice where developers regularly merge their code changes into a shared central repository, after which automated builds and tests are run. This way we can find the bugs quicker, improve software quality, and save time. Ex. Jenkins, Circle CI, GitLab CI, Bamboo, AWS Code Build

Continuous Delivery (CD): Continuous Delivery is a software development practice where code changes are automatically built, tested, and prepared for production release, as soon as CI is done, this takes actions, and changes get deployed to test, staging, production (as configured), this way Developers will always have deployable artifacts ready all the time.

When a developer commits (integrates) their code to the source code management system like Git, the CI tool automatically pulls the code and runs the build and unit tests. At the end of the integration, artifacts are generated (war file). This is called Continuous Integration. Some CI tools: Jenkins, CircleCI, GitLab.

Once the continuous integration (CI) process is successfully completed, we get artifacts. We deploy those artifacts onto the next available environment (say Dev), where performance and functional tests are carried out. Once the tests are successfully we deploy the artifacts to the Production environment manually. This is called Continuous Delivery.

Continuous Delivery automates the process of packaging and preparing applications for deployment.

Essential Ports for DevOps Engineers

  1. HTTP (Hypertext Transfer Protocol) - Port 80
    Purpose: Used for transferring web pages.

  2. HTTPS (HTTP Secure) - Port 443
    Purpose: Secure version of HTTP.

  3. SSH (Secure Shell) - Port 22
    Purpose: Secure remote login and command execution.

  4. FTP (File Transfer Protocol) - Port 21
    Purpose: Transfers files between computers.

  5. SFTP (SSH File Transfer Protocol) - Port 22
    Purpose: Secure file transfer protocol.

  6. SMTP (Simple Mail Transfer Protocol) - Port 25
    Purpose: Sending emails across networks.

  7. DNS (Domain Name System) - Port 53
    Purpose: Resolves domain names into IP addresses.

  8. MySQL Database Server – Port 3306
    Purpose: Default port for MySQL connections.

  9. PostgreSQL Database Server – Port 5432
    Purpose: Default port for PostgreSQL database connections.

  10. Docker Daemon API – Port 2375/2376
    Purpose: Ports used by the Docker daemon for API access.

  11. Kubernetes API Server – Port 6443
    Purpose: Entry point for all API requests in Kubernetes clusters.

  12. Redis Server – Port 6379
    Purpose: The Default port used by Redis, an in-memory data structure store.

  13. MongoDB – Port 27017
    Purpose: Default port for MongoDB database connections.

  14. Apache Kafka – Port 9092
    Purpose: Default port for Apache Kafka messaging system connections.

  15. Nginx – Port 80/443
    Purpose: Web server that can also act as a reverse proxy server.

  16. Tomcat – Port 8080
    Purpose: Default port for Apache Tomcat web server instances.

  17. VNC (Virtual Network Computing) – Port 5900
    Purpose: Remote desktop sharing system.

  18. Elastic Search – Port 9200
    Purpose: The Default port used by Elastic Search REST API calls.

  19. RabbitMQ – Port 5672
    Purpose: The Default port used by RabbitMQ messaging broker connections.

  20. Grafana – Port 3000
    Purpose: The Default port used by the Grafana dashboard application for visualizing metrics

🔧 DevOps Tools and Services
1️⃣ 8080 - Jenkins: CI/CD pipeline management interface.
2️⃣ 50000 - Jenkins Agent: Master-Agent communication.
3️⃣ 3000 - Grafana: Metrics and dashboard visualization.
4️⃣ 9090 - Prometheus: Monitoring and alerting system.
5️⃣ 5601 - Kibana: Elasticsearch query and visualization.
6️⃣ 9200 / 9300 - Elasticsearch: REST API and node communication.
7️⃣ 8200 - HashiCorp Vault: Secrets management.
8️⃣ 9418 - Git: Repository cloning and pushing.

🌩️ Cloud Services (AWS, Azure, GCP)
1️⃣ 80 / 443 - HTTP / HTTPS: Web traffic and secure APIs.
2️⃣ 22 - SSH: Secure server login.
3️⃣ 3389 - RDP: Windows Remote Desktop.
4️⃣ 53 - DNS: Domain name resolution.
5️⃣ 3306 / 5432 - MySQL / PostgreSQL: Managed databases.
6️⃣ 6379 - Redis: In-memory data store.
7️⃣ 6443 - Kubernetes API server.
8️⃣ 10250 / 10255 - Kubernetes: API communication and monitoring.

🛠️ Infrastructure Management
1️⃣ 8500 - Terraform Enterprise: HTTP API.
2️⃣ 8888 - Ansible AWX: Automation web interface.
3️⃣ 9000 - SonarQube: Code quality and security.

📊 Monitoring & Logging
1️⃣ 2003 - Graphite: Metrics storage.
2️⃣ 25826 - Collectd: Metrics collection.
3️⃣ 1514 - Syslog: Log collection.

🐳 Containerization & Orchestration
1️⃣ 2375 / 2376 - Docker: Non-secure / secure Docker API.
2️⃣ 6443 - Kubernetes: API server communication.
3️⃣ 10250 - Kubernetes kubelet API.

What are the Challenges faced during the implementation of microservices

While working with microservices, we face numerous challenges!

It usually:
Define Requirements → Design Architecture → Create API Contracts → Develop Services → Implement CI/CD → Containerize (Docker) → Configure Orchestration (Kubernetes) → Set Up Observability (Monitoring, Logging, Tracing) → Security & Testing → Deploy to Production → Continuous Feedback & Iteration

What are the best practices for continuous integration (CI)?

  • Build Automation

  • Main Code Repository

  • Self-testing build

  • Every day, commits to the baseline

  • Fast Build process

  • Production-like environment testing

  • Publish Build Results

  • Deployment Automation

🚀 Top CI/CD Tools Every DevOps Engineer Should Know 🚀

🔧 Jenkins
An open-source automation server that supports building, deploying, and automating projects. Highly extensible with thousands of plugins!

🌐 GitLab CI/CD
Seamlessly integrated with GitLab, providing powerful continuous integration, delivery, and deployment features. Great for end-to-end DevOps lifecycle management.

🛠 CircleCI
Offers high-performance builds with intelligent caching, parallelism, and a user-friendly interface. Supports many languages and integrates with popular tools.

🔄 Travis CI
A cloud-based CI/CD service that is easy to set up with GitHub. Ideal for open-source projects with free plans available.

⚙️ Bamboo
Developed by Atlassian, it integrates well with JIRA and Bitbucket. Provides robust build, test, and deployment capabilities.

💻 TeamCity
A powerful CI server by JetBrains that supports many environments and offers extensive customization through plugins.

📦 Azure Pipelines
As part of Azure DevOps, it provides CI/CD pipelines for any language, platform, or cloud. Highly scalable and integrates with numerous services.

🚢 AWS CodePipeline
A fully managed continuous delivery service that helps automate your release pipelines for fast and reliable application and infrastructure updates.

✨ Drone
A modern CI/CD platform built on containers, making it highly scalable and efficient. Supports GitHub, GitLab, Bitbucket, and more.

🔍 Concourse
Designed for simplicity and scalability, it uses pipelines as the core abstraction for organizing the workflow, providing clear and visual feedback

What is the Software Development Life Cycle (SDLC)?

Software Development Life Cycle (SDLC) is a process used by the software industry to design, develop, and test high-quality software. The goal of the SDLC is to produce superior software that meets and exceeds all customer expectations and demands.

7 Stages of the System Development Life Cycle

  1. Planning Stage.

  2. Feasibility or Requirements of Analysis Stage.

  3. Design and Prototyping Stage.

  4. Software Development Stage.

  5. Software Testing Stage.

  6. Implementation and Integration.

  7. Operations and Maintenance Stage.

Here are the typical stages in the SDLC:

  1. Plan Stage

    Gather requirements, create a roadmap, and allocate tasks. Ensure alignment with project objectives and customer needs.

    • Tool: Jira, Trello, Asana

    • Purpose: Requirements management, task allocation, project tracking.

  2. Code Stage

    Develop software using standardized tools and plugins. Maintain code style, prevent security issues, and encourage collaboration.

    • Tool: Bitbucket & Git, Integrated Development Environments (IDEs) (e.g., Visual Studio Code, IntelliJ)

    • Purpose: Efficient coding, code styling, and plugin support.

  3. Build stage

    In this Build stage, once a developer has finished a task, they commit their code to a shared code repository.

    There are many ways this can be done, but typically the developer submits a pull request - a request to merge their new code with the shared codebase.

    Another developer then reviews the changes they’ve made, and once they’re done and there are no issues, they approve the pull request.

    This manual review is supposed to be quick and lightweight, but it’s effective at identifying issues early.

    Simultaneously, the pull request triggers an automated process that builds the codebase and runs a series of end-to-end, integration, and unit tests to identify any regressions.

    If the build fails or any of the tests fail, the pull request fails, and the developer is notified to resolve the issue.

    • Tool: Build automation tools (Jenkins, CircleCI & Bamboo, Gradle, and Maven)

    • Purpose: Compiling, integrating code, and creating executable software.

  4. Test Stage:

    Thoroughly test the software through various levels of testing. Verify functionality, find and fix bugs, and ensure quality.

    • Tool: Testing frameworks (e.g., JUnit, pytest), testing tools

    • (e.g., Selenium)SIT, UAT, production environment

    • Purpose: Unit testing, integration testing, and functional testing.

  5. Scan Stage:

    Perform security scans and checks to identify vulnerabilities or weaknesses. Address security concerns proactively.

    • Tool: Static Analysis tools (e.g., SonarQube), Dynamic Application Security Testing (DAST) tools (e.g., OWASP ZAP)

    • Purpose: Identifying code vulnerabilities, security flaws, and anti-patterns.

  6. Operate Stage:

    Deploy the software in a production environment. Monitor and manage its performance, responding to operational needs.

    • Tool: Containerization and orchestration tools (e.g., Docker, Kubernetes)

    • Purpose: Deploying, managing, and scaling applications in production.

  7. Monitor Stage:

    Continuously monitor the software for performance, stability, and potential issues. Gather data for further improvement.

    • Tool: Monitoring tools (e.g., Prometheus, Nagios), log management tools (e.g., ELK Stack)

Purpose: Real-time performance monitoring, identifying and addressing issues.

How can testing in the DevOps lifecycle be automated?

Developers are obliged to commit all source code changes to a shared DevOps repository. Every time a change is made in the code, Jenkins-like Continuous Integration tools will grab it from this common repository and deploy it for Continuous Testing, which is done by tools like Selenium

Auto Scaling

Auto scaling allows you to automatically scale up and scale down the number of instances depending on the CPU utilization or memory utilization. There are 2 components in Auto scaling: Auto-scaling groups and Launch Configuration

There are two types of scaling:

  • Vertical Scaling: Increasing the system resources like CPU, RAM, Storage, etc. Ex: AWS instance size t2.micro to t2.large.

  • Horizontal Scaling: This means increasing the number of instances/systems for your application. Ex: AWS Auto Scaling Groups.

⚙️ How Auto Scaling Works

1. 🧱 Auto Scaling Group (ASG)

An Auto Scaling Group is the core component that:

  • Defines a group of EC2 instances

  • Specifies a minimum, maximum, and desired number of instances

  • Launches instances using a launch template or configuration


2. 📊 Scaling Policies

There are two main types:

📈 Dynamic Scaling

Automatically adjusts capacity based on metrics like:

  • CPU utilization

  • Request count per target (for ALB)

  • Custom CloudWatch metrics

Example:
If CPU > 70% for 5 minutes → add 1 instance
If CPU < 30% for 5 minutes → remove 1 instance

📅 Scheduled Scaling

Scale resources at specific times.

Example: Increase capacity every weekday at 8 AM and reduce at 6 PM.


3. 🧠 Target Tracking Scaling

Think of it like cruise control. You define a target metric (e.g., maintain 50% average CPU), and AWS automatically adjusts the instance count to keep that target.


4. ⚠️ Health Checks and Replacement

  • Auto Scaling monitors instance health (via EC2 or ELB).

  • If an instance becomes unhealthy, it is automatically replaced.


5. 🌐 Integration with Load Balancer

  • Works seamlessly with Elastic Load Balancer (ELB)

  • Instances are automatically registered/deregistered from the load balancer.


Benefits of Auto Scaling

BenefitDescription
📈 Handles Variable LoadAdds capacity when demand spikes, and removes it when demand drops.
💸 Cost-EffectiveAvoids overprovisioning; only pay for what you need.
🔁 Self-HealingDetects and replaces failed EC2 instances automatically.
⚖️ Optimized PerformanceMaintains consistent performance under load.
🧩 Highly ConfigurableUse multiple scaling policies for different apps/environments.

AWS Services That Support Auto Scaling

ServiceHow Auto Scaling Works
🖥️ EC2 (Elastic Compute Cloud)Automatically launches or terminates EC2 instances in an Auto Scaling Group (ASG) based on CPU, RAM, etc.
🐳 ECS (Elastic Container Service)Scales the number of tasks or containers in a service
☸️ EKS (Elastic Kubernetes Service)Auto scales pods (Horizontal Pod Autoscaler) and nodes (Cluster Autoscaler)
🌐 Elastic Load Balancer (ELB)Works with EC2 Auto Scaling — no auto scaling itself, but helps balance traffic
📄 App Auto Scaling (Generic service)Let you scale custom services like:

🧠 Summary:

AWS ServiceAuto Scaling Supported?Notes
EC2✅ Yes (Auto Scaling Groups)Most common use case
ECS✅ Yes (service and task scaling)Needs CloudWatch + scaling policy
EKS✅ YesRequires HPA or cluster autoscaler
Lambda✅ YesAutomatic scaling built-in
DynamoDB✅ YesScales throughput capacity
Aurora Replicas✅ YesCan scale read replicas
SageMaker✅ YesEndpoint instance scaling
RDS (Primary Instance)❌ No auto-scalingOnly read replicas can scale

Why is Continuous Testing important for DevOps?

Any modification to the code may be tested immediately with Continuous Testing. This prevents concerns like quality issues and release delays that might occur whenever big-bang testing is delayed until the end of the cycle. In this way, Continuous Testing allows for high-quality and more frequent releases

DevSecOps

DevSecOps is a software development framework that integrates security into every phase of the software development lifecycle (SDLC). It's an extension of the DevOps practice but with the addition of security.

Look for other articles in this series that explain the various other aspects of DevOps.

  1. Becoming a DevOps Engineer RoadMap

  2. Git-Tutorial

  3. Overview of ANSIBLE

  4. Jenkins Tutorial

  5. Cloud-Computing

  6. AWS Services Commonly Used by DevOps Engineers

More from this blog

Ashwin's Blog

108 posts