Effective Infrastructure Management ensures better organization performance, agility, cost-effective, good customer experience, and flexibility in the cloud or on-premises infrastructure. This post clearly explains on how a DevOps professional can effectively do Infrastructure Management. Here are the 3 major steps involved in mastering Infrastructure Management.
- Capacity Planning
Capacity Planning for an infrastructure to derive numbers - DevOps
Proper Capacity Planning allows an organization to be ready for the future workload and easily scale the production infrastructure with the growing customer traffic. So, a DevOps professional needs to have a good understanding of the existing infrastructure i.e. servers, storage, containers, services, networks, and other resources. If the customer traffic increases, we should be in a position to effectively scale up the infrastructure to meet the on-demand production workload without underutilizing the resources.
Capacity Planning is the first and foremost step in Infrastructure Management that is followed by Provisioning and Deployment. Continuous Capacity Planning is required to upscale and downscale infrastructure resources based on the on-demand production workload.
For better understanding, let's assume that our software services are serving a production workload of 10000 RPM (Request Per Minute) generated by 1000 customers and backed by 100 servers in infrastructure. Suppose, if the customer base is increased to 2000 and the production workload increased to 20000 RPM. Are we simply going to add 100 servers bringing the count to 200? No way. Increasing the servers or resources is not a perfect way to do Capacity Planning. First, we need to collect the data such as metric data, log data, app performance data, database performance data, etc., from the production infrastructure resources. Second, we need to analyze the collected data to derive the capacity numbers. This has to be purely based on reasoning from the data. If we don't have proper reasoning from the data, we cannot derive exact capacity numbers.
A DevOps professional must know how to use tools/services such as ELK, Splunk, NewRelic, Grafana, etc., to derive capacity numbers while performing Capacity Planning.
Automated Provisioning of infrastructure resources - DevOps
Once the Capacity Planning is successful, then we can proceed with the next step i.e. Provisioning. Provisioning involves the creation, allocation, and deletion of infrastructure resources based on the derived capacity numbers from Capacity Planning. Here, the infrastructure resources are servers, containers, storage, networks, IPs, load balancers, etc., that can be created and managed on cloud service providers such as AWS, Azure, GCP or on-premises. Provisioning/Deprovisioning of infrastructure resources must be done only in an automated way. This is called Automated Provisioning.
A DevOps professional needs to know how to manage infrastructure resources on leading cloud service providers like AWS, Azure, GCP or on-premises. Suppose, if the organization is managing resources only on AWS, then we can use AWS CloudFormation to automate the creation/allocation/deletion of infrastructure resources. If the organization is managing resources across multiple cloud service providers like AWS, Azure, GCP, then we can use tools like Terraform to automate the creation/allocation/deletion of infrastructure resources. This is how we can effectively do the Provisioning of infrastructure resources.
Automated Deployment of services within infrastructure - DevOps
Once the Automated Provisioning of infrastructure resources is successful, then we can proceed with the next step i.e. Deployment. Deployment involves installing, configuring, releasing, and managing software services on the servers or containers which serve the production workload. Deployment is a process that occurs within the servers or containers that are created or allocated during the Automated Provisioning of infrastructure resources.
Usually, in any infrastructure, the servers are grouped by the service that runs in it. Suppose, if we want app service to be deployed in a specific fleet of servers, then we need to execute Deployment procedures of the app. In the same way, if we want database service to be deployed in a specific fleet of servers, then we need to execute Deployment procedures of the database.
A DevOps professional can use tools like Chef, Ansible, Salt to automate the Deployment of any kind of software service.
Infrastructure Management is a cyclic process in DevOps work life A DevOps professional must understand that Capacity Planning, Provisioning, and Deployment is a cyclic process in Infrastructure Management. This cyclic process purely depends on the production workload generated by the customers. If a DevOps professional can master these 3 steps in Infrastructure Management, then it becomes very easy for an organization to scale up and scale down infrastructure based on the on-demand production workload generated by the customers.
Hope it helps. Thank you.