当前位置: 首页 > 科技观察

小米运维动态部署与资源管理实践

时间:2023-03-17 18:02:21 科技观察

本文为WOT2016互联网运维暨开发者大会现场干货。三角洲JW万豪酒店盛大举行!在本次WOT峰会上,黄霁老师分享了《小米运维动态部署和资源管理实践》,主要内容包括小米运维在业务部署中从手动到自动化的设计与集成,Docker/Mesos等热门技术如何使用,走了哪些弯路放大过程中的拍摄,以及小米运维实践的分享。【讲师介绍】黄霁,小米运维部高级运维研发工程师,负责消息和推送系统的运维管理,负责小米资源管理和系统的设计开发。动态调度和部署相关系统。丰富的系统优化经验。在小米运维发展演进之初,黄继先展示了小米整个运维自动化的发展演进,如图1所示。图1:小米运维发展演进黄继先指出小米服务树的概念早在几年前就提出了。目前前三部分:全量部署、监控管理、资源定位已经成型并开始使用。这次主要讲机器管理,资源隔离,动态调度。为什么要做资源管理和资源隔离,做到动态制动、动态维护,无需人工干预,是整个运维管理中的一个目标。具体来说,运维的三个基本点:监控、业务、主机。这三部分的关系如图2所示:图2:需求和目标小米的目标是完全自动化三者之间的部署,这样就不需要资源预算,也不需要做人为的规划,比如设置机器组是放在前端还是后端,只需要告诉机器前端去部署即可。这样就可以摒弃资源预算和计划,提高部署效率,实现容量调整,故障快速自愈。PaaS与运维黄霁首先谈到了PaaS的优缺点。优点:1.对业务透明,是免费的资源池。2.PaaS的模块化基础设施和组件易于扩展。3、自然规范有利于发展。缺点:1、对架构标准化要求高。2.业务种类有限。它只是打开了一个业务逻辑层。之前的界面和存储都固化了。一般来说,只允许访问部分HTTP服务。3、运行环境有特定要求。所以,我们真正需要的是一个从运维角度来看的PaaS平台。从小米私有PaaS平台的运维角度来说,PaaS应该像一个大杂货店或者一个大水池。在这个池子里,不管是什么服务类型,都可以把服务放在前端和存储。并且它具有构建集群、扩展和自愈的能力。具体方案选择如图3所示。图3:方案选择黄骥提到,方案中的很多功能都是开源的,比如动态主机选择、自动集群创建、集群维护、自愈能力等。接下来,黄骥总结了三个应用中的实际问题。.业务无缝迁移。其性能和效率必须达到物理机的水平,才能被业务人员接受。.它应该与周围的系统相结合,例如服务树、监控和服务。.保证整个动态系统中资源的正确性。硬件效率Docker网络模式决定了Container的适用性。Docker的第一种模式是HostOnly。HostOnly只是使用了Docker的一些简单资源,是一个偏函数。不能把整个容器当作一个纯数据环境,所以不符合要求。第二种模式是使用NAT。NAT虽然可以解决上述问题,但它也有两个局限性:一是管理和维护容器中物理机和IP的预测关系,二是针对一些对网络延迟特别敏感的服务。运行时间在物理机基础上最多可以增加30%,这是不可接受的。解决方案1、将Docker自身的网卡槽和物理主机的网卡调整为一个模块。为了区分是物理机还是容器,在调制过程中让网络设备配合,放置一个trunk。这样,物理机使用一部分网络地址给容器使用,另一部分网络地址给容器使用,这部分容器的网络地址分配可以方便的分配给容器DHCP服务器。无论容器在何处启动,都可以访问。容器。这解决了容器独立性的问题。2.直接在物理机上打开LVM。这样做的好处是读写设备的效率和物理机是一样的。也就是说,LVM效率没有损失。而且,由于设备的体积有限,存储空间自然也是有限的。3、直接修改Docker,使其在每次启动容器时生成网络输出限制规则。至此,整个容器的环境就是一个比较完整的宿主环境,各方面的资源都比较合理,可以有所限制。新的编译发布方式,业务编译后,生成Docker镜像,用Docker分发。图4:编译发布其中baseimg是必须的,可以使用通用的通用组件,上层组件可以替换下层组件配置。环境依赖和外围系统连接:init放在容器中,不仅解决程序启动业务,还负责设置crontab,后台程序启动stats,收集一些内部信息,注册lvs,引流,或者注册xbox,mysql等动态实例派生问题在解决了动态任务分配与管理、容器环境隔离、业务平滑迁移、与其他系统对接等问题之后,接下来的问题就是一些动态实例派生问题。比如容器IP:如何登录容器是用户一直关心的一个点,比如人工干预管理、白名单授权、HealthCheck等。二是数据一致性保证,即数据循环利用。数据一致性恢复也需要启动容器,CIP的上报可以总结为图5。图5:CIP上报的过程好处是真实性。业务与IP的对应关系不可伪造,为第三方验证带来极大便利。这样一来,登录问题自然就解决了。同时在这个过程中,也解决了数据的一致性恢复,因为在整个系统中,Marathon提供的信息是最完整最准确的,其他系统中的数据可以和Marathon的数据进行对比,通过这样的Form来保证所有系统的数据最终与动态部署保持一致。DeploymentControl图6:DeploymentControl这是定义管理任务、生成部署任务、控制部署、整合信息后提供自动化接口的过程。用户界面图7:用户界面绿色表示在线,白色表示不在线。管理员可以通过这个界面看到整个集群所有节点的状态。如果一个节点如负载变化或CPU反馈高,会在这个节点上做一些颜色变化。现状与展望2014年至今,小米已有2套集群,70多个节点,5个服务在线(其中2个100%加载),321个常驻实例,主机利用率提升约50%到60%。.未来小米会提供有状态的服务,包括数据存储、状态维护、动态资源调整,以及一些类似VPC的部分。另外,容器的可扩展性也要扩展,增加一些数据源,比如日志分析结果。***,黄骥表示,小米运维团队的理念口号是OpsMakeNoOps,将运维日常工作尽可能自动化,减少人工运维操作。