Kit Wai Chan - Fotolia


Achieve virtualization abstraction with Infrastructure as Code

Infrastructure as Code offers virtualization admins a framework of automation tools, configuration management and DevOps methods that can replace manual processes.

Infrastructure as Code offers a way for admins to abstract configuration and provision processes such that workflows can be simplified, optimized and automated. As the admin role becomes increasingly complex due to virtualization's centrality in the data center and connections to stakeholders outside of it, virtualization abstraction -- accomplished through Infrastructure-as-Code tools -- can enable an efficient environment.

Virtualization abstraction offers simplification

In Infrastructure as Code (IAC) structures, an overarching framework of automation tools, configuration management and DevOps methods replace manual processes and a hodgepodge of isolated shell scripts. The term also refers to the abstraction of environments and applications via software code.

Admins should strive to achieve abstraction, which is the opposite of hardcoding. Hardcoding can create inefficiency and extra work as things change. For example, if you hardcode your configuration and list IP addresses in a file, you'll need to change the configuration if the list changes.

It's better to use virtualization abstraction to refer to VMs and services in a more general way. If you can describe your systems with chunks of code and abstract configuration files, then you can change pieces of the infrastructure, like IP addresses, without breaking the whole thing. When you need to change complex layers in the infrastructure, like moving storage from one public cloud to another, it will be less disruptive.

Safeguard software with configuration management

Several tools are necessary to achieve IAC and virtualization abstraction targets. These include configuration management (CM) and orchestration.

Here, CM means to keep software in a safe place where it can't be lost. By doing this, you can keep track of different versions and deploy based on a schedule or in reaction to external events, such as program bugs and system outages.

CM objects are stored in repositories like GitHub, Subversion and Amazon S3. These code repositories provide the ability to track versions, so if a new version doesn't work, you can roll back to the previous version to get your systems working again.

Orchestration and DevOps enable systems management

IAC for virtualization abstraction requires orchestration and DevOps. Orchestration covers the functions that come with systems management. This includes the rapid release cycles that come with agile and continuous release, as well as the tight integration and production system of DevOps.

By doing this, you can keep track of different versions and deploy based on a schedule or in reaction to external events, such as program bugs and system outages.

DevOps and orchestration require the rebuilding and maintenance of systems already in place. To build a system, you can, for example, use a tool like Jenkins to execute functional and unit tests, pull all the software and configuration from the code repository and package and push it to the target VMs, storage and networks. 

This event-driven orchestration enables the system to auto scale through monitoring, which means it provisions machines, storage and networks as needed for capacity surges and declines and to fix broken devices.

Review four common CM tools

Salt, Puppet, Chef and Ansible are the four most commonly used CM tools. Though not strictly a CM tool, Jenkins -- a tool that enables the rapid identification and resolution of code defects -- is often prioritized in continuous delivery systems where the IT shop writes application code.

Salt is an event-driven execution engine more than it is a CM tool. While it also pushes out code, it excels in its ability to run fast by running in parallel. The Salt nodes, called minions, can report on machine states as they push code to a machine. This enables it to mesh neatly with Jenkins and work like a monitoring system to simultaneously build and repair systems.

Puppet code is stored as Manifests and Modules in files that end in .pp. The Puppet Manifest includes Resources, which check the state of a machine, such as the presence of a file. It can then automatically repair VMs that have left their target states. Manifests can be saved as Modules that can then be called by other Modules.

Chef determines whether nodes are out of target state and brings them back. It uses code assembled as Recipes and Cookbooks to push out code and configuration. The system is divided into Chef Nodes, a Chef Server and Chef Workstation.

Puppet and Chef both use the Ruby programming language syntax, so you only need to know some of Ruby to use them.

Ansible lets you abstract systems by, for example, listing servers by function and type -- such as web server and production -- and use configuration files called Playbooks to install software.

To reach IAC and virtualization abstraction, your organization will need to evaluate and consider the incorporation of these tools. With them, you will be able to reduce errors and wasted time caused by an overabundance of scripts and manual processes that fall outside the control of a single overarching apparatus.

Dig Deeper on Virtual machine provisioning and configuration