Openstack容器项目之Magnum

本文以Newton版本为例。

1.Magnum简介
Magnum项目通过Openstack API能够在Openstack中创建基于容器的服务,但它本身并不直接对容器进行操作,而是通过Kubernetes, Swarm或者Mesos后端进行管理。Openstack正式项目Zun具有直接管理docker的功能。
Magnum特征:
(1)Clusters(node对象的集合, 以前版本称为Bay)抽象化。
(2)与Kubernetes, Swarm以及Mesos进行集成,管理容器。
(3)与Keystone集成,提供多租户安全。
(4)与Neutron集成,为Kubernetes提供多租户安全。
(5)与Cinder集成,为容器提供volume服务。

2.Magnum架构

说明:

Bay: 与Cluster意思相同,代表一组node的集合。

Node: 容器运行的节点,可以是裸机、虚拟机或者容器本身。

Pod: 运行在同一个Node上一组容器集合, 来源于kubernetes。

Service: 由一个或者多个 Pod 组成,代表一个抽象的应用服务,对外呈现为同一个访问接口,这样访问可以通过 service 来路由,而无需具体知道 Pods 的地址。

Baymodel: 用来存储Bay的模板的对象,类似于Nova中的flavor。

RC:ReplicationController,对 pod 指定副本数,可以保证一直存在该数目的副本存在并运行。

工作流程举例:用户通过GUI(Magnum UI)或者Magnum命令行client端,输入cluster update请求,magnum-api 进程接收到消息进行解析,将消息通过RPC消息队列转发到进程magnum-conductor进行下一步处理,magnum-conductor根据cluster的属性选择后端driver进行处理,如kubernetes, 最后通过heat组件使用template来进行执行具体的update操作。

3.Magnum命令

command parameters function example
cluster-create
--cluster-template \ The ID or name of the ClusterTemplate to use.

--name \ Name of the cluster to create.

--keypair \ The name or UUID of the SSH keypair to configure in the cluster servers for ssh access.

--node-count \ The number of servers that will serve as node in the cluster.

--master-count \ The number of servers that will serve as master for the cluster.

--discovery-url \ The custom discovery url for node discovery.

--timeout \ The timeout for cluster creation in minutes.

创建一个cluster,以异步的方式执行。
magnum cluster-create --name mycluster \

--cluster-template mytemplate \

--node-count 8 \

--master-count 3

说明:使用名为mytemplate的模板, 创建了一个拥有8个node, 3个master node, 名为mycluster的cluster

cluster-delete   通过name或ID删除一个cluster magnum cluster-delete mycluster
cluster-list   列出所以得cluster magnum cluster-list
cluster-show   显示某个cluster的详细信息 magnum cluster-show mycluster
cluster-update
<cluster> \ This is the first parameter, specifying the UUID or name of the cluster to update.

<op> \ This is the second parameter, specifying the desired change to be made to the cluster attributes. The allowed changes are ‘add‘, ‘replace‘ and ‘remove‘.

<attribute=value> \ This is the third parameter, specifying the targeted attributes in the cluster as a list separated by blank space.

更新某个cluster
magnum cluster-update mycluster replace node_count=8

说明:把mycluster中的node节点设置为8

cluster-template-create
--coe \ Specify the Container Orchestration Engine to use. Supported COE‘s include ‘kubernetes‘, ‘swarm‘, ‘mesos‘.

--image \ The name or UUID of the base image in Glance to boot the servers for the cluster.

--keypair \ The name or UUID of the SSH keypair to configure in the cluster servers for ssh access.

--external-network \ The name or network ID of a Neutron network to provide connectivity to the external internet for the cluster.

--name \ Name of the ClusterTemplate to create.

--public \ Access to a ClusterTemplate is normally limited to the admin, owner or users within the same tenant as the owners.

--server-type \ The servers in the cluster can be VM or baremetal.

--volume-driver \ The name of a volume driver for managing the persistent storage for the containers.

--dns-nameserver \ The DNS nameserver for the servers and containers in the cluster to use.

--flavor \ The nova flavor id for booting the node servers.

--master-flavor \ The nova flavor id for booting the master or manager servers.

--http-proxy /--https-proxy \ The IP address for a proxy to use when direct http/https access from the servers to sites on the external internet is blocked.

--no-proxy \ When a proxy server is used, some sites should not go through the proxy and should be accessed normally.

--docker-volume-size \ If specified, container images will be stored in a cinder volume of the specified size in GB.

--docker-storage-driver \ The name of a driver to manage the storage for the images and the container‘s writable layer.

--labels \ Arbitrary labels in the form of key=value pairs.

--tls-disabled \ Transport Layer Security (TLS) is normally enabled to secure the cluster.

--registry-enabled \ Docker images by default are pulled from the public Docker registry, but in some cases, users may want to use a private registry.

--master-lb-enabled \ Since multiple masters may exist in a bay, a load balancer is created to provide the API endpoint for the bay and to direct requests to the masters.

创建cluster template
magnum cluster-template-create --name mesos-cluster-template \

--image ubuntu-mesos \

--keypair testkey \

--external-network public \

--dns-nameserver 8.8.8.8 \

--master-flavor m1.magnum \

--docker-volume-size 4 \

--tls-disabled \

--flavor m1.magnum \

--coe mesos \

--volume-driver rexray \

--labels rexray-preempt=true

cluster-template-delete   删除某个模板 magnum cluster-template-delete mytemplate
cluster-template-list   列出所有的模板 magnum cluster-template-delete
cluster-template-show   显示某个模板的详细信息 magnum cluster-template-show mytemplate
cluster-template-update   更新某个模板 magnum cluster-template-update mytemplate [ ...]
service-list   列出所以得magnum service magnum service-list
ca-show   显示某个cluster CA certificate 的详细信息 magnum ca-show mycluster
ca-sign
--csr File path of the csr file to send to Magnum to get signed.

--cluster ID or name of the cluster.

为某个cluster产生一个CA certificate  
cluster-config   Configure native client to access cluster.  
stats-list   Show stats for the given project_id magnum stats-list [--project-id ]

说明:
(1)当前版本中支持的image如下。

COE os-distro
Kubernetes Fedora-atomic, CoreOS
Swarm Fedora-atomic
Mesos Ubuntu

(2)当前版本支持的容器network-driver如下。

COE Network-Driver Default
Kubernetes Flannel Flannel
Swarm Docker, Flannel Flannel
Mesos Docker Docker

(3)当前版本支持的容器volume-driver如下。

COE Volume-Driver Default
Kubernetes Cinder No Driver
Swarm Rexray No Driver
Mesos Rexray No Driver

4.Magnum源码结构

说明:
api:以Pecan框架(http://www.pecanpy.org/)基础的API请求处理代码,接收到客户端请求后,进行解析转发或者直接处理。
cmd: 整个Magnum组件对外提供操作的入口。
common: 公共代码。
condutor: magnum-conductor接收到magnum-api消息后,在此处选择相应的driver进行下一步处理。
conf: 配置相关代码。
db: sqlalchemy相关代码,包括数据库migrating功能。
drviers: 后端各种driver(Kubernetes, Swarm以及Mesos)相关代码。
hacking: 供magnum单元测试使用的检测对象。
objects: 数据库model抽象,提供操作数据库功能。
service:周期性更新clusters状态至数据库。
servicegroup: 周期性更新magnum服务组状态至数据库。
tests: 单元测试相关代码。

5.Magnum代码流程分析
(1)启动脚本
安装完Magnum组件,会在系统/usr/bin目录下面生产4个可执行脚本,与源码文件setup.cfg中设置相对应,如下图所示。系统默认启动magnum-api和magnum-conductor脚本,magnum系统即可正常工作,magnum-db-manage和magnum-driver-manage可用于手动操作,完成相关任务。
magnum-api: 负责接收处理以及转发client的请求消息。
magnum-conductor: 负责接收magnum-api所发出的消息,进行cluster等具体操作。
magnum-db-manage: 负责数据库的stamp,upgrade,version相关操作。
magnum-driver-manage: 负责管理后端各种driver(Kubernetes, Swarm以及Mesos)相关配置。
(2)代码流程

如上图所示,Magnum逻辑功能主要三个方面.
(1)通过magnum-db-manage控制数据库的migrating,目前只支持sqlalchemy的backend, 位于源码文件setup.py, 如下图所示。

执行过程:调用源码文件magnum/cmd/db_manage.py:main, 之后调用magnum/db/migration.py直接操作,如下图所示。此过程较简单,不再深入。

(2)通过magnum-driver-manage脚本,调用源码文件magnum/cmd/driver_manage.py:main,之后调用magnum/drivers/driver.py, 管理drivers/目录下各种driver(Kubernetes, Swarm以及Mesos)的相关配置。此过程较简单,不再深入。

(3)magnum-api消息处理流程:通过magnum-api脚本,调用源码文件magnum/cmd/api.py,之后系统进入api目录完成消息的解析以及处理。整个api目录下的代码以Pecan为框架组成,如下图所示。

说明:
(1)magnum-api接收到消息后,经Middleware进行过滤。
(2)之后由Pecan Route转发消息至相应的分支进行处理。
(3)Cluster和Certificate分支相关的消息,被发送到消息队列服务端,由magnum-conductor进程处理。其它分支消息只需跟数据库进行交互。

magnum-conductor消息处理大致流程:此进程启动RPC service接受magnum-api发出的消息,之后转发到相应的endpoint进行处理,如下图所示,位于源码文件cmd/conductor.py。


之后跳转到与endpoint对应的conductor/handlers/目录下进行处理,如下图所示。


其中,ca_conductor.py:具体负责certificate相关消息处理,包括生成,存储,删除以及读取certificate操作。支持不同的backend来进行相关的certificate操作,位于源码文件setup.py, 如下图所示。

cluster_conductor.py:负责处理cluster create,update,delete操作,根据cluster的属性选择相应的后端driver(kuberntes, mesos或者swarm, 位于源码文件setup.py, 如下图所示),最后通过heat组件以template形式来执行cluster相关的操作。

conductor_listener.py:代表magnum-conductor alive状态,即相当于keepalive概念。
indirection_api.py:主要用于处理与数据库相关操作。

参考文章:
1.http://docs.openstack.org/developer/magnum/
2.https://wiki.openstack.org/wiki/Magnum
3.https://github.com/openstack/magnum

时间: 2024-10-14 19:29:13

Openstack容器项目之Magnum的相关文章

OpenStack 主要项目一览

OpenStack 发展十分迅速,目前已经包括了几十个正式项目,和大量的孵化项目,基本实现了 AWS 的大部分功能. 业务项目 基础架构层 计算服务 Compute (Nova):提供虚拟机形式的虚拟化 Bare Metal (Ironic):提供裸机形式的虚拟化 注:目前除了不完整的 Nova-Docker,还没有提供容器形式的虚拟化项目,Magnum 目前定位更多的是在上层. 存储服务 Image service (Glance):存虚拟机镜像 Object Storage (Swift):

[ci]jenkins构建容器项目

jenkins构建容器项目 初始化web节点目录 $ tree /data/dockerfiles/ /data/dockerfiles/ ├── first_docker_proj01 │?? ├── Dockerfile │?? └── trucks.war ├── scripts │?? └── deploy.sh # 当执行这个脚本时候,将会将这里的*.war干掉,将最新的war目录下东西移进来.并开始构建镜像 └── war └── first_docker_proj01 ## jen

k8s与CICD--借助scp插件实现非容器项目的部署

一直没有时间完成drone系列文章.drone-wechat插件实现了一半,由于企业微信token申请比较麻烦,所以也没有进展.今天抽出时间,研究了一下scp插件,主要目的是实现非容器项目的部署.其实就是借助scp插件,将构建好的go项目可执行文件和配置文件发布到指定主机上.本项目依旧基于baa-cicd项目. .drone.yml 直接上.drone.yml 文件 workspace: base: /go path: src/gogs.xxx.com/baa-cicd pipeline: bu

OpenStack 网络项目(Neutron)的历史、现状与未来

转载请注明:http://blog.csdn.net/yeasy/article/details/41788795 历史 OpenStack 作为最热门的云计算开源项目,自 2010 年 10 月发布第一个版本 Austin 以来,到 2014 年 10 月 发布 Juno 版本,已经经历了 10 个主要版本.基本稳定为每年 4 月和 10 月各发布一次大的版本更新. 网络功能实现是自第二个版本,即 Bexar 版本引入,最初作为 Nova 项目的一个功能 Nova-Network,仅支持所有用

[openstack]Kolla项目介绍

声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! kolla项目 kolla项目是TripleO项目的一部分,聚焦于使用docker容器部署openstack服务. 项目于2014年9月开始,目前发布了两个release.参与贡献者有约14人.是openstack的孵化项目. 在裸金属上部署openstack不是killo项目当前的目标.因此一个用于部署kolla cluse

一组图表告诉你,AWS为什么刚刚启动了K8S 容器项目

K8S技术社区正式上线啦!快快关注找到志同道合的小伙伴! 2017年3月,AWS与K8S(Kubernetes)创业公司Heptio联合启动了K8S Quick Start,Heptio将帮助AWS解决方案架构团队设计K8S参考架构. 此前,K8S已被应用于Azure.DC/OS以及几乎所有知名的云平台,而Amazon Web Services(AWS)是唯一的例外.Amazon在2016年的re:Invent大会上发布AWS Blox的时候还曾阻击K8S.Blox是一个开源项目,支持用户在Am

OpenStack Smaug项目简介

1 项目简介 Smaug是一个OpenStack中提供应用数据保护服务的项目. 2 项目使命 在OpenStack中建立应用数据保护的标准和规范. 保护OpenStack中的任何资源以及资源的依赖项. 提供多样化的解决方案和功能实现给开发者. 3 开发者视角 足够开放的架构设计保障开发者实现不同的OpenStack资源插件,实施保护机制. 4 用户视角 用户指定待保护的OpenStack资源,资源包括虚拟机,卷,网络拓扑等. 用户自定义保护计划. 5 管理员视角 设置哪些插件保护哪些资源,哪些插

【Network】golang 容器项目 flannel/UDP相关资料

参考资料: flannel_百度搜索 Flannel首页.文档和下载 - 容器集群子网 - 开源中国社区 docker下基于flannel的overlay网络分析 - OPEN 开发经验库 flannel/common.go at master · coreos/flannel flannel/kube-flannel.yml at master · coreos/flannel 为什么隧道封装是Docker多数网络项目的共同选择-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业

Openstack云计算项目实施

Openstack 云计算架构 Version Icehouse 项目实施 目录 1 前言 ............................................................................................. 2 环境说明 ........................................................................................ 2.1 硬件环境说明 ...