Infrastructure automation has become an indispensable part of IT industry today. But what exactly is infrastructure automation and why does it matter?
Back in the good old days expanding an existing infrastructure was a time consuming task, it would take weeks or in some cases months to procure the required hardware and additional weeks to configure it as per the need. The advent of virtualization and cloud computing has accentuated the need of automation. Nowadays provisioning additional servers for scaling up the infrastructure is no longer a humongous or a time consuming task. Taking the advantage of cloud computing services, provisioning a server with desired configuration is just a matter of a few minutes. So, where does infrastructure automation comes into picture?
Today, it is no longer a matter of a few servers, there are hundreds or thousands of them(thanks to the pay as you go model of cloud computing services and affordable internet) and there are various tasks like maintenance, deployments, patches to be applied, configuration changes to be made. Performing these tasks manually on a large fleet of servers is not only time consuming, but is also vulnerable to errors. But what if all these actions can be scripted and applied on these servers? This will not only make the whole process fast as the same script can be used for a single or multiple servers but will also bring agility to the overall development process. All of this can be achieved through infrastructure automation which involves scripting steps of installing operating systems, configuring servers, determining how these servers will communicate with the software and a lot more. There are a number of tools that can help in achieving this goal like Chef, Puppet, SaltStack, Ansible, Juju to name a few. This post focuses on the introduction and basics of Chef.
Chef is an open source automation platform developed by Opscode (now known as Chef) that turns your infrastructure into code which meaning that infrastructure now becomes versionable, testable and repeatable like application code. This allows the integration of the development and operations teams as a member belonging to either of the teams can now make changes to the code paving the way for continuous integration, delivery and deployment. It has been developed in Ruby and is used by the likes of Bloomberg, Facebook, GE Capital, Prezi, RackSpace, Target, Splunk and Yahoo to name a few.
Chef is used to automate the process of building, deploying and managing the infrastructure which can be on-premises, in cloud or hybrid irrespective of its size. It supports a variety of operating systems like AIX, RHEL/CentOS, FreeBSD, Mac OS X, Solaris, Microsoft Windows and Ubuntu. Chef is typically made up of three components:
- Chef Server
Chef Nodes can be physical machines, virtual machines or server instance hosted in the cloud. These nodes have Chef Client installed on them which performs the actual configuration and communicates with Chef Server.
It is a machine from where users run all the configuration related tasks like creation of cookbooks that contain the configuration and policy details for bringing a node into a particular state, updating Chef repository, interacting with nodes etc.
Chef Server acts like a hub for configuration data. It stores the cookbooks, policies that are to be applied to the nodes and the metadata which describes each registered node. Chef Client communicates with the Chef Server in order to obtain the configuration details which are to be applied on the nodes.
There are two types of Chef Servers:
- Enterprise Chef
- Open Source Chef
Enterprise Chef Server is offered both as an on premises and hosted service.
Hosted Chef is an enterprise version of Chef Server which is hosted by OpsCode and is highly scalable and available. The user need not worry about maintenance and updates as it is handled by them. It is a free service for up to five nodes and two users without any support and has various pricing plans based on the level of support provided by Chef.
On Premise Chef
This is similar to Hosted Chef but is installed and maintained within an organization. It provides full control of the Chef Server to the organization.
Open Source Chef
Open Source Chef is free minus some of the premium features available for Enterprise Chef like Chef Analytics, Chef Client run reportings, high availability configurations and Chef Server replication. Also, while using Open Source or On Premise Chef, the provisioning of the Chef Server infrastructure has to be done by the administrator himself. This means that the user is responsible for running and maintaining the machine which is running the Chef Server, managing the user accounts, taking backups of server state and for secure storage and version management of the cookbooks.
There are many benefits of using Chef, for instance it uses Ruby for configuration management which many developers are already familiar with and can be picked up easily by someone with development experience. Also, it is Apache licensed and maintains SLAs based on subscription type, so it can be safely included in user’s software. It can be easily integrated with the other tools plus there is no dependency management as the resources are applied in the order in which they are specified. Also, it can be integrated with cloud platforms like Amazon Web Services, Microsoft Azure and Google Compute Engine.
In my next post I will be explaining the architecture of Chef and how to get started with Open Source Chef. Submit your questions and suggestions as comments below.