`
m635674608
  • 浏览: 5043540 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

从 0.25 到 1.0,中小企业 Mesos 网络和存储的填坑实践

 
阅读更多

看完海外大型企业的 Mesos 容器技术实践,让我们视线回到国内。今天是 数人云容器三国演义 Meetup 嘉宾演讲实录第一弹。中小企业是如何解决 Mesos 使用过程中种种问题的? Acttao 技术总监何威威来告诉你答案——

今天与大家分享的是中小企业的 Mesos 实践中遇到的网络和存储方面的具体问题。

概述

首先介绍一下 Acttao 的实践情况。 Acttao 现在主要运行两个 Mesos 集群,一个用于测试环境,另一个用于生产环境。测试环境部署在 KVM 虚拟机里面,生产环境在阿里云。之前还有一个 OpenStack 的测试环境,后来撤掉了。有了 Mesos 集群以后,我们在开发过程中引入了 CI/CD , CI/CD 要求开发人员能很方便的管理无状态的 Web 服务,一个有状态类似于 MySQL 、 Redis 等的服务,还要求 Web 服务能够方便的找到数据库服务,这是要解决这三个问题。

要解决这些问题,需要我们在 Mesos 的容器里面实现一容器一 IP ,对于有状态的容器需要跨主机的 Volume 服务,以及服务发现。

Mesos 容器网络

说一下 Mesos 网络的方案。按照时间有三个阶段,第一个阶段在 Mesos 0.25 之前,在这之前 Docker 本身没有容器的扩展,第二个阶段是 Mesos0.25 到 1.0 之间,第三个阶段就是现在 1.0 版本之后。 Mesos 0.25 之前这个方案基本上是空白的,大部分都要手动运行脚本,以空网络起一个 Docker 容器,然后再运行一些比如创建网络设备、配置 IP 。那时有一个 Powerstrip 原型的工具,其原理是替代 Docker API 做一些扩展,使用这种工具给 Mesos 容器加 IP 基本不会有改动,通过 Mesos 的 API 就可以实现一容器一 IP 。

在 Mesos0.25 到 1.0 版本之间,这时 Docker 推出了网络扩展功能, Docker 容器有了原生的网络扩展支持。典型的第三方插件有 Weave 、 Calico 等。我们通过 MarathonAPI 可以直接实现创建的容器有一个 IP 。

1.0 之后 Mesos 原生支持了 CNI 网络,通过 Unified Container ,无论是 Mesos 的容器还是 Docker 的容器、 AppC 的容器,都很容易做到一个容器一个 IP 。

在 Mesos 支持 CNI 之前,为了实现 IP per container , Acttao 最后选择了 Weave 。没有使用 Docker 容器的扩展,而是选择 Weave Proxy ,类似于 0.25 之前的方案,因为它很容易集成。 Weave 的 Proxy 方式有 DNS 的服务发现,集成较简单, Weave 起一个 Router ,然后 Proxy 起开,起开以后在 Mesos 的 slave 设置 Docker socket 走 Weave Proxy 的 socket 就可以了。

当时没有选择 Docker Libnetwork 的扩展方式,因为那时需要为每一个 Docker 配一个外部存储,这也是刚才徐春明老师说他们现在 SwarmKit 里面不依赖于外部存储的原因。因为当时测试的 Docker 依赖于外部的存储,最后测试的性能问题比较严重。当时他们建议用 etcd ,而 Acttao 当时用的是 Zookeeper ,测试时起了网络有时候运行 docker network ls , Docker 就会卡掉,基本上是挂掉的状态。

在使用 Weave Proxy 时有两个问题一直困扰着我们。一个是 Weave 网络升级,有新版本发布时,我们可能会选择使用新版本,但是升级比较麻烦;另一个问题是网络的隔离性不好。升级时 Weave Proxy 要重启,重启了之后 Mesos 认为 Docker Engine 挂掉了,会把任务进行重新调度,但实际上在宿主机上的容器并没有挂掉。这个问题对无状态服务影响不大,相当于有多个实例,但是对于数据库服务来说,就会导致原先数据库服务运行着,又调度了一个新的任务,在 DNS 自动发现里一个域名会返回两个 IP ,导致了一个服务是可用的,另一个服务不可用。

由于这个原因,升级之前我们把 Mesos 的 Slave 停掉,把所有 Mesos 管理的容器也停掉,让 master 重新进行任务调度,接着把 Docker 也停掉了,然后安装新版本的 Weave ,之后把 Docker 和 slave 启动。在升级的中途如果宿主机里面有数据库服务,会有一段时间服务不可用。

Weave 基于子网的网络隔离灵活度不是很好。在 Mesos 考虑多租户,一个租户子网分配的太小,可能马上就不够用,后续扩大子网的过程非常麻烦,如果一开始分配的子网特别大,又会造成浪费。

针对升级网络组件时遇到的问题可以使用 CNI 来解决。网络隔离的问题可以在 CNI 的基础上使用 Calico 解决, Calico 基于 iptable 做了防火墙的规则。

在 Mesos 1.0 里配置 CNI 很简单。配置 network CNI 配置文件的目录以及 CNI 插件的目录, Mesos 就可以启用 CNI 的功能。 CNI 对第三方的配置也很简单,这张图是 Weave 的配置,只要一个名称和一个 type : weave-net 。 Calico 同样不复杂,基本上也是配置名称,支持 CNI 这个网络插件里面所需的配置。

使用 Marathon 启用的时候比较简单,在 APP 的 Json 文件里面配上 IP adress ,配一个 network 的 name ,这个名称就是之前配 CNI 里面的名称。然后配一些 label 标签,它与防火墙有关,再配一个 Discover 的端口,主要用作服务发现。通过这种方式,基本上就解决了前面提到的两个问题。

但是 Acttao 目前使用的仍然是 Weave CNI ,没有选择 Calico 方案的原因是它的安全策略现在必须得手动配置,不能自动地和 Mesos 集成。如果内部使用,自己配备也是可以的,但是后来考虑自己来写一个 marathon-calico ,根据 Marathon 中的 APP 自动创建网络安全方面的策略。

Mesos 容器存储

存储方案也和刚才的容器一样是分三个阶段的,中间阶段均是原生支持了扩展,容器 Volume 的扩展以后有一个阶段,以及 Mesos1.0 以后,直接支持 Docker 存储插件。之前 Acttao 基于 GlusterFS 做了 GlusterFS 集群,在每一个 S 节点把集群挂载上去,容器通过 Docker 直接挂宿主机上面目录的功能来实现。

当 Docker 原生支持 Volume 插件以后, Acttao 使用的是 EMC 的 REX-Ray ,这与其他 Volume 的插件功能类似,是我们目前了解到的插件中功能最全的,支持第三方存储,比如 OpenStack 和一些商业存储硬件,包括 EMC 。

Mesos1.0 以后原生提供了 Docker Volume 支持服务,通过 EMC 提供的 dvdcli 工具实现。最开始时 EMC 想利用这个功能为 Mesos 里面提供外部的存储,但是当时它基于 Mesos 的模块,只能支持 Mesos 容器,无法支持 Docker 容器。所以 Mesos1.0 以后直接把这个功能集成在 Mesos 核心。 Mesos1.0 以后,我们把它也配上了,提供 Mesos 原生支持。它的配置比较简单,在 slave 里面安装 dvdcli ,然后设置一个 Volume 的 check_point ,用作恢复,在隔离上面设置好 system/linux 和 docker/volume ,基本上就可以启用功能了。

在 Marathon 里面使用第三方外部存储时,需要把 external_volumes 的 feature 开启,真正使用时是在 APP 的 json 里面定义卷的时候,把 volume 里面的类型设置成外部的, provider 设置成 dvdi ,因为目前只支持这一种方式,后面使用 Docker Volume Plugin 的名称,基本上就可以使用了。

当前最新版本的 Marathon 的外部卷不能使用绝对路径,这个 BUG416 估计短期内也不会得到解决。我们把它里面 dvdi provider 的校验规则改一下,基本上就可以使用了。前端的校验规则里面是 Mesos 的容器,原先设置的时候不能使用相对路径,把它改掉就可以。

 

https://www.v2ex.com/t/315881

分享到:
评论

相关推荐

    肖德时-基于Apache Mesos的企业级容器云实践

    肖德时还分享了在使用Apache Mesos过程中的一些最佳实践,这些实践可以帮助企业更好地利用Mesos来优化资源分配和提高计算效率。这些实践可能包括持久化存储、服务发现和监控度量等方面的具体技术和方法。例如,他...

    基于Mesos的企业级容器云实践

    全球容器大会:基于Mesos的分布式操作系统 王璞@数人科技

    从Mesos到Kubernetes

    从Mesos到Kubernetes

    基于Mesos的企业级容器云实践肖德时.pdf

    基于Mesos的企业级容器云实践肖德时,基于Mesos的企业级容器云实践肖德时

    Mesos实战 中文+英文

    Mesos的核心理念是资源抽象和共享,它能够有效地在集群中分配计算和存储资源,为上层框架如Hadoop、Spark、Kubernetes等提供统一的资源管理层。通过Mesos,开发者可以轻松地构建容错、弹性的应用,同时减少运维的...

    Mesos中文手册

    文档中还介绍了如何使用Marathon和Bamboo这样的Mesos框架,以及与之相关的用户文档和最佳实践。 为了配合文档的丰富内容,Mesos社区也提供了交流社区、Meetup技术沙龙和微信群,为社区成员提供交流和讨论的平台。...

    运营商Mesos云平台实践.pptx

    具体实践中,例如浙江移动的云化历程,经历了从传统孤岛到标准化IaaS、资源池化,再到PaaS和应用资源池化,最终采用DCOS实现服务化和智能化孤岛的转变。通过Mesos,他们实现了业务基础架构建设的快速化和集群级弹性...

    领科云基于Mesos和Docker的企业级移动应用实践分享.zip

    领科云是一家在云计算领域有着深入研究和技术实践的公司,其在企业级移动应用的部署和管理方面,利用了先进的Mesos和Docker技术。Mesos是Apache软件基金会的一个开源项目,它提供了一个分布式系统的资源调度平台,而...

    Mesos中文文档

    Mesos 中文文档是最初由数人科技几名员工在业余时间发起并维护的,目的是提供一个围绕 Mesos 的理论+实践的知识共享平台,做到人人贡献、人人受益。我们会搜罗翻译 Mesos 及其周边组件的介绍,知识分享,使用说明...

    领科云基于Mesos和Docker的企业移动应用实践分享

    ### 领科云基于Mesos和Docker的企业移动应用实践分享 #### 一、引言 随着云计算技术的发展,企业对于移动应用的需求不断增加,同时伴随着对应用部署、管理和维护效率的要求也越来越高。领科云作为一家专注于企业级...

    高洪涛:当当基于 Mesos 的 DevOps 实践.zip

    《高洪涛:当当基于 Mesos 的 DevOps 实践》这份资料主要探讨了当当网在采用 Apache Mesos 平台进行 DevOps 实践的经验和成果。Mesos 是一个分布式系统内核,旨在简化数据中心资源管理,为云计算和大数据环境提供...

    Mesos在传统企业的生产实践_平安科技

    *平台底层以Mesos+Marathon框架来实现容器 应用的创建运行、快速缩容扩容、故障自愈。 *平台自创容器动态独立IP功能,满足平台上 面每个实例与传统应用环境的无缝调用。 *平台的软负载容器可根据应用容器的增删做 ...

    Mastering Mesos - Dipa Dubhashi

    1. **Mesos简介**:Mesos是基于模块化的架构设计,能够高效地管理和调度集群中的计算和存储资源。它将数据中心视为一个统一的资源池,允许不同的应用和服务共享这些资源,减少了资源浪费和提升了整体效率。 2. **...

    Mesos资源共享平台

    Mesos 是一个强大的资源共享平台,设计用于在数据中心实现细粒度的资源共享,特别是针对多样化的集群计算框架,如 Hadoop 和 MPI。该平台的主要目标是提高集群的使用效率,避免因每个框架需要单独的数据复制而导致的...

    Mesos.in.Action.2016.5.pdf

    《Mesos in Action》是一本全面介绍Apache Mesos技术原理与实践的书籍。Apache Mesos是分布式系统领域的重要项目之一,旨在为数据中心提供一个统一的资源管理平台。该书由Roger Ignazio撰写,并由Florian Leibert...

    Mesos:大数据资源调度与大规模容器运行最佳实践.pdf

    Mesos:大数据资源调度与大规模容器运行最佳实践

    mesos运行测试结果分析

    - **关键点:** 此实验进一步验证了Mesos在容器化环境中的表现,尤其是其与Docker结合后对资源管理和任务调度的影响。 - **部署结构:** 未提供具体的部署结构图,但可以想象这种配置能够更好地模拟实际生产环境中...

Global site tag (gtag.js) - Google Analytics