Magnum Bay Create简析

magnum组件只有magnum-api和magnum-conductor两个服务,那么入手点就简单了,请求都传递给magnum-conductor来执行了。
下面是magnum的源码结构,已经去掉了一些不重要的目录

1
2
3
4
5
6
7
8
9
10
11
12
magnum
├── api # magnum-api服务的代码,http服务
├── cmd # 命令行启动服务magnum-api、magnum-conductor或者初始化数据库,还有一个template_manage
├── common # 通用操作
├── conductor # magnum-conductor服务的代码
├── db # 数据库信息
├── drivers # 重点,执行操作都会定位到这里的代码和脚本
├── objects # data model
├── service # 一些额外的操作类,周期服务类等
├── servicegroup # 同上
├── templates # 原先放置heat模板文件的地方,后来统一改成了driver模式,就挪到了drivers目录下
├── tests # 测试

对于magnum bay-create操作,主要涉及conductor和drivers这两个目录的代码,templates还剩下一些东西,不过最终也要弃用。

drivers的目录有下面这些东西

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
drivers/
├── common
│ └── template_def.py # 模板定义的父类
├── k8s_fedora_atomic_v1
│   ├── template_def.py # 定义模板类
│   ├── templates
│   │   ├── elements # 创建image时可能用到的element
│   │   ├── environments # 创建集群环境时,环境的配置
│   │   ├── fragments # 创建集群环境时,可能要在heat模板里执行的一些脚本
│   │   ├── kubecluster.yaml # 具体的heat template,这里是bay具体要执行哪些操作
│   │   ├── kubemaster.yaml
│   │   ├── kubeminion.yaml
│   └── version.py
├── k8s_coreos_v1
├── mesos_ubuntu_v1
└── swarm_fedora_atomic_v1

可以看到当前magnum支持了三种docker集群,一共四种driver

  • k8s_fedora_atomic_v1
  • k8s_coreos_v1
  • mesos_ubuntu_v1
  • mesos_ubuntu_v1

要执行执行哪个driver,是有三个参数来决定的:server_typeoscoe
每个driver里都会有一个template_def.py,这个就是来定义heat template的信息的类,类里主要做了3个操作:

  • get_params # 要给heat template传递什么参数
  • get_env_files # 要在调用heat template时如何设置环境,主要是针对是否load balance时,执行了一些heat的resource_registry操作
  • template_path # 要执行的heat template的文件路径

举个例子,对于{'server_type': 'bm', 'os': 'ubuntu', 'coe': 'mesos'}这样的参数,函数调用的堆栈信息如下:

1
2
3
4
5
magnum/conductor/handlers/bay_conductor.py: Handler:bay-create
magnum/conductor/handlers/bay_conductor.py: _create_stack
magnum/conductor/handlers/bay_conductor.py: _extract_template_definition
magnum/drivers/mesos_ubuntu_v1/template_def.py: TemplateDefinition:extract_definition
最终调用 mesos_ubuntu_v1 对应的模板定义类 UbuntuMesosTemplateDefinition 里的三个函数

参考:
Directory structure
Choosing a coe
troubleshooting-guide