Four years ago, the idea of running large infrastructures in elastic virtualized compute clusters seemed outlandish. Now, it’s commonplace. A convergence of technology, cost, and need has led to a revolutionary way of accessing compute resources. Service providers such as Rackspace and Amazon have democratized access to enterprise-grade infrastructure. At small scale, this has enabled individuals to gain on-demand access to compute resources that would otherwise have required massive upfront investment. For large deployments, cloud infrastructures promises speed and operational efficiency by providing seemingly limitless and instantaneous access to compute resources.
Advances in Cloud-Based Infrastructure
Core virtualization technologies have been wrapped in simple APIs. Compute resources can be dynamically provisioned. These resources can be located within the corporate firewall or offered as services from external providers. Most importantly these computing resource are available, dynamically and are effectively limitless.
The utilization of cloud-based infrastructures has served to shorten the time between identification of business need and resource provisioning. With the bottlenecks of basic provisioning and capacity removed, the major challenge for resource allocation becomes configuring the compute resources to provide high level business value. This is the traditional system integration challenge[, just] at cloud speed. Without automation, provisioning services in the cloud becomes the new bottleneck. Manual systems integration is not an option—people aren’t fast enough to keep up.
If you can launch a thousand virtual machines in the cloud, but it takes you two weeks to configure those thousand machines to service a business need, you aren’t gaining any advantage. Automation is a key component to realizing the promise of cloud infrastructure.
Granular automation: Managing complexity through composition
Cloud infrastructure delivers on-demand access to compute nodes. Typically compute nodes are deployed as machine images. Unless your infrastructure is completely homogeneous, you will end up managing multiple images. As your infrastructures grow in complexity, the number of images to manage grows exponentially. Granular automation of the configuration components within an image allow you to easily manage like-configuration while taking the points of differentiation into account.
Consider a simple web application consisting of a web server, an application server, and a database server. Each of these roles needs to have a baseline of common configuration, along with specification about their roles. The web server needs to know about the application server, and the application server needs to know about the database server. Commonly, these nodes need to have a baseline set of security, users’ accounts configured, and administrative tools deployed. If we choose to use images to deliver these nodes, we will be duplicating all of the common configurations and hard-coding all of the shared information. Even in this very simple example we would have three images to maintain. In more complex environments, the overhead of image management becomes untenable. The utility of image management rarely survives within IT organizations. Administrators generally automate the configuration above a base operating system, factor out the common elements and implement automation that specifies required differentiations.
Managing change and building a dynamic Configuration Management Database (CMDB)
Naive automation implementations procedurally roll out changes across a population of machines. Recipes are rolled out to a set of systems the same way one would bake a cake. You have one shot at an ideal configuration. There are no tools to determine the state of a system. There are no high level specifications that must be met. Modern tools take a different approach. They should allow you to:
* specify the state of individual resources on a node
* specify the relationship between individual or collections of resources
* simulate the process of bringing a node into sync with its specification
* inspect the state of a given node
* dynamically build a queryable inventory of all of the resources and nodes that you are managing
By providing high level interfaces and APIs, modern automation systems enable accurate and rapid deployment.
* Change can be managed over the life time of a node.
* Simple changes can be deployed dynamically.
* Infrastructure can be modeled in code and built using simple tools.
* The state of an infrastructure can be discovered and managed.
At cloud scale, modern automation tools are key enablers of the velocity and consistency promised by the cloud.
Written by guest author Teyo Tyree, VP of Business Development and Co-Founder of Puppet Labs.