Deploying Puppet in Client-Server, Standalone, and Massively Scaled Environments
A common misconception about Puppet is that it can only be used in client/server mode. Although this is the most common use case, it is actually just one of three common deployment practices.
Client/Server model:
Client/server deployment is the most common and feature rich way to run Puppet. For any environments where multiple hosts are managed, client/server deployment is usually the way to go.
This mode has two executables, puppetmasterd (server), and puppetd (client). Knowing the roles of these executables is important for understanding the differences between these three deployment practices.
- Client gathers local facts about its system using facter.
- Client initiates a request to the server requesting the latest version of its catalog(description of desired configuration state)
- Server compiles the configuration from source(manifests) into a catalog and returns it to the client.
- Client applies the catalog, resulting in configuration changes.
- All configuration source is centrally stored and managed on the puppet server.
- The client only receives the configuration information that it needs (and can't see the information that doesn't). - The client doesnt have access to the source code, just the compiled catalog that applies to it.
- The server allows for more complicated management of nodes using an external node classifier (like the dashboard). - A node classifier allows assignment of classes and parameters to be handled by an external script. This allows information about how nodes are defined to be controlled by external data sources (think CMDB)
- Uses certificates to ensure that only authorized clients can retrieve configuration.
- Centralized function execution can simplify custom functions.
- Number of hosts per Puppet server.
- Interval between client check-ins.
- --noop - allows you to see the effects of the compiled catalog without making any modifications to the local machine
- --verbose, --debug - increased logging output
- --modulepath - puppet standalone can use modules to organize and re-use code just like client server
- --environment - standalone can also use multiple environments.