docker搭建大规模测试环境的实践

简介: Docker是一个开源的应用容器引擎,第四范式资深测试开发工程师将从四个方面来分享关于docker搭建大规模测试环境的实践。

t0181401d889f562a45

内容来源:2017年4月8日,第四范式资深测试开发工程师孙高飞在“饿了么技术沙龙【第四弹】北京研发中心测试专场”进行《docker搭建大规模测试环境的实践》演讲分享。IT大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。

_

嘉宾分享视频地址:http://t.cn/R9UCnpq

困境

当今互联网行业发展迅速,产品架构逐渐复杂,导致环境搭建困难。

测试环境不一致。

因为搭建环境困难,环境不多,所以一套环境有多人使用,容易造成环境的互相踩踏问题。

随着业务的发展和时间的积累,我们发现case越来越多。我们希望能够用分布式的执行方式在多台机器上并发执行,以提升执行速度。但是测试机器稀缺,速度依然无法提升。

解决方案

自动化

搭建一个环境必须做到一键部署,在迁移、实践和删除环境中也要做到自动化。

标准化

标准化用来解决测试环境不一致的问题。我们希望测试环境、开发环境甚至生产环境都是一致的。

集群化

根据以往的经验发现,测试资源是一种比较稀缺的资源。要把测试环境扩展到一定的量级,使稀缺资源变成普通的、人人都能简单获取的一种资源,这样就省去了复杂的流程和排队等待的过程。

DOCKER

容器技术相较于虚拟机来说还是非常节省资源的。Docker不需要运行完整的操作系统。在一个宿主机上运行的所有容器都是共享宿主机的内核,所以每启动一个容器,都比虚拟机节省了一个内核的空间。

简化了运维成本,极大降低部署环境的学习门槛。

假如公司新进了一批机器,要把环境迁移到某些环境上来,只要把它做成镜像,就可以很方便地进行迁移。而且这些镜像都是一致的,通过制作镜像可以解决标准化的问题。

容器的启动速度和删除速度都是秒级的,有些不是长时间运行的服务在用完后就能将其删除。这样docker的宿主机就始终能保持一个低压力的状态。

1

把应用程序当成一个个集装箱,全都放在docker里。主要是放基础容器、测试环境和测试执行机器。也可把执行测试机器全部制作成镜像,在需要使用的时候启动它并放进docker里。

网络的玩法

端口映射

在docker默认的启动模式是bridege模式的情况下,docker为我们创建了一个叫docker0的网桥,这个网桥专门负责为容器进行转发。它会给容器分配很多虚拟IP,但这些IP只能在容器内部沟通使用。要是想与容器进行通讯,最常用的方法就是端口映射,把容器端口映射到宿主机上。

2

这种方式的优点是简单,不用做任何配置。当然它的缺点也很明显,要维护一个很庞大的端口列表,记住每一个环境容器的端口是什么,对外暴露的端口是什么。

固定IP

我们希望这些容器能像虚拟机一样,给它分配真实的IP去访问它。但这个做法会稍微有些麻烦,docker不支持这样做,我们需要利用一些转化规则。

3

创建一个新的网桥br0,给它分配一个真实的IP,把宿主机的网卡挂到网桥上,同时改变docker的启动参数,默认启动的时候连到br0上。重新划分网段,把所有容器的网段全都分配成和宿主机在相同的网段上。这样启动容器时分配的就是真实IP,并与宿主机相处于同一个网段。

这种方式让外界用户感受不到是在使用容器还是虚拟机,是对测试环境非常友好的一种方式。

但它并不适合在大规模的测试环境中使用。所有环境都有了真实IP,都被放到了真实的网络环境中,如果容器太多就会出现广播风暴的问题。

环境部署

Container模式

Container模式的特点是可以把所有容器绑定到一个IP地址上。

4

虽然所有模块都装在不同的容器里,但它们都有同样的IP,只是它们用不同的端口对外暴露服务。

它的优点是配置管理,效率高,是对开发最友好的一种模式。

缺点是标准化。因为我们公司产品的一些特性,产品环境并不是这样去部署的,所以可能会出现环境不一致带来的一系列问题。

打包模式

有多少模块就并发启动多少容器,这些容器的网络模式可以用host。Host的特性是把所有容器的网络环境挂载到宿主机上。把这些并发编译后上传到FTP上,然后启动一个或多个部署容器。

5

打包模式的优点就是标准化。但它的效率不如Container模式高。

存储的玩法

外部存储

把数据库放到容器外面,在容器内部和数据库进行沟通,保证数据库不会造成数据的丢失。

6

Volume存储

这是docker比较推荐的一种方式。它允许把容器中的某个路径挂载到外部设备上。比如挂载到宿主机上,容器实时向文件中写数据,宿主机上同时也会保存这份数据。

7

集群

我们想要提供一个统一接口去管理集群上所有节点,所以考虑使用一些开源的分布式框架。目前在业界最火的三种框架就是mesos、Kubernetes、swarm mode。

Mesos诞生的时间非常早,专注于资源调度,后来docker火了之后才兼容了docker。它的调度框架的二次调度,只装一个mesos是不够的,还依赖于很多其它的东西。Mesos发展得越来越复杂,需要专业运维去支持,所以mesos并不适合作为测试环境的框架来使用。

Kubernetes是google内部集群框架block的一个开源版本。它当时是为docker设计的,而现在Kubernetes慢慢开始兼容其它平台。Kubernetes原本应该是最复杂的集群管理框架,google提供了客户端工具,把很多内部细节封装起来,简化了它的使用方式。它最近推行的容器化部署也极大降低了Kubernetes的使用门槛。

Swarmmode是从docker1.12版本开始内置到docker引擎当中的,非常简单。它把所有需要的东西全都内置到了一条命令上。只要运行一次这条命令,所有的服务发现、跨节点沟通等等的负载均衡都已经做好了。Swarm mode是三种框架中最简单的一种,但并不灵活,功能也没有那么强大了。

K8S基本概念

POD

8

Pod是Kubernetes一个逻辑的概念,是一组容器的组合,是Kubernetes在一个节点上控制的最小的逻辑单元。

Deployment

可以把Deployment看成一个守护进程,如果把一个Pod挂载到Deployment上面,它能保证Pod始终运行。要是监控到定义的这组Pod某一个节点挂了,容器也都挂了,它会利用调度系统找一个合适的节点启这些Pod。Deployment可以关联多组Pod。

Service

Service同样可以关联到多组环境上,帮我们做负载均衡。当有请求过来的时候,Service会自动分配到各种不同的Pod上去。假如出现了运维事故或IT事故,一个节点挂了,它会自动切换到其它几个节点的容器上去运行,不会影响到它的服务,保证了PM的环境是始终存在的。

安装服务

从单点扩展到集群,复杂度就提升了。

首先要关注的就是跨主机通信问题。Docker分配的是虚拟IP,只能在一个节点的容器中互相沟通。扩展到集群之后,要装一个网络插件来解决问题。

容器之间要互相沟通,必须知道对方的IP地址。Docker在每次启动的时候IP地址都会改变,要有一个DNS去注册域名,在配置文件中做通讯的时候执行这个域名就可以了。

要知道容器运行消耗了多少资源,应该再安装一个服务来做容器级的监控。

Docker变向集群化的时候,就面临了镜像如何在每一个节点上进行分发的问题。所以要有一个镜像仓库来存放所有镜像,每个节点都会拉最新镜像进行部署。

9

以上是我今天分享的内容,感谢聆听!

_

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
397 4
|
7月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1074 108
|
5月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
6月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
2116 10
|
5月前
|
数据采集 存储 人工智能
从0到1:天猫AI测试用例生成的实践与突破
本文系统阐述了天猫技术团队在AI赋能测试领域的深度实践与探索,讲述了智能测试用例生成的落地路径。
从0到1:天猫AI测试用例生成的实践与突破
|
6月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
444 99
|
6月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
381 6
|
6月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
6月前
|
人工智能 自然语言处理 测试技术
AI测试平台的用例管理实践:写得清晰,管得高效,执行更智能
在测试过程中,用例分散、步骤模糊、回归测试效率低等问题常困扰团队。霍格沃兹测试开发学社推出的AI测试平台,打通“用例编写—集中管理—智能执行”全流程,提升测试效率与覆盖率。平台支持标准化用例编写、统一管理操作及智能执行,助力测试团队高效协作,释放更多精力优化测试策略。目前平台已开放内测,欢迎试用体验!
|
7月前
|
人工智能 资源调度 jenkins
精准化回归测试:大厂实践与技术落地解析
在高频迭代时代,全量回归测试成本高、效率低,常导致关键 bug 漏测。精准化测试通过代码变更影响分析,智能筛选高价值用例,显著提升测试效率与缺陷捕获率,实现降本增效。已被阿里、京东、腾讯等大厂成功落地,成为质量保障的新趋势。