资讯专栏INFORMATION COLUMN

Kubernetes和OpenStack的多云端网络

Hwg / 2566人阅读

摘要:上周,在举行的上,发布,整合和。多亏存储应用程序会话到数据库通常来说是下载安装或者是,我们不需要特定的负载均衡器,运行完全没有问题。用负载均衡器描述的展示了浮动和私有集群。特别感谢来自的的支持和在测试过程中作出的贡献。

上周,在Austin举行的OpenStack Summit上,CoreOS发布Stackanetes,整合Kubernetes和OpenStack。

一个月前,CoreOS、Intel和Mirantis宣布合作,目标是把OpenStack云管理框架搬上K8S,当OpenStack出故障时,能借助K8S的编排机制以极快的速度重启OpenStack组件。此番“珠联璧合”,却有之前“相虐相杀”之说的铺垫。

去年11月东京OpenStack峰会让我们嗅到了容器的“腾腾杀机”:每个人都在谈论容器,以及用各种容器编排器在不久的将来替代虚拟机!因为容器的轻量级、易用、部署快速,迅速成为开发者最爱,用以轻松建立、维护、扩容和滚动更新他们的应用程序。

以下让我们来看一篇技术帖,描述如何基于Kubernetes,在TCP云端创建私有云解决方法,运用在生产或是在OpenStack启动的虚拟化。

Kubernetes带来一个崭新的方法来管理基于容器的工作负载,并且为虚拟机开启类似于OpenStack的功能。如果你开始使用Kubernetes,你很快会感受到轻松在AWS、GCE或者Vagrant上部署的快感,但是你的本地逻辑部署怎么样呢?如何将其整合到你目前的OpenStack或者虚拟基础设施上呢?所有的博客帖和手册文档用文件证明用简单的网页程序跑在虚拟机上的小集群,但是目前的网络设计却没有能够为裸机或者企业性能负载展示真实场景。设计网络是架构设计中最难的部分,就好比使用OpenStack。因此,我们来定义以下网络需求:

多租户——容器工作负载是每个安全策略标准的基础要求。例如,默认的Flannel网络只提供平坦的网络体系结构。

多云端支持——不是每个工作负载都适用于容器的,你仍然需要将像数据库一个的重负载放到虚拟机或者裸机里。由于这个原因,单个控制面板是最好的选择

多云端支持——不是每个工作负载都适用于容器的,你仍然需要将像数据库一个的重负载放到虚拟机或者裸机里。由于这个原因,单个控制面板是最好的选择

分布式路径引擎——东西和南北流量无法通过同一个中央软件服务。网络流量不得不在OpenStack计算节点和Kubernetes节点之间走动。最优方案就是在路由器上面提供路由,而不是专用网关设备。

基于这些需求,我们决定首先开始使用OpenContrail SDN,我们的任务是将OpenStack和Kubernetes整合到一起,然后为实际负载测试找一个合适的应用程式堆栈。

OpenContrail概述

OpenContrail是一个开源SDN&NFV解决方案,从Havana开始,跟OpenStack有着些许的联系。它和Nicira(现在的VMware NSX-VH)是第一个产品Neutron插件,上一届峰会调查显示,它也是最常被配置的解决方案,排名仅在OpenVwitch之后,是第一个基于Vendor的解决方案。

OpenContrail已经整合到OpenStack、VMware、Docker和Kubernetes上了。Kubernetes 网络插件 kube-network-manager早在去年于温哥华举办的OpenStack峰会的时候已经在开发当中了,于去年年底首次发布。

架构

我们从两个独立的Contrail配置开始测试,然后安装BGP联盟。联盟的原因是kube-network-manager的重点验证。当启用contrail-neutron-plugin开启的时候,contrail API启用keystone验证的时候,contrail API用keystone验证,这个功能还没有在Kubernetes插件实施。Contrail联盟等下会详细描述。

下面的这个架构是一个高水平架构图,图中左边是OpenStack集群,右边是Kubernetes集群。OpenStack和OpenContrail被部署在高可得性的最佳实践设计中,这个设计可以被扩容成成百上千个计算节点。

下图展示了两个Contrail集群的联盟。总体上,这个功能在不需要物理网关的情况下可以连接Contrail controllers与多站点数据中心的站点。每个站点的控制节点和其它使用BGP的站点一样。有可能的话,可以用这种方法延伸到L2和L3网络在多个数据中心上面。

通常,两个独立的OpenStack云端或者两个OpenStack区域会用到这个设计。所有的Contrail的组件(包括vRouter)是一样的。Kube-network-manager和neutron-contrail-plugin为不同的平台转换API请求。网络解决方案的核心功能还是没有改变。这不仅带来强大的网络引擎,还带来了分析。

应用程序堆栈

概述

让我们来看看典型的场景。我们的开发人员给了我们docker compose.yml(点我),这也是为在笔记本上的开发和本地测试所用。这个方法更加轻松,但是我们的开发者已经了解过docker和应用程序工作负载。这个应用程序堆栈包括以下组件:

数据库——PostgreSQL或者MySQL数据库集群

下载并安装——为内容缓存

Django 应用 Leonardo——Django CMS Leonardo被用于应用程序堆栈测试

Nginx——网络代理

负载均衡——容器缩放的HAProxy负载均衡器

当我们想将之运用到产品中的时候,我们可以将所有东西和service一起转移到Kubernetes RC上面,但是就如我们在一开始提到的,不是所有的东西都适用于容器。因此,我们将数据库集群分开到OpenStack虚拟机,然后将剩下的部分重写到Kubernetes密钥清单。

应用程序部署

这个部分描述了在OpenStack和Kubernetes上的应用程序供应的工作流程。

OpenStack方面

第一步,我们已经在OpenStack上正式推出数据库堆栈。这就用PostgreSQL和数据库网络创建了3个虚拟机。数据库网络是私人租户隔离网络。

Kubernetes方面

在Kubernetes这边,我们不得不用Leonardo和Nginx services发布表明。点击这里查看:点我 为了使之顺利在网络隔离情况下运行,来看以下部分。

leonardo-rc.yaml-Leonardo应用的RC,replicas3,和虚拟网络leonardo

leonardo-svc.yaml-leonardo service 用虚拟IP在端口8000从集群网络挂载应用程序pods。

nginx-rc.yaml-3个副本的NGINX RC,虚拟网络nginx和策略,这三者允许与leonardo-svc 网络通信。这个例子不使用SSL。

nginx-svc.yaml-用集群vip IP和虚拟IP创建service,从网络上访问应用程序

我们来调用kubecl来运行所有的密钥清单。

在Kubernetes里创建了以下的pods和services。

只有Nginx service有公共IP 185.22.97.188,这是一个负载均衡的浮动IP。所有的流量现在已经在Juniper MX上面被ECMP平衡。为了让集群完全运行起来,就必须在OpenStack上的数据库虚拟网络和Kubernetes Contrail上的leonardo 虚拟网络。进入这两个Contrail UI,然后为这两个网络设置一样的Route Target。这也可以通过contrail 资源(heat resource)来进行自动化。

下面的这张图展示了应该怎样查看产品应用程序堆栈。在最上面是两个有Public VRF的Juniper MXs,就是浮动IP传播的地方。流量通过ECMP到MPLSoverGRE隧道传播到3个nginx pods。Nginx代理请求到Leonardo应用程序服务器,它将会议和内容存储到运行在OpenStack 虚拟机上的PostgreSQL数据库集群。

pods和虚拟机间的连接是直接的,没有任何路由中心点的。Juniper MXs只运用于外向连接到互联网。多亏存储应用程序会话到数据库(通常来说是下载安装或者是redis),我们不需要特定的L7负载均衡器,ECMP运行完全没有问题。

其它的输出

这个部分展示的是其它从应用堆栈的有趣输出。用负载均衡器描述的Nginx service展示了浮动IP和私有集群IP。然后是nginx pods的3个IP地址。流量通过vRouter ECMP分布。

Nginx路由表展示了pods和route10.254.98.15/32间的内部路由,指向leonardo service。

之前的route10.254.98.15/32是leonardo service里面的描述。

Leonardo路由表跟nginx十分相似,除了routes 10.0.100.X/32,他在不同的Contrail里指向OpenStack 虚拟机。

最近的输出是从Juniper MXs VRF出来的,展示了多个到nginx pods的路径。

结语

我们已经证明,OpenStack、Kubernetes、裸机和VMware vCenter可以使用单个SDN解决方案。更重要的一点是,这个使用案例实际上可以为生产环境所用。

如果你对这个话题更加感兴趣的话,可以为我们的这个文章投票,点击链接:点我。

目前,我们正处理Kubernetes网络堆栈的要求,然后提供不同Kubernetes网络插件,比如Weave、Calico、Open VSwitch、Flannel和250个裸机服务器的Contrail等,这几个插件间的对照。
我们也在用Kubernetes备份来处理OpenStack Magnum,给开发者带来简单测试和开发的自助服务门户。然后他们就能够在OpenStack虚拟机里准备应用程序密钥清单,然后推动最终生产定义的修改到git,最后在生产过程中使用它们。

特别感谢来自Juniper的Pedro Marques的支持和在测试过程中作出的贡献。

原文链接

(如果需要转载,请联系我们哦,尊重知识产权人人有责)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32455.html

相关文章

  • 如何用 Ansible 部署 Kubernetes 集群到 OpenStack

    摘要:测试后,使用来发布。部署软件组件,启动虚拟机,将虚拟机分类到和节点,然后部署密钥清单。集群自动化集群配置由三个控制。自签证书签署的服务器端证书和它的密钥文件。 我们之前聊了把OpenStack跑在K8S上,如何基于Kubernetes在TCP云端创建私有云解决方法,运用在生产或在OpenStack启动虚拟化。今天换个姿势,我们来看看如何在OpenStack虚拟机上运行Kubernete...

    jiekechoo 评论0 收藏0
  • Rainbond设计分享系列(1)基于Midonet的多租户网络设计

    摘要:今天跟大家分享基于的多租户网络设计和思考。对多租户支持的实现基础是对多租户的网络支持,公有云要求每个租户之间网络必须隔离,形成相互安全的租户网络环境。 今天跟大家分享Rainbond基于Midonet的多租户网络设计和思考。 Rainbond对多租户支持的实现基础是对多租户的网络支持,Rainbond公有云要求每个租户之间网络必须隔离,形成相互安全的租户网络环境。对于不同的SDN网络,...

    QLQ 评论0 收藏0
  • OpenStack采用Kubernetes,开始走谷歌路线了

    摘要:是一个用这种很谷歌的完美方式来运行大规模分布式系统的工具。我们正在采用这种谷歌方式来运行软件,加上现代化的架构,令更加稳定,更加易于管理。现目前,不足的工作运行在公有云上。 showImg(https://segmentfault.com/img/bVAcRD); Mirantis, Intel和Google结成联盟,准备在Google镜像中重做OpenStack,将OpenStack...

    Aklman 评论0 收藏0
  • Kubernetes 如何打赢容器之战?

    摘要:此时,一些聪明的技术公司纷纷跟进,推出了自家的容器集群管理项目,并且称之为。容器是完全使用沙箱机制,相互之间不会有任何接口。管理集群的所有行为例如应用调度改变应用的状态,扩缩容,更新降级应用等。 showImg(https://segmentfault.com/img/remote/1460000018689306); 阿里妹导读:Kubernetes 近几年很热门,在各大技术论坛上被...

    shiguibiao 评论0 收藏0
  • 明与暗角力!开源云平台中的拼图“玩具”

    摘要:开源云平台中的拼图玩具对于云平台,如今基本就意味着开源。明与暗角力开源云平台中的拼图玩具为什么会产生这种混淆正如之前谈到由两大部分组成和的计算引擎。 开源云平台中的拼图玩具 对于云平台,如今基本就意味着开源。提及开源技术,着实在云计算和大数据下火起来。面对扑面而来的云服务,无论是何种服务对于企业和用户来说都是熟悉的陌生人,熟悉是因为知道云计算的人都能说出IaaS、PaaS和SaaS这几个词,...

    1treeS 评论0 收藏0

发表评论

0条评论

Hwg

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<