In this course, we introduce you to the DevOps Playbook Part 2.
The DevOps Playbook Part 2 course continues with Books 8 through to 12, covering the topics, Infrastructure as Code, Configuration Management, Continuous Delivery, Continuous Deployment, and Continuous Monitoring, where each book documents a required DevOps competency, one in which you’ll need to adopt and establish skills in to be effective in DevOps.
- Book 8 - Infrastructure as Code
- Book 9 - Configuration Management
- Book 10 - Continuous Delivery
- Book 11 - Continuous Deployment
- Book 12 - Continuous Monitoring
The DevOps Playbook Part 2 course includes 2 demonstrations where we put into practice some of the DevOps theory presented.
- Atlassian BitBucket Pipelines and Terraform
- Atlassian BitBucket Pipelines Promoting Staging to Production
Note: the source code as used within these demonstrations is available at:
- [Instructor] Welcome back. In this lecture, we'll introduce you to configuration management, and how it can be used to manage infrastructure configurations.
Configuration management refers to the process of systematically handling changes to a system in a way that it maintains integrity over time. A key component of DevOps is automation, and automation plays an important part when it comes to server configuration management. Configuration management is the process used to make each server reach a desire end state. In organizations where there are multiple projects deployed across multiple environments, such as test, staging, UAT, end, or production, and in which each environment has numerous groups of servers such as web servers, application servers, and database servers and where any one group of servers could consist of many many servers. Then configuration management should be used to ensure and guarantee that each individual server has been configured consistently, and has achieved the desired end state.
If you're working with infrastructure that is both significant in size and complexity, and is replicated across multiple environments, then configuration management is a must. Select a configuration management tool that compliments existing tools and languages for what you have competencies in. For example, if you're building in Python, Ansible is probably a good fit. Get buy in from the business for the up front cost of setting up and configuring by emphasizing the long term benefits to be gained.
Benefits associated with using configuration management, to automate the configuration of servers are: speed to create new servers, configuration management can be used to automate the required configuration and bootstrapping of a server as it comes online. Prevention of snowflake servers, manual subservement applied to any individual server, results in that server becoming a snowflake, unique and unknown, which we do not want. Version control for configuration, serializing any configuration requirements into configuration management templates, allows you to store them in a version control system. Recovery speed, if an individual or group of servers is impacted by some form of malfunction, then they can be quickly restored by replaying their respective configuration templates. Consistency of replicated environments, multiple environments can be created with guaranteed server configuration consistency.
Challenges associated with using configuration management to automate the configuration of severs are: infrastructure complexity, some infrastructures are inherently complicated in terms of their configuration, and how this becomes translated into configuration management scripts. Learning curve, associated with learning a configuration management tool. Cost, some enterprise configuration management tools are expensive. Agent install, some configuration management tools may require an agent to be installed on the server, and may require some form of privileged access on the host. Programming and or scripting skills may be required to create the configuration templates.
Some example configuration management tools that can be used to configure severs are: Chef, a configuration management tool written in Ruby, and Erlang that uses a pure Ruby domain specific language for writing system configuration recipes. Puppet, designed to manage the configuration of Unix like and Microsoft Windows systems declaratively. The user describes system resources and their state, either using Puppet's declarative language or a Ruby DSL. Ansible, automates software provisioning, configuration management, and application deployment, Ansible connects using SSH or remote PowerShell. Salt is a Python based open source configuration management application.
In this example shown here, a Puppet master sever forms SSL connects to each of the hosts for which it will apply host specific configuration, each host has the Puppet agent installed and communications performed between the Puppet master sever and Puppet agent.
In this next example Terraform is used to provision an environment within the Google Cloud Platform after the infrastructure has been launched it is immediately configured through the use of Ansible playbooks. The Ansible playbooks are stored within GitHub, and any updates to them trigger a build within Jekins, Jenkins, through the use of a Jenkins, Ansible plug-in, will apply the Ansible playbooks against the infrastructure, such that it reaches a desired end state.
Pick the right configuration management tool from the get go, one that works well with the operating system characteristics of your infrastructure, and with your architected software stack. You'll need to consider whether you'll operate your configuration management tool in agent or agentless mode, and what the connecting protocol requirements are, ensuring then that the selected tool supports those requirements. Ensure that you have the right internal skill sets to work productively with the chosen tool. If starting from scratch, start with bite sized components and build up competencies over time.
Okay that completes this lecture on configuration management, go ahead and close this lecture and we'll see you shortly in the next one.
Jeremy is a Content Lead Architect and DevOps SME here at Cloud Academy where he specializes in developing DevOps technical training documentation.
He has a strong background in software engineering, and has been coding with various languages, frameworks, and systems for the past 25+ years. In recent times, Jeremy has been focused on DevOps, Cloud (AWS, Azure, GCP), Security, Kubernetes, and Machine Learning.
Jeremy holds professional certifications for AWS, Azure, GCP, Terraform, Kubernetes (CKA, CKAD, CKS).