专栏名称: 云技术实践
关注云计算,云技术,云运维,云存储,存储,分布式,OpenStack,SDN,Ceph,虚拟化,运维,分享在云计算/虚拟化/运维项目实施中的资讯、经验、技术,坚持干货。
目录
相关文章推荐
架构师之路  ·  1743天,299万... ·  昨天  
51好读  ›  专栏  ›  云技术实践

Openstack容器项目之Magnum

云技术实践  · 公众号  · 架构  · 2017-05-04 19:21

正文

本文以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命令


cluster-create


parameters:

  • --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.

function

创建一个cluster,以异步的方式执行。

example:

magnum cluster-create --name mycluster \

--cluster-template mytemplate \

--node-count 8 \

--master-count 3

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


cluster-delete


function

通过name或ID删除一个cluster。

example:

magnum cluster-delete mycluster


cluster-list


function

列出所有的cluster。

example:

magnum cluster-list


cluster-update


parameters:

  • \ This is the first parameter, specifying the UUID or name of the cluster to update.

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

  • \ This is the third parameter, specifying the targeted attributes in the cluster as a list separated by blank space.

function

更新某个cluster。

example:

magnum cluster-update mycluster replace node_count=8

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


cluster-template-create


parameters:

  • --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.

function

创建cluster template。

example:

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


function

删除某个模板。

example:

magnum cluster-template-delete mytemplate


cluster-template-list


function

列出所有的模板。

example:

magnum cluster-template-delete


cluster-template-show


function

显示某个模板的详细信息。

example:

magnum cluster-template-show mytemplate


cluster-template-update


function

更新某个模板。

example:

magnum cluster-template-update mytemplate [ ...]


service-list


function

列出所有的magnum service。

example:

magnum service-list


ca-show


function

显示某个cluster CA certificate 的详细信息。

example:

magnum ca-show mycluster


ca-sign


parameters:

  • --csr File path of the csr file to send to Magnum to get signed.

  • --cluster ID or name of the cluster.

function

为某个cluster产生一个CA certificate。


cluster-config


function

Configure native client to access cluster.


stats-list


function

Show stats for the given project_id.

example:

magnum stats-list [--project-id ]


说明:

(1)当前版本中支持的image如下

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

(3)当前版本支持的容器volume-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)相关代码。







请到「今天看啥」查看全文