# Day-1: Understanding DevOps

1. **What is DevOps?**
    
    DevOps is a combination of cultural philosophies, practices, and tools that increases an organization's ability to deliver applications and services at high velocity.
    

Before understanding DevOps, we need to learn about its main idealogy.

## DevOps CAMS

### C-Culture:

Taking to each other in the team about processes and steps that are being followed. <mark>It is always people over process over tools.</mark>

### A-Automation

Automation doesn't just include tools like chef or puppet.

Think about questions like

* Thousands of servers are tough to manage, but do we need thousand servers?
    
* How can we automate? or should we automate?
    

### M-Measurement

Measure to improve

Its not just about infra management. Business measures, client activity and other pointers also need to be considered.

Recovery time, cycle time is obvious but it's important to measure and incentivise them for better results.

### S-Sharing

Share the goal, share responsibility, share ownership and no escape goat.

Feedback loop is important.(this tells us why it happens or happened and how it can be avoided in future)

---

### Now, we will discuss some widely used jargon in DevOps.

### Provisioning

* It is the process of creating and setting up IT infrastructure, and includes the steps required to manage user and system access to various resources.
    

### Deployment

* It is the process of making a software application, website or system available for its intended users. It involves moving a developed application from a development or testing environment to a production environment.
    

### Orchestration

* It refers to the coordination and management of multiple interconnected services, components or containers to achieve a specific workflow or task. (simply defined as coordinated operations on multiple systems)
    

### Configuration Management

* It is a systematic process for managing the settings, configurations and changes to an organization's hardware, software, infrastructure, and documentation.
    
* The primary goal is to ensure that an organization's systems and assets are properly configured, and controlled throughout their lifecycle.
    

### Imperative

* In this approach, we specify the exact steps or actions that should be taken to achieve a desired state. It focuses on providing a sequence of commands or instructions that need to be executed in a specific order.
    

### Declarative

* In this approach, we specify the desired end state or configuration without specifying the exact sequence of actions required to achieve it.(simply explained as desired state is defined and tools will achieve that).
    

### Idempotent

* It is used to describe a property of operations or actions that can be repeated multiple times without changing the result after initial execution.(repeat execution and same result)
    

### Blue Green Deployment

* This deployment strategy is mainly used in software development and DevOps to minimize downtime and reduce risk when releasing new versions of an application or making changes to production environments.
    
* Here, two separate environments often referred to as "blue" and "green" are maintained, and traffic is routed between them to facilitate seamless updates and rollbacks.
    

### Continuous Integration

* It is the process/practice of automating the integration of code changes from multiple contributors into a single software project.
    
* The key idea behind CI is to catch and address integration issues early.(Build and unit test at every checkin)
    

### Continuous Delivery

* It is a software development practice that extends the principles of Continuous Integration (CI), where code changes are automatically prepared for a release to production environments in a consisten, efficient and reliable manner.
    

### Continuous Deployment

* It is an advanced software development and DevOps practice that extends the principles of Continuous Integration and Continuous Delivery to automatically and continuously deploy every code change that passes automated testing and validation directly into production environments without manual intervention.
    

### Automation

* It is a process or practice of using specialized software tools or methodologies to automate repetitive and manual tasks in the software development lifecycle.
    
* Automation is not only about tools but also about processes and culture. It promotes collaboration between development and operations teams, shortening the response times, increasing reliability and allowing for faster response for changes and issues.
    

### Scaling

* It refers to the process of increasing or decreasing the capacity or resources of the system/infrastructure based on the demand. There are mainly 2 types of scaling
    

1. **Vertical Scaling (Scaling Up):**
    
    It involves increasing the capacity of existing resources, such as upgrading RAM's, Storage etc. This approach is often used to handle increased demand by making a single server more powerful.
    
    But this has a limitation that, we can keep on increasing the capacity of a single server as there are hardware limitations, and also it can be more expensive.
    
2. **Horizontal Scaling (Scaling Out)**:
    
    It involves adding more instances of a resource, typically by adding more servers to the system.
    
    This is commonly used for distributed workloads and can handle increased demand by adding more resources in parallel.
    
    Horizontal scaling is the most effective and cost-efficient way to handle rapid growth, but may require additional software architectural considerations to ensure proper load balancing and fault tolerance.
    

### Infrastructure

* It is nothing but physical technology resources, environments, and configurations such as servers, networking devices, storage etc.
