OpenStack Magnum全方位详解

Magnum的架构图

图中是Magnum的架构图,首先介绍Magnum的主要概念,在图的右上角,主要有Bay、 Baymodel、 Node、Pod、 Service、 RC、 Container。


Bay: Bay在Magnum主要表示一个集群,现在通过Magnum可以创建Kubernetes和Swarm的Bay,也就是Kubernetes和Swarm集群。

Baymodel: Baymodel是Flavor的一个扩展, Flavor主要是定义虚拟机或者物理机的规格, Baymodel主要是定义一个Docker集群的一些规格,例如这个集群的管理节点的Flavor、计算节点的Flavor、集群使用的Image等等,都可以通过Baymodel来定义。

Node:主要是指Bay中的某个节点。

Container:就是具体的某个Docker容器。

Pod、 Replication Controller和Service这三个概念的意思和他们在Kubernetes中的意思是一样的,这里简单介绍如下。

Pod是Kubernetes最基本的部署调度单元,可以包含多个Container,逻辑上表示某种应用的一个实例。比如一个web站点应用由前端、后端及数据库构建而成,这三个组件将运行在各自的容器中,那么我们可以创建三个Pod,每个Pod运行一个服务。或者也可以将三个服务创建在一个Pod,这取决于用户的应用需求。一个Pod会包含n+1个Container,多出来的那一个Container是Net Container,专门做路由的。

Service:可以理解为Pod的一个路由,因为Pod在运行中可能被删除或者IP发生变化, Service可以保证Pod的动态变化对访问端是透明的。

Replication Controller:是Pod的复制抽象,用于解决Pod的扩容缩容问题。通常,分布式应用为了性能或高可用性的考虑,需要复制多份资源,并且根据负载情况动态伸缩。通过Replication Controller,用户可以指定一个应用需要几份复制, Kubernetes将为每份复制创建一个Pod,并且保证实际运行的Pod数量总是与预先定义的数量是一致的 (例如,当前某个Pod宕机时,自动创建新的Pod来替换) 。

看了架构图之后,可能对Magnum的具体部署还是存在疑惑。那我画一张Visio图解释一下。具体的部署手册敬请期待。

bay-template-example

Bay模板中包含三个重要组成部分:

1.Heat template --OpenStack Heat的模板

2.Template definition -- Magnum的接口,用于和heat template进行交互

3.Definition Entry Point --用于进入Template definition

Template definition中主要是包含了Magnum object属性和Heat tmplate属性的map表

Definition Entry Point是一个标准的接口,用于进入Template definition,为Python objects引入mechanism的插件。每一个Template definition都必须在magnum.template_definitions group中有Entry Point

设置python的环境并运行Magnum

查看安装好的template,检查template是否enable

安装example template

查看安装好的template,检查template是否disenable

通过在magnum.conf中设置enabled_definitions来enable example template

重新观察example template是否被enable了

通过命令中加上 --details argument来获取每个template的详细参数

bulid-atomic-image

在Magnum开发项目中。使用的是Fedora Atomic image来部署Docker, Kubernetes, etcd和Flannel。这一节是介绍build image和在针对这个image做一些改变的update

主要分为4个部分
1.选择packages和build packages repo
2.在Fedora 21上跑docker并build rpm-ostree repo
3.为docker container建立新的glance image
4.从rpm-ostree repo更新container
创建一个package repo,并进行安装

创建完成之后需要build package repo

接下来需要build rpm-ostree repo

需要httpd进程关闭。因为docker需要使用80端口关联apache服务。如果80端口被占用的话,在开启docker instance的时候就会出错

检查80端口

在两个repo都安装完成之后,安装一个增强工具

创建一个新的镜像

更新Fedora Atomic server

重启生效

在你修改完server之后,建议做一个snapshot,然后用新的image作为Magnum的bay。

container-volume-integration

对于Magnum用户来说,我们在Kubernetes,Swarm,Mesos中使用container-volume-integration。这一节主要是介绍如何使用container-volume-integration。

环境:kubernetes version >= 1.1.1 and docker version >= 1.8.3

1.在glance中存放Fedora Atomic micro-OS

2.修改文件

3.创建一个baymodel(需要cinder组件)

4.创建一个bay

5.配置kubelet

6.输入OpenStack用户认证信息

这样Kubernetes container volume intergration就配置完成了,可以使用kubernetes container volume了。接下来是container volume integration with kubernetes bay的一个实践例子

1.创建cinder volume

这个命令会输出一个volume ID,在step 2上会用到

2.创建container在这个bay上

创建一个配置文件

使用这个pod创建container

functional-test

这一节是介绍开发者如何在自己的机器上进行功能测试

1.在devstack上测试

2.非DevStack

需要创建一个配置文件 /etc/tempest.conf

在运行tox时,确保系统知道tempest的配置文件

运行test

Kubernetes-load-balance

在Kubernetes cluster中,所有master和minion都需要连接到Neutron的subnet上,这样所有的nodes都可以进行相互之间的通信或者连接到Internet了。

所有Kubernetes pods和service连接到一个私有的container网络中,默认是Flannel,一种Overlay的网络形式,跑在Neutron subnet之上。Pods和services从这个container网络中获取IP地址,从而进行三层的网络访问。但是,这里的IP地址是不能从一个Neutron外部网络中获取的。

需要将service的endpoint publish到外部网络,这样才能使得外部网络能够访问container的服务,Kubernetes提供了这样的外部Load-balance机制。当一个服务被创建的时候,Kubernetes就会给这个服务加上一个外部的load balancer,这样这个服务就会得到一个外部的IP地址。使得外部网络能够访问container的服务。

这一节主要是介绍如何使用这个Kubernetes-load-balance功能

Kubernetes的master节点需要通过OpenStack的接口来管理Neutron的load balancer,因此,Kubernetes需要获取该接口的认证,Kubernetes默认不开启load balance的功能

如果需要手动开启load balance的功能就需要进行以下配置:

1.配置 kube-apiserver:

2.配置 kube-controller-manager:

3.输入OpenStack用户认证:

4.重启相关服务:

注意点:在删除Kubernets cluster之前。必须先要删除所有load balance所创建的服务,因为Kubernets所创建的Neutron obejects不是被heat所管理的,所以heat不能删除这个load balancer,如果不事先把这些neutron objects(lb-pool, lb-vip, lb-member,lb-healthmonitor)手动删除的话,再运行bay-delete的时候会提示失败。

对用用户来说,把服务的endpoint发布需要以下几个步骤(以nginx为例)

1.创建配置文件

2.在Kubernets的bay创建完成之后,就在pod上发布服务

3.在Neutron外部接口上创建floating ip

Kubernets一开始就是被设计用来运行在不同的云环境上的,比如Google Compute Engine (GCE), Amazon Web Services (AWS), 和OpenStack。所以在不同的特定的云环境上,需要使用插件来跟不同的云环境打交道。

这里是每个不同的云环境的插件

在Kubernets的kube-apiserver and kube-controller-manager启动之后,需要通过OpenStack(keystone)的认证,这样之后,load balancer服务才能启动,load balancer启动之后会使得OpenStack Neutron进行以下几个操作:

最后通过以下几个命令进行检查

通过kubectl command也可以进行检查

manual-devstack

这一节请参考这篇文章

mesos

mesos也是通过heat来进行创建的

目前制作镜像有两种方式

1.通过Disk Image Builder

制作一个Ubuntu的镜像(目前只支持14.04)

2.通过Docker制作

创建一个stack

然后通过命令创建stack

通过Marathon's REST API部署docker container,Marathon是mesos的应用服务框架。

你可以post一个json app到 http://${MASTER_IP}:8080/apps来部署一个Docker container。在上面的例子中 ${MASTER_IP}是192.168.200.86。

通过Marathon web console界面http://${MASTER_IP}:8080/,你可以看到你创建的application

quickstart

这一节介绍一些实用的命令

创建一个Kubernets的bay(CoreOS)

创建redis数据库服务

另外一些对minion的命令

如果需要在Firewall下使用magnum的话可以参考这个

*使用mesos的bay也是类似的操作

tls

Transport Layer Security
参考文章:

http://kubernetes.io/docs/user-guide/services/#external-services

作者简介:
蒋暕青@上海宽带技术及应用工程研究中心:SDN技术实践者,大四北上思博伦实习半年,现工作地点上海

--------------华丽的分割线------------------
本文系《SDNLAB原创文章奖励计划》投稿文章,该计划旨在鼓励广大从业人员在SDN/NFV/Cloud网络领域创新技术、开源项目、产业动态等方面进行经验和成果的文字传播、分享、交流。有意向投稿的同学请通过官方唯一指定投稿通道进行文章投递,投稿细则请参考《SDNLAB原创文章奖励计划》


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/16932.html
分享到:
相关文章
条评论

登录后才可以评论

蒋暕青 发表于16-05-27
0