《Devops建设方案.docx》由会员分享,可在线阅读,更多相关《Devops建设方案.docx(21页珍藏版)》请在优知文库上搜索。
1、DevOps建设方案D0实践deployPeratepv*fficiency效能Value价值0PenProgressSecurity开放演进安全目录DevOps建设方案11概述41.1 背景41.2 需求分析41.2.1 质量管理需求:41.2.2 系统运维需求:41.2.3 集成开发需求:51.2.4 产品管理需求:51.3 建设目标51.3.1 自动化51.3.2 可视化61.3.3 流程化62总体设计63详细设计83.1 环境管理设计83.1.1 进程隔离93.1.2 网络隔离103.1.3 文件系统隔离113.1.4 镜像仓库隔离113.1.5 产品实现123.2 配置管理设计123
2、.2.1 源代码配置管理133.2.2 依赖管理133.2.3 应用配置管理133.2.4 环境配置管理143.2.5 产品实现143.3 构建集成设计143.3.1 编译153.3.2 构建153.3.3 部署163.4 测试管理设计173.4.1 自动化测试173.4.2 人工测试174实施步骤185建设实施难点195.1 短期收益与长期收益的平衡195.2 习惯的改变191概述1.1 背景#依据实际情况接受背景#1.2 需求分析1.2.1 质量管理需求:测试人员在需求阶段就接入,产品、开发、测试、运维达到全流程需求透明集成自动化测试平台,在每个环境部署后自动执行测试,包括开发阶段的单元测
3、试、代码质量扫描,安全性测试、压力测试等1.2.2 系统运维需求:支持LDAP用户对接登录;支持用户角色划分,不同角色对应不同操作权限;devops系统本身运行在IinUX系统之上,但devops的作用对象(容器,虚拟机,物理机)应当支持异构操作系统平台(Winde)WS,Iinux);devops的作用对象(容器,虚拟机,物理机)应当支持多种应用框架的开发部署,如PHP,JAVA,ruby等,具体结合公司现有开发部署环境梳理;自动对接公司现有基于ZabbiX的监控系统,服务上线自动注册,服务下线主动注销;项目需求中应包含对部分系统的微服务化改造,以及对于未来建设项目的微服务化建设建议和具体模
4、板框架推荐;将自动化测试框架、devops平台工具组件运维及相关培训纳入项目需求;devops系统须与公司现有云平台二期的虚拟机及容器对接,基于云平台二期实现;1.2.3 集成开发需求:所有的开发人员需要在本地机器上做本地构建,然后再提交的版本控制库中,从而确保他们的变更不会导致持续集成失败。开发人员每天至少需要从版本控制库中更新一次代码到本地机器。每次构建都可以生成可发布的产品。修复失败的构建是优先级最高的事情。每次代码递交后都会在持续集成服务器上触发一次构建每人都能通过系统,清楚正在发生的状况。统一的代码库、自动构建、自动测试、自动部署1.2.4 产品管理需求:集成需求管理功能,能便捷提交
5、需求,需求评估,审核,监控需求处理流程,对需求变更进行跟踪管理;监控产品开发、测试、发布整体处理流程与进度。1.3 建设目标为信息服务部内的数据组、综合平台组、运行平台组、服务营销平台组、移动开发组等开发小组提供统一的研发构建测试平台。打破开发、测试、运维、产品、运营之间的壁垒,适应快速变化的市场需求,提升软件的交付效率与交付质量。1.3.1 自动化自动化是持续交付的基础能力,目标是加速代码提交到部署上线的过程,主要包括构建、环境管理、应用部署、测试这几方面的自动化。1.3.2 可视化可视化能力是独立于组织文化、持续交付、技术运营之外,贯穿始终的一种能力,可视化的意义在于通过数据度量DeVOP
6、S能力、推动持续改进、便于团队基于全过程的数据分析与协作、帮助定位故障等。1.3.3 流程化在考虑流程类的问题时,一些耗时较长的流程,完全人工类的流程,一般效率低下,且质量难以保证,持续交付的逐步深入会通过自动化替代这些人工流程的存在。同时一些审批类的流程,代表着授权与责任,有其存在的价值和意义,不能轻易被去除或打破。2总体设计XX云DeVoPS解决方案以CCOS容器云操作系统为基础,实现从项目需求提出到产品设计、研发、编码、编译、构建、部署、测试、运维的全生命周期管理。采用微服务化的设计思路,各功能模块相互依赖而又相互独立,不但具备单独发布升级的能力,而且各功能模块留有公共的API接口,结合
7、客户已有的研发工具、流程,实现资源的最大化整合,不额外增加客户对工具的学习、使用成本。总体功能结构如下图所示:项目产品构建部署流水线团队版本管理构建定义滚动更新发布库计划需求管理构建执行动态伸缩I发布流水1.线任务立项管理代码质蚩部署设计集成流水通知产品运营代码库异构环境多中心总结竞品分析分枝/tag组件运维蛉收ECOS容器云平台产品实现以Drone为基础,合理的利用docker容器技术来构建和部署应用,结合容器的云原生特性构建强大的持续交付平台。Drone引入pipeline的概念,整个build过程由多个stage组成,每一个stage都是docker容器。各Stage间可以通过共享宿主机
8、的磁盘目录,实现build阶段的数据共享和缓存基础数据,实现加速下次build的目标。各stage也可以共享宿主机的docker环境,实现共享宿主机的dockerimage,不用每次build都重新拉取baseimage,减少build时间。多个build可以并发运行,单机并发数量由服务器CPU数决定。其中由开发者负责打包image和流程控制,docker-in-docker,一切都在掌握之中。相比jenkins的好处是,所有的image都是开发者提供,不需要运维参与在Cl服务器上部署各种语言编译需要的环境。然后直接通过docker-compose的方式部署应用。实现逻辑如下图所示:项目管理工
9、具3详细设计3.1环境管理设计DeVoPS工程所涉及到的环境包含开发环境、集成环境、测试环境、预生产环境、生产环境。环境与环境之间的隔离借助CCc)S容器云平台的多租户功能实用户间数据的隔离性。CCOS多个租户共享整个物理集群系统计算资源,并限制各个租户的相互隔离和资源使用配额限制。多租户使用KUbernet6sNamespace实现隔离和限制,不同租户拥有独立用户管理、角色和权限控制,隔离的进程、网络、文件、域名和镜像仓库系统。租户共享主机资源,共享网络带宽,共享基础存储和镜像仓库;租户之间进程隔离,网络访问相互隔离,存储访问相互隔离;限制租户对计算资源,存储资源和对象创建数量的限制;以租户
10、为单位对实际使用的计算资源,存储资源消耗和对象创建数量进行计费。不同的租户,共享底层IT资源(计算、存储,网络),但必须保证租户之间的服务运行性能以及数据c和网络安全,所以需要对不同用户之间运行的容器进行严格限制和隔离。限制的内容包括:容器的CPU和内存需求,容器的特权模式,容器的网络HoSt模式,以及容器相关的能力。隔离的内容包括:程序进程,网络访问,文件系统,主机域名,用户操作。3.1.1进程隔离docker使用LinUXkernelnameSPaCe实现隔离。其中Pid、net、ipc、mnt、UtSxuser等namespace将container的进程、网络、消息、文件系统、UTS(
11、UNIXTime-sharingSyStem)和用户空间隔离开。并在创建容器时严格限制容器所拥有的能力(特权)模式和网络模式运行,防止访问内核权限和主机网络,实现对应用的进程隔离和安全控制。pidnamespaceroot pid namespacepid namespace Xpid 3 (pid 1) *pid 4 (pid 2)不同用户的进程就是通过Pidnamespace隔离开的,且不同namespace中可以有相同pido所有的LXC进程在docker中的父进程为docker进程,每个Ixc进程具有不同的namespace。同时由于允许嵌套,因此可以很方便的实现DOCkerinDoc
12、keropid1(pid1)IIIpid2(pid2) Black:therealpid Red:thepidprocessusegtidtoget有了pidnamespace,每个namespace中的pid能够相互隔离,但是网络端口还是共享host的端口。网络隔离是通过netnamespace实现的,每个netnamespace有独立的networkdevices,IPaddresses,IProutingtables,procnet目录。这样每个container的网络就能隔离开来。docker默认采用veth的方式将container中的虚拟网卡同host上的一个dockerbridg
13、edockerO连接在一起。1.1.2 网络隔离通过netnamespace实现容器之间的网络隔离,但同一个租户容器之间需要互访,不同租户之间的网络进行隔离,每个租户只能访问自己的网络资源,不可访问其他租户的网络资源。默认使用Calico实现容器之间的互联互通,但在创建租户时自动创建租户对应的Calicoprofile,通过Calicoprofile利用LinUXiPtables、ACLS特性,实现不同租户的网络隔离和访问安全控制。1.1.3 文件系统隔离文件系统分为本地文件系统和网络文件系统。本地文件系统:创建容器时挂载本地文件系统,则用户需要指定文件系统需求的容量和容器中挂载的路径,但不能
14、指定主机文件路径,必须由调度系统自动创建目录进行挂载,防止文件被多个容器挂载,实现文件系统的隔离网络文件系统:依赖KUbemeteSPVC和命名空间绑定,实现不同租户的网络隔离。1.1.4 镜像仓库隔离集群安装完成后,系统自动在不同数据中心部署镜像仓库的主从,并全数据中心同步,以实现各租户对镜像仓库的需求;各个租户镜像相互隔离,镜像仓库通过三个级别的镜像仓库访问控制实现租户的访问隔离:公共镜像仓库:默认以/image)路径表示,公共镜像仓库任何租户可访问,提供基础镜像的公共访问;集群管理员可管理公共镜像仓库。租户仓库:默认以namespaceimage)路径表示,只有该租户中的用户可以访问,具有该租户仓库管理权限的用户可以psh镜像到命名空间镜像仓库中,实现租户内仓库的共享。个人镜像仓库:默认以serameimage)路径表示,供个人使用(需要具备相应的PUSh权限才会开通),个人用户名需要排除特殊名字的注册。产品实现:每一类环境配置一个管理员,具体的环境权限由管理员设置。JaatJ11nS35认证授仅用户管理用户类型工作空间用户亘支姓名告注asdi23as