今年五月刚结束的Juno OpenStack Summit是半年一度的Openstack盛会,抛去那些迷花渐欲乱人眼的商业活动,我们来看一看本届summit puppet-openstack社区有哪些新的动态,有哪些新的开发计划。

鉴于上次icehouse puppet design summit主要是以core members和active dev member为主的纯技术讨论会议,导致好多感兴趣的用户来听了也不知所以然。

因此,本届summit中又新增一个称为Juno puppet operators meetup的会议,旨在提供一个用户和开发人员相互交流的机会,听取用户的意见和建议,分享部署和运维的经验,吸引了大量的开发者/用户前来参加。

前PTL Dan Bode在Havana Release之后便离开了Puppetlabs,创建了以自己名字命名的咨询公司,开始退居二线,云游世界,因此,这次meetup由puppetlabs的Chris Hoge负责主持。


Topic 1 Who is using Puppet to manage Openstack ?


Chris一开始询问有哪些公司使用了Puppet来管理Openstack,我整理了一下在Etherpad上的记录,如下表所示:


                                      表1 使用puppet管理openstack的公司


公司

系统版本

puppet组件

puppet组件版本
Aptira CentOS 6 puppet_openstack_builder Havana
Catalyst Ubuntu 12.04  puppet openstack modules Havana
CERN Scientific Linux puppet openstack modules Havana
Cisco Ubuntu12/14 puppet_openstack_builder Grizzly/Havana/Icehouse
Comcast Ubuntu puppet openstack modules Essex/Grizzly/Havana
Cybera Ubuntu puppet openstack modules Grizzyly/Havana
despegar.com/decolar.com Ubuntu 12.10 custom modules Folsom
eNovance Ubuntu12.04/14.04
Debian Wheezy
RHEL 6.5
puppet-openstack Grizzly/Havana/Icehouse
GoDaddy CentOS 6 puppet openstack modules Havana
iWeb Ubuntu 12.04 puppet openstack modules Havana
Icehouse for Swift only
 
Mirantis Ubuntu 12.04 CentOS 6.[3-5] puppet openstack modules Folsom/Grizzly/Havana/Icehouse
MIT CSAIL Ubuntu 12.04 puppet openstack modules Havana
Nimag/Camptocamp Ubuntu 12.04 puppet_openstack_builder Havana
Oracle  Solaris 11.2 puppet openstack modules Grizzly                  
Pixelpark AG
 
Fedora 20 puppet openstack modules(except Ceph) Icehouse
Red Hat  RHEL puppet openstack modules  Grizzly/Havana/Icehouse
SCEA Ubuntu 12.04 puppet openstack modules Essex
Sina Ubuntu 12.04 puppet openstack modules Essex/Folsom
Time Warner Cable Ubuntu 12.04/14.04 puppet openstack modules Ubuntu 12.04 for Havana
Ubuntu 14.04 for Icehouse
Unitedstack Centos 6.[4-5] puppet openstack modules and custom modules Folsom/Grizzly/Havana/Icehouse

小结

从上述的数据来看,

1.  puppet-openstack项目虽然起步于Essex版本,但已经得到了广泛的应用;

2.  Puppet openstack modules支持目前绝大数主流的Linux OS系统,大多数公司会选择Ubuntu,其次是RHEL系(RHEL/CentOS/Fedora);

3.  绝大数公司在使用havana stable分支的core openstack modules代码;

4.  使用puppet-openstack模块作为composition layer目前远高于puppet_openstack_builder;

5.  不少公司使用了定制化模块来满足内部业务需求

6. 有两家公司在puppet openstack项目的基础上,开发了用于简化部署的工具:

a. Mriantis的Fuel底层封装了puppet openstack modules(有定制化修改),提供更为方便快捷的部署方式,同时支持Ubuntu和CentOS (是因为RedHat投了Mriantis LOL);

b. RedHat的packstack也是类似的原理,直接使用了upstream的puppet openstack modules,不过只支持自家的RHEL系列 :)

来自Openstack官方的User survey作了关于部署工具的最新数据统计,Puppet在不同的集群规模上(非POC)均排名第一,其次是devstack:

图1  部署工具占有率分布图

Topic 2 How are you using Puppet to manage Openstack?

第二个话题是关于通过何种方式使用Puppet来管理Openstack集群。

大致可以划分为以下5类:

  1. 直接使用upstream的代码,并保持更新
  2. 使用upstream的代码,但只在必要时进行更新
  3. 使用upstream puppet模块和私有的composition layer
  4. 使用未修改的核心模块,但不使用puppet-openstack作为顶层的composition layer
  5. 使用定制化模块和针对特定节点的composition(Cybera)

小结

第1种和第4种方法是比较常见的使用方式。
    第1种方式适合小规模部署或者没有定制化的需求,例如搭建一个poc环境,开发环境,测试环境等等;
    往往在有一定业务需求的情况下,社区的puppet-openstack模块不能满足(必然不能满足,因为这个模块的目的是满足通用性,鼓励大家在此基础上做定制化的修改),会进行二次开发,因此,多数常常会采用第4种方法。例如,我们就使用了puppet-sunfire模块用于替代puppet-openstack模块。

Topic 3 What are your experiences ?

第三个话题是分享关于使用Puppet部署Openstack遇到的困难和经验。

第一个问题是关于puppet module升级的流程:由于每个节点的数据存储在hiera/ENC中,当升级puppet modules时,那么用户如何知道哪些参数将会变更,哪些参数需要进行调整。
       这里引申出如何管理弃用参数,当前对于涉及到参数名称的变更时,会要求提交者有完善的逻辑对其进行处理,若用户用到了弃用参数,会调用warning函数发出弃用警告信息,但仍然有效。
       会议上约定了两条准则:
             -  弃用参数应该在README或者Release中说明
             -  注明参数最终会在何时被移除

关于是否最终删除这些废弃的参数,一些开发者认为尽可能地保留这些参数,以保证向前兼容。

2. 代码审查应该快速有效

问题1:有些开发者认为社区的代码审查太慢了,拖得太久,主要是puppet-openstack社区不像其他社区那么单一:
           首先多达十几个项目,从puppet-nova,puppet-keystone,puppet-heat模块到puppet-designate,puppet-ceph等,需要代码审查者熟练掌握Openstack每个项目的组件和配置;
           其次代码审查这还需要花费时间去验证和部署这些代码;
           代码逻辑会有争论;

问题2: 有些提交了的变更需要改进,但是原作者可能去做其他事情了。
                    这个问题挺常见的,原作者提交完之后就神龙不见神尾,core dev们其实对于这种按其他人提出的修改要求再提交个patchset随手把task结了的事是乐意的,但是怕侮辱了原作者(but don't want to step on toes of original submitter)。如果你认为可以帮你修改,就在commit信息里留言。 老外的心灵都是这么脆弱的么...

3. 跨多节点的orchestration是个痛苦
        
         例如,版本升级,swift ringsync操作等等。
    
       4. 核心基础模块已经比较完善了,但是它们所依赖的模块比如Corrosync/Packmaker仍需大量的工作,有些独立的模块开发进度太慢
       5. 大多数人都是从git获取这些module,而非Forge
              -  从stable分支拉取
              -  通用的对于稳定分支打补丁的策略
                   -  如果仅是针对当前版本,只提交到master分支,如果影响到先前的稳定分支,那么做backport。目前,大多数的提交都backport到了以前的稳定分支。
                   -  如果你不确定,代码审查者会提醒你的
       6. 某一个新变更导致stable分支无法正常工作
               - 用CI来避免
               - 添加新的builder来改进

7. 包管理  
              有一般的开发者/用户选择自己打包,另一半使用Rethat/Canonical官方源提供的包
              那么是否可以在puppet modules里使用类似UID的方式来管理这些包。

Topic 4 What is missing from Puppet for Openstack? What do you want to see?

1. 初学者如何入门用puppet部署Openstack

入门手册马上就要出炉了,各位耐心等待。

2. 缺少Trove module
          
           Emilien正在为此努力,第一版已经在会后发布了。

3. 完善bug追踪管理
          
           有许多bugfix没有在launchpad上记录
 
    4.  将一些部署测试和集成测试作为gate check的一部分

- 每个模块的rspec测试并不能满足发现类似于“neutron module测试没通过是因为nova module的变更引起”的错误
        - 需要借助类似于packstack或者puppet_openstack_builder的工具来构建多OS的测试环境

5. 我们如何使用Puppet将线上环境从H版升级到I版本?

这个问题产生了比较多的讨论,有些开发者认为这个并不能单单靠puppet来完成,puppet能做的是包的升级,配置文件的变更,服务的启停,数据库表结构的更新等,多于节点间的变更顺序需要借助orchestration工具来做。对于如何升级的文档,首先Openstack各项目就没有明确的文档,所以puppet-openstack社区来做这事情需要从头开始,目前缺乏有效的工具,工作流程和实战经验了。并且不同的部署架构决定了不同的变更流程。我总结一下,目前还没有现成的工具来做到自动化地完成大版本的升级。不过有开发者表示开始着手研究基于puppet来完成Openstack大版本升级的解决方案了。
        
      6. Launchpad blueprint 将会被puppet-specs替代  
      7. 在同个puppetmaster上使用不同版本的puppet modules 
        已经有人开始做这个事了:
         
      http://docs.puppetlabs.com/puppet/latest/reference/environments.html

https://github.com/adrienthebo/r10k

End

本次puppet用户组会议的小结到此结束,用户组会议对于参与的双方来说都是受益匪浅:用户提出了自己的迫切需求和实际部署时遇到的困难,开发者们掌握了用户的确切需求,在定制下一个里程碑时就会有所着重,有针对性地开发新特性,修复bug, 对逻辑进行重构优化等等。

本次会上所收集到的几个重点需求将会在puppet-openstack developer design summmit中进行讨论,我会在下一篇博文中详细说明puppet-openstack社区在Juno release中的主要方向和工作重心。

Juno Puppet Opertaors Meetup小结的更多相关文章

  1. Puppet Openstack Mitaka Design Summit小结

    Puppet Openstack Design Summit小结 经过Puppet Openstack社区的不断努力,Puppet Openstack社区目前提供的Official Modules已经 ...

  2. NCC Meetup 2018 Shanghai 活动小结(含PPT与视频)

    NCC Meetup 2018 上海的活动于2018年6月30日在微软上海港汇办公室进行.原本计划30人规模的小型活动,结果收到了逾60人的报名,其中大部均来到现场参加了活动. 本次活动得到了微软公司 ...

  3. puppet的使用:依赖关系整理

    title: date: 2016-05-08 21:45:33 tags: puppet categories: 技术 puppet中的依赖关系整理. 概述 puppet中的依赖关系大概有如下几个: ...

  4. [openStack]使用Fuel安装OpenStack juno的fuel_master

    安装OpenStack是一件很复杂的事情,特别是在想目中,如果一个组件一个组件,一台一台的coding部署,估计太消耗时间,而且出错的概率很高,所以使用工具推送部署的效率就很高了,而且必须得可靠.mi ...

  5. Centos7 install Openstack Juno (RDO) (转载)

    原文地址:http://www.hdume.com/centos-7-0%E5%AE%89%E8%A3%85openstack/ 1.安装系统,Centos7镜像采用CentOS-7.0-1406-x ...

  6. Centos7+puppet+foreman,实现部署OS

    一.简介 1. 需要实现操作系统的部署 foreman提供了一个基于kickstart的部署工具,输入一台服务器的部署网卡的mac地址和hostname.ip等信息,就能自动的帮我们部署完,并且,还可 ...

  7. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  8. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  9. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

随机推荐

  1. jquery----语法扩展(导入js文件)

    简单使用 第一步,新建js文件 第二步,在js文件中添加 $.extend({ "GDP": function () { console.log("哈哈哈哈") ...

  2. 步步为营-72-asp.net简单练习(通过webForm实现一些简单实例)

    WebForm成功之处在于:实现的代码后置,和asp相比实现了html代码和C#代码分离.但 aspx和aspx.cs之间的强耦合和性能方面(特别是服务器控件)做的不是很好. 参照步步为营-68完成相 ...

  3. HTTP请求报文和响应报文

    HTTP请求报文 GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive Upgrade-Insecure-Requests: 1 User ...

  4. python学习之集合

    集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 创建格 ...

  5. Codeforces 631E Product Sum 斜率优化

    我们先把问题分成两部分, 一部分是把元素往前移, 另一部分是把元素往后移.对于一个 i 后的一个位置, 我们考虑前面哪个移到这里来最优. 我们设最优值为val,   val = max(a[ j ] ...

  6. P1865 A % B Problem 素数筛

    题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对于每次询问输出个数 t,如l或r∉[1,m]输出 Cros ...

  7. 【Java】 剑指offer(26) 树的子结构

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两棵二叉树A和B,判断B是不是A的子结构. 思路 1)先对A树 ...

  8. (转)Java按指定行数读取文件

    package test import java.io.File; import java.io.FileReader; import java.io.IOException; import java ...

  9. PHP 随笔记

    SQL插入数据并返回刚插入数据行的主键ID INSERT INTO `peoplespublic`.`demo` (`id`, `name`, `content`, `time`, `file`) V ...

  10. 快速幂-hdu1097

    题目描述: 题目大意:给出两个数,求出a^b的最后一个数字. 代码实现: #include<stdio.h> using namespace std; int pow(int a,int ...