Chef is a Configuration management tool that manages the infrastructure by writing code rather than using a manual process so that it can be automated, tested and deployed very easily. Chef has Client-server architecture and it supports multiple platforms like Windows, Ubuntu, Centos, and Solaris etc.
- Chef is an automation tool that provides a way to define infrastructure as code.
- Infrastructure as code (IAC) simply means that managing infrastructure by writing code (Automating infrastructure) rather than using manual processes.
- It can also be termed as programmable infrastructure. Chef uses a pure-Ruby, domain-specific language (DSL) for writing system configurations.
- Below are the types of automation done by Chef, irrespective of the size of infrastructure:
- Infrastructure configuration
- Application deployment
- Configurations are managed across your network
Like Puppet which has a Master-Slave architecture even Chef has a Client-Server architecture. But Chef has an extra component called Workstation. I will talk about workstation in my next blog. Refer the diagram below:
- In Chef, Nodes are dynamically updated with the configurations in the Server.
- This is called Pull Configuration which means that we don’t need to execute even a single command on the Chef server to push the configuration on the nodes, nodes will automatically update themselves with the configurations present in the Server.
- My next blog on Chef Tutorial will explain the Chef architecture along with all the Chef components in detail.
Now, let us look at reasons behind the popularity of Chef.
What Is Chef – Chef Key Metrics
- Chef supports multiple platforms like AIX, RHEL/CentOS, FreeBSD, OS X, Solaris, Microsoft Windows and Ubuntu. Additional client platforms include Arch Linux, Debian and Fedora.
- Chef can be integrated with cloud-based platforms such as Internap, Amazon EC2, Google Cloud Platform, OpenStack, SoftLayer, Microsoft Azure and Rackspace to automatically provision and configure new machines.
- Chef has an active, smart and fast growing community support.
- Because of Chef’s maturity and flexibility, it is being used by giants like Mozilla, Expedia, Facebook, HP Public Cloud, Prezi, Xero, Ancestry.com, Rackspace, Get Satisfaction, IGN, Marshall University, Socrata, University of Minnesota, Wharton School of the University of Pennsylvania, Bonobos, Splunk, Citi, DueDil, Disney, and Cheezburger.
“There are three dimensions of scale we generally look at for infrastructure — the number of servers, the volume of different configurations across those systems, and the number of people required to maintain those configurations.
- Chef provided an automation solution flexible enough to bend to our scale dynamics without requiring us to change our workflow.”
- Without a doubt Chef is one of the most famous Configuration Management tools and is closely competing with Puppet. But, before diving deep into “What is Chef”, it’s only fair that I first explain what is Configuration Management and why it is important.
Configuration Management
Don’t worry, there won’t be any heavy definition of Configuration Management in this blog 🙂
Let us understand Configuration Management this way – suppose you have to deploy a software on top of hundreds of systems.
- This software can be an operating system or a code or it can be an update of an existing software.
- You can do this task manually, but what happens if you have to finish this task overnight because tomorrow might be a Big Billion Day sale in the company or some Mega Sale etc. in which heavy traffic is expected.
- Even if you were able to do this manually there is a high possibility of multiple errors on your big day.
- What if the software you updated on hundreds of systems is not working, then how will you revert back to the previous stable version, will you be able to do this task manually? AF-course not!
- To solve this problem, Configuration Management was introduced.
- By using Configuration Management tools like Chef, Puppet, etc. you can automate this task.
- All you have to do is to specify the configurations in one centralized server and accordingly all the nodes will be configured.
- It allows access to an accurate historical record of system state for project management and audit purposes.
- So basically, we need to specify the configurations once on the central server and replicate that on thousands of nodes.
- Configuration Management helps in performing the below tasks in a very structured and easy way:
- Figuring out which components to change when requirements change.
- Redoing an implementation because the requirements have changed since the last implementation.
- Reverting to a previous version of the component if you have replaced with a new but flawed version.
- Replacing the wrong component because you couldn’t accurately determine which component was supposed to be replaced.
There are broadly two ways to manage your configurations namely Push and Pull configurations.
- Pull Configuration: In this type of Configuration Management, the nodes poll a centralized server periodically for updates. These nodes are dynamically configured so basically they are pulling configurations from the centralized server. Pull configuration is used by tools like Chef, Puppet etc.
- Push Configuration: In this type of Configuration Management, the centralized Server pushes the configurations to the nodes. Unlike Pull Configuration, there are certain commands that have to be executed in the centralized server in order to configure the nodes. Push Configuration is used by tools like Ansible.
What Is Chef – Configuration Management With Chef
- We have understood what is Chef, now I will explain you how Chef achieves Configuration Management with a use-case.
- Gannett is a publicly traded American media holding company. It is the largest U.S. newspaper publisher as measured by total daily circulation.
- Gannett’s traditional deployment workflow was characterized by multiple handoffs and manual tests. Let us see what were the problems they faced with this process:
- Maintaining accurate, repeatable builds was difficult.
- There were many build failures and tests were often running in the wrong environments.
- Deployment and provisioning times could range from a few days to several weeks.
- Operations team didn’t have access to the cloud or development environments.
- Every group used its own tool-set, and there was no accountability to finance or security. No one knew how much an application actually cost. Security had no way to audit the software stacks.
Gannett was ready for the change. Developers wanted to deploy their applications quickly. Operations wanted a stable infrastructure where they could build and deploy in a repeatable way. Finance wanted to know the true cost of an application. Security wanted to view and audit all stacks and to be able to track changes.
- Gannett saw that cloud as a service offered many advantages.
- Developers had access to standardized resources. It was easier to handle peaky traffic because of cloud’s compute-on-demand model, and handoffs were minimized.
- Chef allows you to dynamically provision and de-provision your infrastructure on demand to keep up with peaks in usage and traffic.
- It enables new services and features to be deployed and updated more frequently, with little risk of downtime. With Chef, you can take advantage of all the flexibility and cost savings that cloud offers.
Let us see what were the functions performed by Chef at Gannett:
- Gannett started building VPC (Virtual Private Cloud) for development environment that would mimic the production. None of the tools that they were already using were appropriate. But they found that Chef worked well with the cloud and both Linux and Windows environment. They used Chef to build a development environment that perfectly matched production environment.
- For an application to move into the VPC, it had to be provisioned and deployed with Chef.
- Security would be involved early on and would manage the mandatory controls for access to Chef and for maintaining system security standards.
Now is the time to understand what were the results of this process:
- Gannett’s deployment became quicker and more reliable. Application provisioning and deployment, which once took weeks, after using Chef it took minutes.
- All new applications were deployed on the cloud with Chef. These applications were deployed to all environments in the same way that they were deployed to production. Also, testing occurred in each environment, so that the deployments were reliable.
- All infrastructure was treated as code, which greatly increases visibility into any changes that occurred. Development, Operations, Security and Finance all were benefited from this.
Chef Terminology
Al dente
The literal translation from Italian is “at the tooth”, and refers to the perfect texture for cooking pasta, where the pasta still has a little firmness and ‘bite’ to it.
Amuse bouche
This refers to small, bite-size concoctions of food, which the Chef can present to their guests before the regular courses of the meal begin. The translation means “to amuse the mouth”.
Au gratin
Where a dish is sprinkled with grated cheese or breadcrumbs, and then browned.
Au jus
This is French for “with juice”, and means that the food item will be served with its natural juices (often referring to beef).
Basting
A cooking technique that involves brushing or coating a meat in its juices or an accompanying sauce. This helps keep the meat moist, and is especially useful when the meat is over heat for longer time periods, such as grilling a rack of ribs, or roasting a turkey in the oven.
Blind Baking
When pastry is baked before adding a filling.
Blanching
Where food is submerged in boiling water very briefly, then removed and plunged into iced water to halt the cooking process.
Braising
A cooking method where the food is seared at a high temperature for a short period of time, then cooked fully in a pot with liquid/other flavorings/ingredients.
Brining
A food is soaked in a salted water brine, usually to preserve it, or to enhance the flavor before cooking.
Broiling
A US term that refers to cooking with a heat source that is above the food, as opposed to grilling, which is when the heat source is below the food.
Butterfly
To split a food in half but not cutting the entire way through, instead folding out in a butterfly shape. This exposes more surface area to the heat source, and helps the food cook evenly and quickly.
Coddling
This is when food is heated in water to just below the boiling point.
Crimp
Where the edge of one or more pieces of dough is pinched together to seal together and form a decorative edge.
Deglaze
After a food has been cooked in a pan, a stock or other liquid can be added to the empty vessel over a high heat, and the bottom of the pan is gently scraped to release any flavor and color that is stuck to the bottom.
Double steaming
This is a Chinese cooking technique where a food is immersed in water, put into a jar, which is then steamed for several hours.
Fermentation
In addition to being a step in the brewing process of beer, this term can also be used in culinary situations to mean a preservation technique where sour foods can produce lactic acid in order to stay edible.
Fricassee
This is a way to cook meat which involves chopping it up, sautéeing, braising, and then serving it in its (traditionally white) sauce.
Ganache
A combination of cream or milk, mixed with melted chocolate, creating a soft consistency which does not re-set when cooled.
Organizations
- Completely independent tenants of Enterprise Chef
- Provide multi-tenancy in Enterprise Chef
- Share nothing with other organizations
- May represent different
- Companies
- Business Units
- Departments
- Each Organization may have multiple Users
- Manage an Organization’s Users via the Enterprise Server interface
Environments
Environments reflect your patterns and workflow, and can be used to model the life-stages of your application
- Development
- Test
- Staging
- Production
- etc.
Environments may include data attributes necessary for configuring your infrastructure, e.g.
- The URL of your payment service’s API
- The location of your package repository
- The version of the Chef configuration files that should be used
Roles
Roles may include an ordered list of Chef configuration files that should be applied
- This list is called a Run List
- Order is always important in the Run List
Roles may include data attributes necessary for configuring your infrastructure, for example:
- The port that the application server listens on
- A list of applications that should be deployed
Node
Nodes represent the servers in your infrastructure
- Could be physical servers or virtual servers
- May represent hardware that you own or compute instances in a public or private cloud
- Could also be network hardware – switches, routers, etc
Each Node will
- Belong to one Organization
- Belong to one Environment
- Have zero or more Roles
The chef-client application runs on each node, which
- Gathers the current system configuration of the node
- Downloads the desired system configuration policies from the Chef server for that node
- Configures the node such that it adheres to those policies
Resources
A Resource represents a piece of the system and its desired state
- A package that should be installed
- A service that should be running
- A file that should be generated
- A cron job that should be configured
- A user that should be managed
- and more
Resources are the fundamental building blocks of Chef configuration.Resources are gathered into Recipes. Recipes ensure the system is in the desired state
Recipes
- Configuration files that describe resources and their desired state
- Recipes can:
- Install and configure software components
- Manage files
- Deploy applications
- Execute other recipes
- and more
Cookbooks
- Recipes are stored in Cookbooks
- Cookbooks contain recipes, templates, files, custom resources, etc
- Code re-use and modularity
- A cookbook is like a “package” for Chef recipes.
- It contains all the recipes, files, templates, libraries, etc. required to configure a portion of your infrastructure
- Typically they map 1:1 to a piece of software or functionality.
Run List
- The Run List is an ordered collection of policies that the Node should follow
- Chef-client obtains the Run List from the Chef Server
- Chef-client ensures the Node complies with the policy in the Run List
Knife
Knife provides an API interface between a local Chef repository and the Chef Server, and lets you manage:
- Nodes
- Cookbooks and recipes
- Roles
- Stores of JSON data (data bags), including encrypted data
- Environments
- Cloud resources, including provisioning
- The installation of Chef on management workstations
- Searching of indexed data on the Chef Server
Node Objects
- When you are writing Recipes, the Node object is always available to you.
- Every node must have a unique name within an organization
- Chef defaults to the Fully Qualified Domain Name of the server, i.e. in the format server.domain.com
- Nodes are made up of Attributes •
- Many are discovered automatically (platform, ip address, number of CPUs)
- Many other objects in Chef can also add Node attributes (Cookbooks, Roles and Environments, Recipes, Attribute Files)
- Nodes are stored and indexed on the Chef Server.
What are Attributes?
- Attributes represent information about your node
- The information can be autodetected from the node (e.g.# of CPUs, amount of RAM) & populated by Ohai
- You can also set attributes on your node using cookbook recipes & attribute files, roles, environments, etc
- Attributes keep the program code separate from data.
- All attributes are set on the “node object”, and are indexed for search on the server
Attribute Sources Attributes can be set at various levels (in increasing order of precedence)
- Automagically on the node itself (by Ohai)
- In roles
- In environments
- In cookbook recipes
- In cookbook attribute files
Attributes can be set in the cookbook’s attributes file ./cookbooks/<cookbook>/attributes/default.rb. The Format is In Recipes:
Data Bags
A data bag is a container for items that represent information about your infrastructure that is not tied to a single node
Examples
- Users
- Groups
- Application Release Information
Conclusion
If you ever desire to be a head Chef of your own restaurant, designing and pricing menu’s is an important skill to have if you are to succeed in the restaurant business.
If you would like continue this activity of being a personal chef, design a workflow plan for a dinner party and perhapes cook the menu you have designed for your family and friends!
Furthermore, you could upload your menu design and start a blog to get feedback of your ideas. Perhapes you can organise your food technology class to start a blog page to share recipe ideas, strategies for cooking and workflow plans.