OpenStack 本身是一个非常复杂的软件栈,存在大量的服务,每个服务下又细分很多小的服务,每个小服务都是由一个软件包及其多个配置文件组成,手动管理需要消耗大量的人力和时间。PuppetLabs 于 2013 年发起了 Puppet-Openstack 项目,并最终演变成了 OpenStack Offical 项目,对于 Openstack 软件的部署和管理带来了极大的方便。
1 Puppet OpenStack 简介
Puppet-Openstack 项目是由 PuppetLabs 公司于 2013 年发起的开源项目,最初托管在 Github 上,半年后移入 OpenStackCI 体系。最初只有 Keystone,Nova,Glance,Cinder 等几个核心项目的 modules,随后得到了 RedHat,Cisco,Mirantis 等公司的广泛支持,在社区贡献者的持续努力下,Puppet-Openstack 项目从 Stackforge 孵化项目演变成了 OpenStack Offical 项目,目前隶属于 Openstack Goverance 项目。目前已构成了一套庞大而复杂的部署体系。目前 Openstack 最新版本为 15.z.y Train。
2 为什么要选择 Puppet Openstack?
目前用于部署 OpenStack 的工具已非常广泛,为什么要选择它呢?或者说从技术角度来看,OpenStack 自动化部署工具应该如何做技术选型?
1.Puppet-Openstack 项目诞生于 2013 年,诞生时间早,社区参与贡献者众多,使得 Puppet-Openstack 项目非常成熟和稳定,这对于自动化运维来说是十分重要的考虑因素。
2.欧洲原子能机构 CERN 使用 Puppet 管理着世界上规模最为庞大的 OpenStack 集群,总计超过了一万台服务器。这从用户角度证明了 Puppet-Openstack 可以支持大规模 Openstack 集群的部署。
3.目前市场上存在大量的 Openstack 相关的配置管理工具,比如:Ansible、Chef、K8s,下图是基于 2017 年的各配置工具市场占用率。
图中 Fuel 和 Packstack 同样也使用 Puppet openstack 项目,可以看出大多数项目中 Puppet 的占用率,同时我们在实践过程中发现 Puppet 本生非常适合做大规模的集群配置管理,管理接近 4000+ 云服务配置文件、软件迭代、变更发布等工作。
3 Puppet OpenStack 在云计算中的实践
在我们的日常运维工作中,Puppet openstack 包含几乎整个运维周期的配置、服务、软件包的管理,目前有如下项目的服务通过此项目管理:OpenStack 社区 Nova、Neutron、Cinder、Glance、Trove CEPH 社区的块存储 RBD。
下来我们看看 Nova 项目中 puppet 代码结构。
puppet-nova 模块用于配置和管理 Nova 服务,包括服务,软件包,配置文件,flavor,nova,cells 等等。其中 nova,flavor, cell 等资源的管理是使用自定义的 resource type 来实现的。
代码逻辑
1)class nova
数据库、消息队列、日志、SSL 的配置。
2)class nova::keystone::auth
管理 Nova 与 Keystone 相关的认证相关的配置,包含创建用户、密码、 Endpoint 相关。
3)class nova::api
管理 Nova API 服务配置。
Nova_config: 通过传参的方式去控制配置文件中参数。
Nova_paste_api_ini<| |> ~> Service[‘nova-api’] :当有配置文件更新时,我们会自动触发对应的服务。
4)class nova::conductor
管理 Nova Conductor 服务配置。
ensure_package:安装 conductor 服务包。
manage_service:是否管理服务。
package_name :管理 conductor 包名称,即版本号管理
5)class nova::compute
管理计算 VNC 服务配置。
nova_config:通过 create_resource
函数去管理每台计算节点的 VNC 配置。
总结:Puppet-nova 模块中使用的资源整合的配置逻辑,并且通过角色耦合方式对单个服务进行管理,而对于公共服务通过入口文件 nova.pp 进行管理,这种方式组合不仅可以覆盖至每个配置文件参数,增强管理灵活度,也增加了代码可阅读性及松藕性。
数据管理
既然有了逻辑,那数据管理在 Puppet openstack 中是如何做到的呢?首先我们介绍一个 Puppet openstack 组合项目叫做 Hieradata,它是基于键值查询的数据配置工具,Hiera 是一个可选工具,它的目标是:Hiera makes Puppet better by keeping site-specific data out of your manifests 它的出现使得代码逻辑和数据可以分离管理。
Hieradata 树形结构:
我们通过文件名来区分赋值与对应的服务应该使用哪些数据,那他们是怎么在文件中是使用的呢?
compute.yaml 计算服务数据
Puppet-nova 中我们提到过 VNC 配置。
通过直接引用 puppet-nova 中的 common 类下面的变量给代码块中逻辑传输对应值。这样 Puppet 在服务端编译成 Catalog 日志后,发送给客户端转换成 JSON 文件后应用在每台机器上。
4 总结
OpenStack 本身是一个非常复杂的软件栈,大量的配置、每个服务下细分很多小的服务、而每个小服务都一个软件包,人工管理需要消耗大量人力和时间,选择一个适合当前环境的配置管理工具是非常必要的。
本文转载自公众号 360 云计算(ID:hulktalk)。
原文链接:
https://mp.weixin.qq.com/s/n9MoSTzMSKLbMrEOuZ70YA
评论