Puppet概述

1,序言

最近在开发一个基于Vmware ESXi大规模部署虚拟Rack的工具。应用场景为,有若干不同厂家,不同配置的物理服务器,每台服务器都已经安装ESXi. 物理机器的eth0都连接在Admin网络中, eth1连到Control网络。Control网络中有一个DHCP server提供DHCP服务。 虚拟Rack包含基于Vmware 虚拟机开发的三类虚拟机:1) 提供计算功能的vCompute 节点(计算节点又分为多类),2) 提供特殊组网功能的vSwitch节点,3)提供电源管理的vPDU节点。 vRACk各类节点数量由用户指定, Deploy工具根据用户提供的信息,计算没一个vRack需要消耗的物理资源,已经总的资源。然后自动查询用户提供的物理服务器资源,计算每台服务器实际剩余资源。然后根据每台服务器实际剩余资源,以及每个vRACK需要资源,自动选择部署哪个vRACK到哪台物理服务器,并需要考虑负载均衡。最后,在完成部署后,还需要根据每个vRACK,vSwitch, cPDU, vCompute比例,自动登录到vSwitch配置vSwitch端口到vCompute的映射,以及vPDU端口到vCompute的映射。最后返回给用户vRACK的Top结构,和一些必须的配置信息。所有VM都部署在Control网络中,自动从DHCP server获取IP, Deploy工具要配置vSwitch和vPDU,必须可以访问Control网络。同时,用户只能在Admin网络中向Deploy工具提交配置文件,和获取部署结果。

用了一个礼拜完成了原型开发。考虑到后期可能可能需要进一步的功能扩展,以及应用到不同的环境(如KVM,或deploy基于Docker开发的 image)。最近在考虑做一次重构,重新考虑代码结构层次,各种资源的抽象,以及各对象之间的关系。先研究一下目前比较流行的大规模部署,配置管理工具的设计思想,以做参考。Puppet做为目前最流行的配置管理工具,自然成了第一个学习对象。


2,概述

Puppet是一个开源的自动管理配置工具。Puppet是一个跨平台的集中管理系统,能运行在目前主流的的Unix,Linux以及Windows系统中。Puppet使用自身描述语言,或者Ruby DSL(domain-specific language)描述系统资源已经资源状态。资源信息,状态信息称为“Puppet manifests”。

Puppet架构基于C/S 模型,服务器端保存所有客服端节点的配置信息(manifests)。Manifests中的内容可以直接应用于系统,也可以被编译为catalog并通过client-server paradigm(使用REST API)分发到目标系统。Client又成为Agent,负责收集系统信息,根据Server提供配置信息执行配置,并将最终状态返回给Server。

Catalog是一个指定节点的需要被管理配置的状态信息的描述文档,同时它还包含所有需要被管理的资源信息,以及各种资源间的依赖关系。


3,组成

3.1 Puppet-Agent

Puppet Agent 一般作为后台进程运行在被管理节点上。默认Agent每隔30s会向Server发送facts并请求catalog. 一旦Agent收到catalog, agent就会检查catalog的资源,状态描述,如果它发现有resource状态与描述的状态不符,则执行对该resource的相应配置以使其最终收敛到期望状态。

Agent由Puppet,Facter,Hiera三个主要部分组成。

Facter 是Puppet的一个跨平台的配置库。它负责收集节点上的facts并report给Master.

HIera是一个配置数据的键/值(key/value)查询工具。

Puppet, 执行Agent的其他所有功能。

3.2 Puppet-Master

系统中可以有一个或多个Puppet master应用。通常情况下一个Puppet master作为一个Rack application被一个Web server管理。Master控制所有的配置信息,并确保每一个Agent只请求它自己的catalog。

3.3 PuppetDB

PuppetDB是Puppet的数据库,它管理所有平台生成的数据和检索。目前只支持Catalog和Facts的存储。DB仍在开发中,将来会扩展支持更多数据。


4, Puppet 工作流程

Puppet概述_第1张图片

如上图所示,Puppet工作流程为:

1)Agent通过facter收集客户端facts信息,并将facts信息定时发送给Master并请求catalog。

2) Master收到客户端请求后,判断客户端是谁,它要做什么。并根据分类选择属于这个客户端的manifests,打包,编译为catalog分发到客户端。

3) Agent对Catalog进行验证,并执行配置。将执行过程信息和结果写入日志。

4) 配置完成后,客户端最终状态应收敛到manifests定义的状态,Agent收集最终状态,将结果和执行数据返回给Master。

Master和Agent详细交互过程如下图所示:


5, 参考资料

  • Puppet(Software) @ Wikipedia : https://en.wikipedia.org/wiki/Puppet_(software)
  • Puppet Architecture : http://docs.puppetlabs.com/puppet/4.2/reference/architecture.html
  • 董的博客 : http://dongxicheng.org/cluster-managemant/puppet/
  • 刘宇 《Puppet实战》

你可能感兴趣的:(架构,puppet)