solum是部署web application的项目。
web app都是跑在各种web server中,所以solum的操作就分为了languagepack和app两个部分。
solum的作用
- 搭建自动测试系统,并且可以设置在多个版本的runtime环境中进行测试。
- 自动化部署
- 应用开发的整个生命周期管理
- 上述这些都可以和github和docker的特性结合起来,快捷方便
- CI/CD
下面是部署部署一个app的流程的用到的命令总览:
1 | $ solum languagepack create <NAME> <GIT_REPO> |
languagepack
这个步骤可以创建python、java或其他语言的web应用运行环境。
languagepack需要指定一个git repo,下载Dockerfile和build.sh。
- Dockerfile用来创建docker image。
1 | FROM ubuntu:14.04 |
- build.sh用来在创建app时执行。
1 | #!/bin/bash |
app
创建app会包含一个workflow流程,根据已有的languagepack创建最终的deployment unit(DU),然后用heat去部署.
deployment unit(DU)
DU就是一个打包好的安装了运行环境和application的docker image,可以直接用来创建container运行。
当然这个docker image需要languagepack和app两个步骤最终完成创建。
workflow
- unittest
- build
- deploy
标准的三个步骤,但是这个三个步骤可以选择性的执行,比如只执行unittest和build.
workflow的相关信息都是在appfile.yaml里定义,由参数–app-file指定。
1 | version: 1 |
- unittest会根据LP去执行
docker build
,执行unittest脚本,但是不会保存到glance或swift里 - build这个步骤,根据LP执行
docker build
,执行build.sh脚本,最终保存到glance或swift里 - deploy就是通过heat进行nova boot的步骤,依赖nova-docker驱动,从neutron申请IP,从glance下载image。这些取代了直接通过docker的api进行创建容器。
这个步骤可以和k8s、mesos以及swarm结合使用。
solum的配置文件中有这个参数:docker_daemon_url = unix://var/run/docker.sock
solum的对docker的操作,都是通过url的remote API进行请求的。那么,对于docker服务,可以是单独的docker服务,也可以是k8s之类的集群,只要提供和docker一致的API。
https://wiki.openstack.org/wiki/Solum/configurations solum的deploy可以基于docker部署,也可以基于VM
- docker
- 设置nova-docker驱动
/etc/nova/nova.conf
: compute_driver = novadocker.virt.docker.driver.DockerDriver - 把solum的存储项设置为glance
/etc/solum/solum.conf
image_storage = glance - 最后部署的时候需要用
basic
heat template,https://github.com/openstack/solum/blob/master/etc/solum/templates/basic.yaml
- 设置nova-docker驱动
- VM
/etc/nova/nova.conf
compute_driver = libvirt.LibvirtDriver/etc/solum/solum.conf
image_storage = swift,image_format = vm
当用VM在solum里部署应用时,步骤比较绕
- 用disk-image-builder创建带有docker的VM image
- 用这个image创建docker的container,再通过docker的api去安装app的源码,进行测试等操作,最后把image保存到glance
- 最终用这个image部署在VM上
param_file
在solum app create
时也可以用–param-file指定想要inject的参数
这些参数可以通过build步骤里命令脚本去操作
app代码的自动更新部署
app的代码也在git里,而且可以在自己的git里设置hook,在提交代码后,自动向这个web app的地址发送一个POST请求
1 | http://10.0.2.15:9777/v1/triggers/<trigger_id> |
solum会自动重新build一个新的image然后重新部署app
如果是github的源码,在project的设置里可以设定这个trigger url
devstack开发环境
一共有两种方式,一种用vagrant一种用devstack,直接devstack就可以。
wiki文档地址:https://wiki.openstack.org/wiki/Solum/solum-development-setup
- local.conf文件直接从它提供的外网地址下载
- local.conf的配置尤其是密码最好别变,有的服务的密码没有做成可配置,仍然是默认的solum,改动会导致后续的验证失败。
- nova和neutron先手动下载源码后再git checkout到指定的change id里,应该是最新代码还没测试完。