Openstack容器项目之Magnum

来源:互联网 发布:农商银行柜员工资知乎 编辑:程序博客网 时间:2024/04/30 05:03
本文以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命令

commandparametersfunctionexamplecluster-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删除一个clustermagnum cluster-delete myclustercluster-list 列出所以得clustermagnum cluster-listcluster-show 显示某个cluster的详细信息magnum cluster-show myclustercluster-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 mytemplatecluster-template-list 列出所有的模板magnum cluster-template-deletecluster-template-show 显示某个模板的详细信息magnum cluster-template-show mytemplatecluster-template-update 更新某个模板magnum cluster-template-update mytemplate [ ...]service-list 列出所以得magnum servicemagnum service-listca-show 显示某个cluster CA certificate 的详细信息magnum ca-show myclusterca-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_idmagnum stats-list [--project-id ]

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

COEos-distroKubernetesFedora-atomic, CoreOSSwarmFedora-atomicMesosUbuntu

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

COENetwork-DriverDefaultKubernetesFlannelFlannelSwarmDocker, FlannelFlannelMesosDockerDocker

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

COEVolume-DriverDefaultKubernetesCinderNo DriverSwarmRexrayNo DriverMesosRexrayNo 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

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕妇6个月胃酸怎么办 孕早期胎盘早剥怎么办 孕妇晕车怎么办最有效方法 怀孕了受凉胃疼怎么办 怀孕4个月胎位低怎么办 6个月胎位低怎么办 7个多月了胎位低怎么办 瑜伽按摩球破了怎么办 孕妇吐完胸口疼怎么办 孕25周胸口堵怎么办呢 孕期没做过产检怎么办 宝宝的泪囊堵塞怎么办 瑜伽球塞子丢了怎么办 瑜伽球塞子没了怎么办 练阴瑜伽是想睡怎么办 肠道引流拨断了怎么办 瑜伽动作做不到位怎么办 胃肠吸收不好一直长不胖怎么办 小孩把泡泡糖吞进肚子怎么办 练习瑜伽又?带硬怎么办 天气太热没有空调怎么办 腹股沟岔气怎么办才能快点好 瑜伽馆不给退卡怎么办 膝盖总是凉凉的怎么办 练阴瑜伽腿麻怎么办 瑜伽垫在地板滑怎么办 艾灸后后背发凉怎么办 床上老是有小蜈蚣怎么办 早晚出去胳膊脚觉得凉怎么办 腿凉感觉冒凉气怎么办 冬天腿被冻夏天发酸发凉怎么办 宿舍一楼虫子多怎么办 有虫子在咬床板怎么办 床板上的虫咬了怎么办 住的房间有臭虫怎么办 租的房子有臭虫怎么办 瑜伽垫放地上脏怎么办 瑜伽垫和地面滑怎么办 练瑜伽时瑜伽垫全是汗水怎么办 车钥匙放洗衣机洗了怎么办 瑜伽垫边上掉渣怎么办