云计算国产化之路 vnc登录 文件系统直通(virtio-9p) 扩展qemu接口 gpg WARNING 珍藏博客 虚拟内存情况dommemstat分析 免密码自动登录脚本 Linux网桥 测试网段IP占用情况 Linux 进程状态 systemc强制依赖 调试openstack ut uefi p2v 重做ubuntu内核 virsh创建虚拟机简介 virtio IO路径 虚拟化层升级后磁盘无法卸载卷 vmtouch使用 Taint flags 主机和虚拟机文件共享处理的几种方法 kvm分析工具 kvm中对磁盘的io cache 虚拟化不同导致的guestos中软件安装差异(未解决) 设备直通(PCI Assignment)到底是咋整的 virtio到底是咋整的 内核启动参数 虚拟化实时性提升(零)之配置步骤 中断虚拟化(pic)到底是咋整的 中断虚拟化(apic)到底是咋整的 Raid卡配置丢失导致服务器无法启动 tainted kernels cpu stuck for 23s问题分析 虚拟化实时性提升(一)之hostOS切换为强实时系统 内存虚拟化到底是咋整的 qemu-kvm中vcpu虚拟化到底是咋整的 风河虚拟化技术点分析 使用qga的好处 qemu迁移代码分析 虚拟机串口配置及其导出到主机pts和console.log System-based I/O vs. Raw I/O 虚拟机使用Hugepage(大页) 硬件辅助分页(hardware assisted paging) 修改centos7默认启动项目 virtio的工作流程——kernel中virtio-pci初始化(2) virtio的工作流程——qemu中virtio-backend初始化(1) qmp ceilometer取不到memory.usage指标 Virtio-Balloon超详细分析 slabtop输出 虚拟机磁盘cache导致的host os kernel崩溃 虚拟机cpu和memory性能优化测评 PCI配置空间(PCI Configuration Space) centos下网卡设备直通(VT-dpci passthrough)遇到的问题及其解决思路 libguestfs详解 yum卸载软件包及其依赖 通过原始Centos ISO来定制自己的ISO centos下网卡设备直通(VT-d,pci passthrough) (占位符)window虚拟机中拔盘如何通知到libvirt和qemu后端的 cirrus漏洞分析CVE-2017-2615 XSA-208 qcow2随笔 控制寄存器概览 ceilometer对接postgresql 解压initrd和vmlinuz qemu guest agent验证 QEMU升级指南(待续) ubuntu中kdump的配置 qemu(2.3)接口梳理 热迁移导致的FC存储场景下的multipath卷残留问题分析 virsh命令(4)secret,snapshot,pool,volume部分 virsh命令(3)之interface,filter,network virsh命令(2)monitor,host,nodedev部分 virsh命令(1)之domain部分 QEMU内存管理之FlatView模型(QEMU2.0.0) ovirt基于sanock的高可用(主机粒度HA) Sanlock防脑裂场景功能测试用例 gnocchi配置及与ceilometer对接指南 make patch for libvirt in centos centos使用sanlock指导 高可用nfs资料 ubuntu14中使用sanlock指导 LVM操作指南 sanlock相关功能验证流程汇总 make patch for libvirt in ubuntu libvirt.so.0-version `LIBVIRT_PRIVATE_1.2.7' not found gdb debug libvirt 基于ubuntu社区源码包编译libvirt compile libvirt(centos) No PCI buses available nfs lead to Linux halt nfs install and config anti-virus for cloud platform nova fetch image from glance(something about _base) token auth process ovs入门指南 virt software anti-virus something about ceilometer disk sample context interview questions openstack vm injection openstack Restful and RPC murano 概览 创建虚拟机流程(compute节点)之网络创建 创建虚拟机流程之compute_api之虚拟机实例填充之配额检测 创建虚拟机流程之compute_api之基本参数生成 创建虚拟机流程之compute_api 创建虚拟机流程(主) 创建虚拟机之image 创建虚拟机流程之准备网桥 创建虚拟机流程之virt 创建虚拟机流程之compute节点 CI/CD研发流程之工程创建 CI/CD研发流程之代码合入 CI/CD研发流程之UT(单元测试) 向openstack社区合入代码记 openstack/ceilometer/gnocchi杂谈 影子页表原理 mem_add(exec.c) qemu编译安装调试 openstack/ceilometer/gnocchi之Grafana简介 openstack wiki etcd openstack计量ceilometer openstack计费cloudKitty enventlet backdoor USB 安装VMWARE ESX pycharm设置指南 无法执行modprobe -a kvm-intel解决办法 QEMU配置项 网络不通小记 libvirt之XML(虚拟机定义文件) openstack-horizon 证书认证 ceilometer与ceph对接 openstack定时任务剖析(TODO) 服务器重启后mongodb进程无法启动 ubuntu14下新增openstack服务到service的导引 ERROR 1045(28000)-数据库连不上 Python两个内置函数—locals和globals unknown exit, hardware reason 31

murano 概览

2016年04月29日

openstack/murano 概览

概述

murano是openstack的一个PAAS层项目,旨在简化应用部署。
它使用openstack提供的IAAS层服务(nova、neutron、heat)将创建虚拟机部署应用整合起来。

在管理员准备好镜像及其服务包的基础上,使用者可以一键式部署心仪的应用。
从此,将云使用者从创建虚拟机到安装应用的轮回中释放出来,极大的简化云使用者的,提高了服务体验。
比如说有客户需要一个安装了apache的虚拟机,现在需要做的就是点一下按钮:

名词解释

Categories:就是一系列标签,支持app检索

packages:安装包,用户可以从这里导入安装包

Application:应用,安装包中可有多个应用,导入packages后,Application会增加对于的应用

Environments:相关联的应用及其网络组成一个Environments,部署的话是部署的Environments,在Environments中应用叫组件(component)

安装部署

测试

devstack中部署murano,在local.conf中追加如下两行即可

enable_plugin murano git://git.openstack.org/openstack/murano

MURANO_APPS=io.murano.apps.apache.Tomcat,io.murano.apps.Guacamole

另外,为使得你能够从外面访问到devstack创建出来的虚拟机,需要进行如下配置
(具体ip自行调配,比如我的网段是192.168.1)

FLOATING_RANGE=192.168.1.0/24
Q_FLOATING_ALLOCATION_POOL=start=192.168.1.172,end=192.168.1.182
PUBLIC_NETWORK_GATEWAY=192.168.1.1

商用

参考这里 (我本身只在devstac中部署过,后续部署了再补充)

开发环境参考这里

使用简介

上传应用

(1)Murano>Manage>Package Definitions

(2)选择方式

  1. 文件:可以安装murano的要求自己规划安装包 用Murano Programming Language (MuranoPL,也就是yaml和yaql)具体看这里这里
    murano也支持heat模板进行转化,具体如何转换看这里
  2. Repository:可以自己搭建仓库
  3. URL:可以使用官方安装包(地址是http://apps.openstack.org/ 间歇性抽风,需翻墙)
  4. 点击下一步

部署应用

(1)Murano>ApplicationCatalog>Applications

找到需要部署的应用,点击Quick Deploy

(2)配置应用,起个名儿吧

(3)勾选镜像

  1. 镜像:上传应用的时候,如果使用的是官方源的话,会自动上传个镜像到glance
  2. key pair :注意这里一定要设置keypair,应用部署出来想登陆虚拟机的话,只能通过这里了。

(4)部署应用

点击部署,这里就开始部署了,运气好的话会部署成功;运气不好的话,等3600秒就会报失败了

(不行,这一节要加一段吐槽)

这里点击完部署后,会通过heat创建个satack,会创建网络,会创建安全组 (注:创建完网络后,需要迅速查看,补充上DNS,我这里使用官方包,默认创建出来的
environment创建的网络子网中默认的没有dns)

然后就会创建虚拟机,虚拟机创建完成后,会按照相应的规划部署应用,这个阶段可以使用上文的key pair登陆到虚拟机中
在/var/murano目录下回看到一系列的plans,就是你的安装规划了。

然后就是应用部署了(到这,听天由命吧):

我在部署的时候,我部署了三种应用,只有数据库的部署成功
一次由于上述的dns问题导致无法加载源,进而murano-agent加载失败 一次由于墙的原因,导致无法下载ruby的包安装失败

体会:如果要使用murano,需要强大的运维能力:

(1)需要管理员根据实际情况自己构建environment,比如网络相关设置等,避免网络不通

(2)需要提前将必备的包下载好,自己做仓库,否则会导致安装时候下不了包,部署失败

(3)或者把应用提前在虚拟机中装好,然后导入到murano,具体看这里

删除应用

kilo有个bug:
删除应用不会释放掉资源,需要删除掉environment采才可以

架构

捡重要的说三点:

  1. heat:资源的操控通过heat进行的,比如虚拟机网络等相关资源的创建删除,都是通过heat触发的。
  2. murano-engine:干活的主体,一个自动机,通过反射等技术将用户规划的安装步骤转换为plan,指导murano-agent工作。
  3. murano-agent:镜像中安装,最终运行在客户机中,接受murano-agent的指令,在客户机中按照规划执行安装工作。
  4. RabbitMQ:给murano-ageent发送的消息,是通过消息队列传递的

原理

创建一个environment然后开始deploy,后台到底执行了什么?
这里进行简要的剖析,本小节以ApacheHttpServer(io.murano.apps.apache.ApacheHttpServer)为例

(1)命令下发

api收到部署请求后,调用murano-engine实施部署。
json格式的请求体中携带创建environment所必须的对象类型(classes),另外包含用户勾选的相关配置。
如包含:

  1. io.murano.Environment对象
  2. 网络对象,用来指向待创建或者已有的网络
  3. 应用对象,包含引用所需的一切内容,比如应用中可能包含虚拟机,则这里会包含虚拟机的name,flavor,keypair等属性。

对象类型的定义是在文件manifest.yaml中,如下面的例子中class为io.murano.apps.apache.ApacheHttpServer,它指向ApacheHttpServer.yaml

其中ApacheHttpServer.yaml定义了一系列

(2)加载定义(Load definitions)

校验配置文件中的class合法性,尝试初始化这些个对象,此过程会下载所必须的包。
初始化的顺序一般为:

  1. Network
  2. Instance
  3. Object
  4. Environment

(3)部署资源

执行Environment.deploy,这里首先初始化消息队列,为后续与murano-agent通信做准备。
然后并发调用每个应用的deloy()方法。
本例中,
这一阶段开始与heat交互,进行资源的预创,生成一个带安全组的Heat模板。
然后开始部署虚拟机,包括网络相关的设置等。
部署的虚拟机中,会注入userdata脚本,促使虚拟机起来后执行配置murano-agent。

(4)软件配置

待部署的应用中,如果包含murano-agent组件。
murano-engine会加载DeployApache.templatey,然后通过消息队列传送至murano-agent。
murano-agent接受到消息后,会执行脚本中的EntryPoint方法。

(5)完工

处理完成以上步骤后将结果返回调用者