Anyone can set up and run a single server instance on a cloud. That's easy. Few people can set up multiple server instances on a cloud that can efficiently and automatically shift gears to match the rise and fall of user demand. That's hard. And that's where cloud configuration management programs such as Puppet, Chef, and Ansible come in.
All these programs have the same mission: Make it possible for merely mortal system administrators to manage, maintain and patch dozens, hundreds, even thousands of servers that come and go depending upon system load. These programs, which combine Agile development methods with system operations management techniques, have created a new field of administration: DevOps.
Puppet, which according to RightScale's recent survey of the state of the cloud (PDF link) has deployments in 28% of larger businesses, is the most popular management program with the enterprise, so I'll start my survey of configuration management programs with it.
This isn't just a modernized version of Microsoft's PowerShell or Unix and Linux's Bash or Korn shells, or even a full-fledged language like PHP. No, Puppet uses a declarative, model-based approach to IT automation. Essentially you're creating reusable configuration modules. You can use these to set up a specific server configuration.
In these modules you set up the following server parameters:
- Define the desired state of the infrastructure’s configuration using Puppet’s declarative configuration language.
- Simulate configuration changes before enforcing them.
- Enforce the deployed desired state automatically, correcting any configuration drift.
- Report on the differences between actual and desired states and any changes made, enforcing the desired state.
Having trouble mastering Puppet or Ruby? Don't sweat it. Puppet Labs has more than a thousand downloadable, ready-to-run configuration modules in its Puppet Forge online market.
So, for example, if you want to install VMware Tools, HP Proliant Support Pack hardware monitoring programs for CentOS Linux, a firewall, or many other server configurations just download the appropriate module, adjust to your needs, and deploy to your cloud servers. No fuss, no muss.
Say you want to use Puppet to set up a WordPress content management system (CMS) with Puppet on your cloud servers. Instead of installing WordPress, Apache, MySQL, and PHP separately, you simply run the module. Within it aren't instructions on how to set things up, but instead a description of what needs to be running for WordPress to work. Puppet takes care of all the heavy lifting behind the scenes.
What's that you say? You can do that yourself? Of course, you can. But can you do that in the aforementioned hundreds and thousands of server instances? Aye, there's the rub, and that's where Puppet comes in.
To quote from the Puppet FAQ, "Puppet takes a different approach, which is to model everything — the current state of the node, the desired configuration state, the actions taken during configuration enforcement — as data: each node receives a catalog of resources and relationships, compares it to the current system state, and makes changes as needed to bring the system into compliance."
Want to know more about how to make Puppet work for you? Check out Learning Puppet. You can also use the code from GitHub for your programmer to tinker with for themselves. And, if you want to start trying it out for your business, you can download the latest Puppet Enterprise 3.0 and try it on 10 nodes for free. If you buy into the Puppet way of managing servers on clouds it starts at $99 per node per year and drops as you buy more nodes.