What is Chef?
"Chef is a configuration management tool written in
Erlang. It uses a pure-Ruby, domain-specific language (DSL) for writing system configuration
recipes." - wiki
The typical Chef environment is made up of 3 parts: the Chef server, workstation, and nodes.
The Chef server used to store configuration data and administer access rights. This will serve as a hub for our other machines. We will also install a workstation that will allow us to interact with our server and build our configuration policies. This is where we will do the work to manage our infrastructure environment.
Chef's three main components:
- Server acts as a hub that is available to every node. Chef server is the brain of the operation. It stores information about our infrastructure. All chef client nodes will be registered with the server. The server holds all the
policies. Clients communicate with the server to get the right configuration elements from the server and apply it to the nodes.
- Workstation is the development machine from which configuration elements like cookbooks, recipes and policies are defined. Workstation is where we will spend most of our time working with Chef. It's the same place we do our development or sysadmin work. From our workstation, we'll author Chef cookbooks, upload them to our Chef server, and more. Configuration elements are synchronized with the
chef-repoand uploaded to the server with
- Nodes contain
chef-clientwhich performs all the infrastructure automation. A node is a server in our infrastructure. Nodes are the computers that we manage using Chef. A node can be a physical computer, virtual machine, instance in our public or private cloud environment, or even a switch or router in our network.
We'll setup those three components in the subsequent tutorials:
- Set up Chef server
Picture source: http://docs.getchef.com/chef_server.html
- Set up Workstation
- Set up Nodes
Picture source: http://docs.getchef.com/nodes.html
Ph.D. / Golden Gate Ave, San Francisco / Seoul National Univ / Carnegie Mellon / UC Berkeley / DevOps / Deep Learning / Visualization