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

2023-10-24 19:40

本文主要是介绍从0.25到1.0,中小企业Mesos网络和存储的填坑实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

             

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

从0.25到1.0,中小企业Mesos网络和存储的填坑实践 今天与大家分享的是中小企业的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就可以了。

从0.25到1.0,中小企业Mesos网络和存储的填坑实践 当时没有选择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启动。在升级的中途如果宿主机里面有数据库服务,会有一段时间服务不可用。

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

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

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

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

从0.25到1.0,中小企业Mesos网络和存储的填坑实践 但是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。

从0.25到1.0,中小企业Mesos网络和存储的填坑实践 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,基本上就可以启用功能了。

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

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

我的分享就到这里,谢谢大家。



查看原文:http://www.zoues.com/2016/10/26/%e4%bb%8e0-25%e5%88%b01-0%ef%bc%8c%e4%b8%ad%e5%b0%8f%e4%bc%81%e4%b8%9amesos%e7%bd%91%e7%bb%9c%e5%92%8c%e5%ad%98%e5%82%a8%e7%9a%84%e5%a1%ab%e5%9d%91%e5%ae%9e%e8%b7%b5/

这篇关于从0.25到1.0,中小企业Mesos网络和存储的填坑实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/277350

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat