华为资深工程师孙远 - 利用Docker生态开源软件构建容器化测试平台
2020-02-27 257浏览
- 1.利用Docker生态开源软 件构建容器化测试平台 孙远 华为中央软件院
- 2.我的经历 美国风河系统公司 • 负责linux build system、analysis tools、workbench测试工作。 华为中央软件院 • 带领团队进行容器OS、docker测试工作,并参与项目过程改进。 • 参与开源社区:补充ltp社区user namespace特性测试用例和docker 社区中的测试用例。 • 完成《docker进阶与实战》测试章节的编写工作。
- 3.内容 •什么是开源软件 •移动终端测试容器化 •选取开源软件的标准 •中间层软件测试容器化 •Devops与容器技术所涉及的开源软件 •内核测试容器化 •Devops及容器云产业状况 •硬件驱动测试容器化 •工程能力容器化沙盘 •长稳测试容器化 •测试工具容器化 •在开源社区的测试中成长 •源码编译容器化 •开源软件问题求助方式与注意事项 •应用层软件测试容器化 •参与开源社区的策略
- 4.华为中软院业务欧拉部业务介绍 • 服务器操作系统 • 实时操作系统 • 编译器 • 终端操作系统 • Linux内核 • 容器技术
- 5.什么是开源软件? 开源软件是一种源代码免费向公众开放的软件,任何团体或个人都可以在其License的 规定下对其进行使用、复制、传播及修改,并可以将该修改形成的软件的衍生版本再 发布。 —来源于 OSI开源软件定义 特点:享有版权、特定的License、源码开放、无许可费、可自由使用 参与开源的收益 •对于公司:加快产品上市周期、降低软件维护成本、保障质量、了解业界友商动态 •对于员工:问题求助的渠道、提升技能、开阔视野、积累人脉拓宽发展通道 License •BSD类:允许随意商业集成 •MPL类:修改后的源代码需公开 •GPL类:传染性/商业不友好
- 6.选取开源软件的标准 标准 描述 开源协议 谨慎使用采用GPL协议的开源软件。 软件是否满足业务(包括功能、系统架构、稳定性、略 扩展性、性能、兼容性、安全性) contributors、commits、Pull Requests、Issues、更多的数值代表着有更多的社区活跃度,有利于社区向良性发展。 Fork数值 完善的文档 丰富的文档、wiki页面、指导书将更好的引导我们理解社区所涉及 的项目细节和使用方法。 项目开源贡献者的分布情况 有多个公司参与的开源项目更加可靠,避免项目被某一个公司绑架。 市场占用率及认可程度、成熟度 成熟度高的开源项目软件缺陷少、认可度高,便于商业推广。 项目是否加入开源基金会 加入开源基金会的项目不会被某一团体绑架或者被竞争对手收购。 开源社区接纳新特性的能力 对于提出问题或软件缺陷响应的速度 社区接纳贡献者提交新特性的可能性越高,越有利于引导社区向适 合公司战略的方向发展。 响应速度越快,越有利于用户问题得到解决。 是否有成熟的测试用例和验证方案 这有助于更好的保证软件质量。 社区是否有大公司支持,maintainer、committer、 有大公司商业支持的项目,服务更加优质,同时也具备进一步的商 contributor区分是否清晰。 业合作。
- 7.Devops与容器技术所涉及的开源软件 类别 安全容器 镜像存储 容器引擎 安全 网络 存储 数据库 编排工具 虚拟化平台及工具 容器操作系统 开放容器项目标准 支持容器运行的操作系统特性 开源软件 hyper,clear container,photon… docker-registry… docker, rkt… selinux, seccomp, notary… ipsec,haproxy… ceph,swift… mysql,mongoDB… mesos,kubernetes,swarm,compose,marathon… docker machine,virtualbox, openstack… rancheros,coreos,vmware photon,snappy ubuntu core,redhat atomic host… runc,image-spec,image-tools,runtime-spec,runtime-tools… kernel
- 8.Devops及容器云产业状况 分类 容器商用公有云 平台 其它外围工具 编排工具 容器引擎 容器OS 描述 亚马逊云、docker云、XX 云… 安全、存储、监控等 mesos,kubernetes,swarm docker, rkt… rancheros,coreos,vmwar e photon,snappy ubuntu core,redhat atomic host… 现状 大小企业并存,同质化严重,且竞争激烈,属 于群雄逐鹿阶段。企业需要拥有充足资金、核 心技术和对生态准确的把握,才能在市场中立 足。市场将最终形成寡头。 中小企业的机会点 有实力的公司在角逐,三分天下的局面 寡头,技术门槛相对不高,但需要完善生态 寡头,有实力的公司参与 OCI标准项目 底层内核 runc,imagespec,runtime-spec kernel 标准制定的战场,大公司博弈的战场 技术门槛高,大公司博弈的战场
- 9.Goal of DockerGoal:Build, Ship, and Run Any App, Anywhere. Build Ship Compose your application from microservices, without worrying about inconsistencies between development and production environment. Store and distribute your docker images in registry services. Run Deploy scalable services, securely and reliably on a wide variety of platforms. Any App Anywhere
- 10.Docker与Windows、ARM64 •Docker可以运行在Windows Server 2016和Windows 10。 注:除非使用硬件虚拟化技术,Windows与Linux中的 Docker镜像无法相互使用。 •Docker已经可以在ARM64中平稳的运行。 注:Arm64中的Docker无法启动x86的Docker镜像。
- 11.Docker基础知识-容器状态
- 12.Docker基础知识 容器、镜像、 仓库交互关系
- 13.Docker基础知识-资源管理 • Memory • CPU 1. --memory 1. --cpu-shares 2. --memory-swap 2. --cpu-period 3. --memory-reservation 3. --cpu-quota 4. --memory-swappiness 4. --cpuset-cpus 5. --cpuset-mems • IO 1. --blkio-weight 2. --blkio-weight-device 3. --device-read-bps 4. --device-write-bps 5. --device-read-iops 6. --device-write-iops blkio cpu cpuacct cpuset device freezer memory net_cls Cgroups子系统
- 14.Docker基础知识 • 数据卷 -v, --volumes-from • 容器网络 --net=bridge,none,container:name_or_id,host• 容器仓库 search, pull, push ${hub_address}/${namespace}/${image/tag}
- 15.构建测试专用镜像仓库 测试工 具镜像 基础 镜像 典型测试 场景镜像 … 镜像 扫描 工具 (cve漏 Hub master 洞) Hub mirror Hub mirror Hub … mirrorhttps://github.com/docker/distribution改造distribution开源软件 不足的方面需要进行改造 •缺少多租户鉴权 •后端存储驱动不全 •缺少安全加固 •无法支持镜像站点 改造 •添加多租户鉴权 •补充后端存储 •添加镜像扫描特性,确保镜像安全。 •添加镜像站点
- 16.基于开源软件RancherOS的改造 OS … Ubuntu console Redhat console 定制os console File system and tools 8.4MB … User docker (upstream 13.7MB docker) udev dhcp … console User docker System docker 4MB System docker Kernel drivers Kernel core 11.7MB 4.2MB Linux Kernel Host OS Server •资源占用少 •便于系统升级回滚 •可以自主定制和更换os console 不足的方面需要进行改造 •代理能力不足 •启动需要网络支持,无网络情况下无法启动 •缺少安全加固 改造 •适配到公司内部网络 •将默认console镜像内置,使其启动不依赖于网络 •添加安全加固特性
- 17.Docker镜像
- 18.Docker成功的原因 • 标准的开发环境、更快的交付和部署。 • 内核级虚拟化、更高效的资源利用。 • 快速的迁移、部署和弹性伸缩。 • 利用Dockerfile可进行简易的配置修改。 • 优质的生态工具。
- 19.Moby与Docker
- 20.云模型
- 21.容器云 •IAAS (Infrastructure as a Service) •PAAS (Platform as a Service) •SAAS (Software as a Service) •CAAS (Container as a Service) •TAAS (Test as a Service)
- 22.工程能力容器化沙盘 测试工具 服务器 操作系统 CI工具容器化 虚拟化 CI工具容器化 实时操 作系统 CI工具容器化 Web 终端 Linux 内核 Web 服务端 渗透 测试组 手机测试工具 Benchmark平台 互联网工具 selenium CI工具容器化 CI工具容器化 安全扫描工具 源码编译 编译测试 编译测试 编译测试 编译测试 编译测试 编译测试 应用层 中间层 内核 硬件 Hadoop场景 兼容性测试 兼容性测试 外围包测试 外围包测试 内核特性应用 开源测试套 外围包测试 内核长稳测试 内核长稳测试 内核长稳测试 内核功能验证 内核功能验证 内核功能验证 硬件驱动测试 硬件驱动测试 chrome Web应用测试 微服务测试 内核长稳测试 内核功能验证 适用容器云 根据场景而定 不适用容器云 备注:容器云意味着其配置有一致的内核,相近的硬件资源。容器云和容器是两个概念。不适用容器云的业务并不代表不能使用容器进行业 务改造。
- 23.测试平台 功能测试 长稳测试 自动化测试用例 安全测试ç√ 性能测试 可靠性 测试 … 测试场景 测试代码 维护 测试工具 Test task in container √Test task in container …Test task in container 测试分析 度量 测试缺陷 跟踪 pipeline1 单元测试 pipeline2 功能测试 集成测试 安全测试 软件测试容器镜像仓库 测试工具 镜像库 编译环境镜 像库 测试场景 镜像√ 库 测试用例镜 像库 测试开发环 境镜像库 … 系统测试 安全测试 验收测试 客户化测 试 并发数权限设置 管道设置 进度查询 用户管理 多项目管理 任务管道管理 任务管理 服务器 虚拟机 手机/单板 容器 资源管理
- 24.瀑布式开发 敏捷开发 单体架构 N层架构 物理机 虚拟机 服务中心 Devops简介 devops 微服务 容器 云平台 DevOps一词的来自于Development和 Operations的组合,突出重视软件开发人 员和运维人员的沟通合作,通过自动化流 程来使得软件构建、测试、发布更加快捷、 频繁和可靠。
- 25.Devops 痛点 • 开发:无法复现测试提交的缺陷单、测试周期长、无法有效及时获取 运维环境和数据。 • 测试:开发常常驳回问题单、开发需要不明不易理解、难以了解生产 环境。 • 运维:开发提供的交付件不稳定、迭代速度快无法保障系统稳定性。 客户需求 编码开发 软件测试 运维保障 agile devops devops
- 26.Devops Devops发展的里程碑 Devops的发展 DEVOPS 发展 传统自动化方式 未使用容器技术 CI与静态Docker 手动配置节点和 Docker,无法利 用弹性伸缩。 CI与动态Docker 可自动配置节点 与Docker,进行 弹性伸缩 全面CI与容器云化 容器云化、任务迁 移、回滚、故障自 动修复等特性增强, 引入cloudnative。
- 27.测试场景微服务化 … 0.7 鉴权 0.6 0.5 WEB UI … 1.2 1.1 1.0 存储 … 2.2 2.1 2.0 … 2.2 2.1 2.0 数据 处理 数据 库 … 4.0 3.0 2.0
- 28.容器化改造主要量化KPI •测试环境搭建时间、场景构建时间减少值 •测试执行时间降低值 •测试工具部署效率提升值 •源码编译速度提升值 •资源利用率提升值 •节约物料成本 •减少测试设计时间 •软件缺陷复现概率
- 29.测试工具容器化 • Docker能将测试工具放在一个干净的容器环境中,并且不会影响到主机文件系 统。 • Docker镜像可以赋予系统管理员跨Windows、Mac和Linux服务器的简化管理能 力,当服务端为Linux服务器时,客户端可以是Windows、Mac或Linux架构,这 样会实现更快速的部署和管理。 待补充:https://jenkins.io/solutions/docker/Official Kali Linux Docker Images Released
- 30.测试工具容器化 • 提升测试工具可移植性,屏蔽不同Linux发行版。 测试 工具 部署 •主机中(非被测机) 可以部署一些CI工具、辅助测试工具(如发包工具) 可选用较新的Linux发行版作为主机,通常支持Docker。 •被测主机中 可以适配需要运行在被测主机中的测试工具。(如fio压力测试工具) 一些系统(特别是嵌入式系统)经过裁剪后文件系统较小,不一定默认 包含Docker。需要在前期的需求中明确要包含Docker以保证可测试性。
- 31.软件测试执行加速方式 • 改进算法,优化测试用例。 • 选择功能强大主机,在主机中并行执行测试用例。 • 采用分布式的方式将测试任务下发到不同的主机中并行执 行测试用例。
- 32.源码编译容器化 • 利用Docker快速部署、快速伸缩的特点,在短时间内 获取容器云中大量系统资源支撑测试执行以达到测试Dockerfile:加速的目的。在测试执行完之后,可快速释放所占资 源,减少测试成本。 • 利用Dockerfile梳理编译环境配置步骤,使得环境准 备的步骤更加清晰。 • 不必为每一个发行版的编译环境逐一配置虚拟机,只 需配置好编译镜像即可,可将各业务组的编译资源集 中使用,可以达到提高主机利用率和节约成本的目的。
- 33.源码编译容器化 痛点:资源利用率不高 各项目组单独配置昂贵、性能好的主机进行源码编译。虽然 编译速度有很大提升,但往往在没有转测试的时候,编译主 机经常长时间空闲。很多时候空闲甚至达到90%以上,主机 无法“吃饱”。 解决方案: 建立资源池,利用容器云实现源码编译任务按需分配。可以 减少硬件设备采购成本50%以上。 开发转测试交付由单纯的“源码交付”改为“源码与编译环 境镜像交付”。 使用docker取代chroot来进行资源管理。
- 34.镜像优化-Dockerfile • 镜像用途单一,避免力求大而全。 • 根据功能选择尽量小的基础镜像,如debian。避免造成镜像臃肿。 • 减少镜像的层数,每一个RUN命令对应着一层,可将多个RUN命令合为一个。 • 删除临时文件或缓存文件。apt-get clean • 将内容不变的指令放在前面,或将常用的指令单独打包。 • COPY比ADD更透明。 • 避免安装不必要的软件包。 • 谨慎使用外部源数据。 • 建议使用明确的版本号,如ubuntu:14.04而不是ubuntu:latest。 • 不要将dockerfile与其它无关文件存放在同级目录中。 • 使用.dockerignore文件忽略匹配模式路径下的目录和文件。 • 利用--squash flag合并镜像层。 • 利用docker multi-stage build,docker 17.05版本新特性。
- 35.镜像优化 优化前的镜像 FROMubuntu:latestMAINTAINER Yuan Sun sunyuan3@huawei.com WORKDIR /root RUN apt-get update RUN apt-get install -y gcc RUN apt-get install -y make RUN apt-get install -y vim git RUN git clonehttps://github.com/sunyuan3/netperf.git&& cd netperf && ./configure && make && make install RUN rm -rf /root/netperf CMD ["/bin/sh", "-c", "/usr/local/bin/netserver"]
- 36.镜像优化 1 1. 基础镜像使用了latest标签。 2. 每一个RUN命令会创建一个 新的镜像层,会导致资源浪 费。 3. 安装了不必要的软件包。 4. apt-get操作时间过长,每次 会有重复操作。 5. 对于apt-get,没有做相关的 清除。 6. RUN rm -rf /root/netperf操作 无法减少镜像尺寸。 问题点 2 1. 使用确定版本的镜像。 2. 将同类操作的RUN命令合 并减少镜像层数。 3. 移除不必要的软件包。 4. 将apt-get操作作为不频繁 变更的镜像,或者充分 利用缓存。 5. 添加apt-get clean 6. 将下载文件与删除文件 的操作合入到一行,同 时使用multi-stage特性。 解决方法
- 37.初次优化 镜像优化 FROMubuntu:14.04MAINTAINER Yuan Sun sunyuan3@huawei.com WORKDIR /root RUN apt-get update && apt-get install -y gcc make vim git && apt-get clean docker build -tubuntu:14.04env . FROMubuntu:14.04env MAINTAINER Yuan Sun sunyuan3@huawei.com WORKDIR /root RUN git clonehttps://github.com/sunyuan3/netperf.git\ && cd netperf \ && ./configure \ && make && make install \ && rm –rf /root/netperf CMD ["/bin/sh", "-c", "/usr/local/bin/netserver"]
- 38.最终优化 FROMubuntu:14.04'>ubuntu:14.04