基于 K8S 构建数据中心操做系统

在 12 月 22 日 ECUG 的下午场 ,七牛云容器计算部技术总监袁晓沛为你们带来了主题为《基于 K8S 的 DCOS 之路》的精彩分享,向你们介绍了七牛容器云目前 K8S 的情况和产品思考。html

同时,他在会上讲述了如何经过七牛公有云业务容器化的操做实践,组建 K8S 翻译团队,对《Kubernetes in Action》这本书进行落地的翻译。数据库

如下是演讲内容的实录整理。编程

你们下午好!我是七牛云容器计算部技术总监袁晓沛, 我今天想分享的是七牛云基于 K8S 的 DCOS 之路,结合一些实践经验,讲一下咱们在其中作的事情和产品层面的思考。后端

我今天会先讲一下七牛云内部业务容器化历程,而后讲基于 K8S 的 DCOS,七牛云在作一个更强大的 K8S 发行版,它体如今三个地方:一是底层技术的稳定性。作一个更强大的 K8S,技术稳定性是用户第一时间关注的;二是功能的扩展性。若是一个系统不知足需求时,就要考虑它的扩展性怎么样,能不能基于开放性接口实现;三是易用性。K8S 是很是复杂的系统,如何保证它的运维、使用很是简便,让终端用户能够快速入门。最后,会简单介绍 K8S 周边的生态,包括上下游及应用生态,以及应用生态丰富性。api

七牛云内部的容器历程

七牛云从 2014 年开始作容器,当时启动的项目叫 QCOS,它的全称是「Qiniu Cloud Operating System」。当时咱们通读了 K8S 的设计草案,咱们认为本身有能力作这样一个系统。而后咱们从零开始自研了一套容器集群调度管理系统,这个事情作了两年。2016 年末时再回头看,发现一个容器集群调度管理系统要作的事情很是多,要包含 CPU 和内存调度(计算力调度)、网络管理、存储插件、应用相关处理(日志、监控、告警),这是一个很是大的系统,几乎没有几个公司有能力从零开始作这件事情。当时来看,惟一的可能性是谷歌,由于他们有一套 BORG 服务内部多年,而 K8S 是由 BORG 系统设计理念演化过来的。因而咱们在 2016 年末决定全面转向 K8S,并且 100% 兼容 K8S。缓存

如今是 2018 年末,咱们近两年作的是七牛云内部的 5 大业务 K8S 容器化:最先是测试系统,如今七牛云的测试已经全容器化;第二个是多媒体转码系统,也是全容器化的;第三个业务是七牛云 AI 业务,AI 有大量 GPU 机器,须要基于大量数据集作 AI 学习和训练,因此咱们是基于 Kubernetes 之上作了机器学习的平台,咱们为这个平台作了不少扩展功能;第四个是大数据,大数据 Spark 业务在咱们的容器应用市场上,做为一个应用,让用户能够快速部署。安全

咱们在本季度正热火朝天作一件事情,把七牛云最核心的对象存储业务搬到容器云上,这个事情已初步验证经过,正在切量过程当中。到如今为止,七牛云的几大业务线都有大量应用运行在容器之上。从 2018 年下半年已经对一些外部客户输出容器产品,结合七牛云过去五年容器化经验,把咱们好的技术、理念、功能打形成产品开始对外输出。网络

容器化带来了什么

容器化到底给咱们业务带来什么?运维

第一点,员工开心。交付部署效率大幅提高。本来从一行代码的提交到测试再到生产的上线,可能须要几天甚至几周时间,并且上线以后可能会不稳定要回滚,基于容器技术,能够把整套过程用 CICD 和 DevOPS 理念整合到一块儿,一行代码提交以后,可让这行代码变动编译成一个镜像自动跑单元测试,跑完单元测试能够跑代码静态检查,也能够加一些自定义脚本,而后集成测试,最后是 CD 持续部署,线上链接起来。发布周期能够从几天、几周到分钟级甚至秒级。这个过程当中,最简单的变化是员工很开心,开发、测试、运维,均可以早点下班,不用等到凌晨四点业务低峰时发布。机器学习

第二点,用户开心。运维排错效率大幅提高。一个容器平台默认就提供了容器的监控,系统级别 CPU 和内存监控、入口级别的监控报警,甚至日志也能够自动收集起来。一个写得很通常的后端应用运行起来以后,平台都能为它提供一些基础的日志监控,若是业务作一些适配,业务级的监控也能够被收集到,这些整合起来就是全链路的日志监控和告警机制。若是线上出现问题,基于监控日志和告警,能够大幅下降从错误发现到错误解决的时间,下降 MTTR ,提升应用的可用性。应用的可用性提升了,客户受到的影响就会愈来愈小,本质上来说是客户更开心了。

第三点,老板开心。由于机器资源的利用率大幅提高。在一个数据中内心能够用一个 K8S 集群来管理全部物理资源,让全部业务在一个计算资源大池子里作业务混部,而后利用率提高了,从原来不到 20% 的资源利用率,最高能够提高到 60%、70% 以上。对公司来说,下降了企业 IT 成本。从这一点来看,没有老板会不开心。

基于 K8S 的数据中心操做系统

作了这么多事,咱们收获了不少好处,而后就在思考咱们本质上在作什么事情。本质上咱们是在作一个数据中心操做系统。原来机房里一堆机器的管理,本质上是经过机器 IP 再加一个 SSH 端口号,不管使用什么部署工具,都是把一些应用推上去,更改配置,启动这个应用,是经过 IP 地址和 SSH 端口跟这些机器打交道。但有了容器以后,跟数据中心交互的接口彻底发生了改变。咱们使用编程化接口,操做和调度数据中心的 CPU 和内存,不用在乎业务到底被调度到哪一台机器上,甚至能够用 API 的方式操做日志、监控、报警。因此,咱们是在作一个数据中心操做系统。

K8S 已是一个数据中心操做系统了,而咱们是在作一个更强大的 K8S 发行版。

更强大的 K8S 发行版,须要具有什么呢?

咱们总结了三点:第一是底层技术的稳定性,商业公司站在背后支持,保证技术是更稳定的;第二是丰富的扩展功能;第三是易用性,对于平台运维来说是否易部署、扩容、升级,对于终端用户来说是否容易使用,都是相当重要的。此外,一个完善的操做系统,除了自身功能以外,还须要提供必备的上下游服务和上层应用。

底层技术稳定性方面,咱们天天都在迭代。这是咱们近一两个月在作的事情,咱们在网络模型上,etcd 分离部署,与 K8S etcd 互相不影响,使用 etcd V3 API 做为数据库,性能提高 2 倍;使用 BGP route refletor,关闭 Full Mesh,大幅提高性能。

举例说明,你们可能都不会太关注的点:KubeDNS,社区默认版本性能只有 99.5%,意味着不工做时候可能超过 3 个小时。咱们作了一系列改进能够把 KubeDNS 可用性从 99.5% 提高到 99.999%,每月不可用时间不超过 25 秒。实际上过去三个月不可用时间是 0。

有人可能会问七牛云为何在这么小的事情上较真,作这么多事情。对容器云团队来说,每个组件都是这种心态作优化。由于用户打到七牛云的每个请求,存在咱们这里每个文件,都是对咱们的信任。咱们对用户有一个承诺,咱们要让系统尽无限可能接近 100% 的可用性。

扩展方面,系统层面针对 Nvidia GPU 监控和调度作了优化,定制调度器确保 GPU 的调度性能,开发了 K8S 集成 AlluXIO 存储插件,经过这个插件可让 AI 训练使用 AlluXIO 缓存海量文件。第二,咱们在静态本地磁盘上启动了一个新的 Kubernetes SIG,基于这个不少人能够一块儿贡献代码,把静态本地磁盘供给作好。在网络上基于 vlan/vxlan 实现 SDN,支持二层网络隔离。

这是基于 CLI 的日志自动收集方案。主要缘由是一个容器每每须要往多个目录打日志。但按照容器标准,只能往标准输出和标准错误里打日志,这样很难收集扩展多个目录的日志。CLI 是 Container Logging Interface 的缩写,它让整个方案可以对接任何现有的日志方案,好比能够对接七牛云的 Pandora,也能够支持 ELK、Splunk。

这是日志收集方案的使用方式。

做为一个容器平台或者数据中心操做系统,很关键的一点是易用。

平台的运维很关键,不少容器产品关注的是这个产品很好用,但实际上容器平台的运维更难,由于 K8S 管理着整个数据中心,业务大了以后,K8S 平台自身的运维更重要。

第一是部署、扩容、升级的便捷性。咱们的目标是 5 分钟部署一个新集群,秒级扩容一个新节点。K8S 是开源生态,开源有不少安全性问题,咱们如何在升级新版本时,让当前集群上的业务不会影响,这是一个很是关键的因素。

第二是集群信息可视化,包括宿主机、系统关键组件,L七、L4 入口的监控、日志、告警。如何经过平台监控信息发现机器或者系统组件、入口层面的问题,经过平台快速定位业务问题,这都是集群可视化要作的事情。

第三是常见故障自动化处理,咱们实现了一种机制,可让故障自动探测、一键解决。

这是平台运维管理界面。

这是具备自动化运维处理机制的工具,每一台节点上都会运行这个工具,它能作到自动化探测,插件方式都是自动化探测已知现象,把这些上报到 K8S api-server,采起措施自动修复一些问题。

从用户使用层面讲易用性,咱们是以项目为中心,对用户有强大的管控能力。传统项目都是先有虚拟项目再有人,而后是机器和软件。咱们彻底按照这样的方式管理项目,把 K8S 资源空间当作一堆资源,往项目里添加。项目里可能有项管、运维、测试、开发,每个不一样的人决策权限不同。

而后是强大的应用编排能力,不少 K8S 平台为了追求编排的易用性而牺牲了兼容性,等用户对这个平台和 K8S 足够熟悉以后,用户可能就会要求平台和 K8S 彻底兼容,意味着经过 K8S API 建立的资源必须经过平台显现出来,或者经过平台建立、编排的资源能够经过 K8S API 操做,正向和逆向均可以,因此咱们产品 100% 兼容原生 K8S,而且兼容 kubectl。

最后一个是强大的镜像空间管理能力,国外镜像同步、镜像加速、私有镜像托管;C2I:基于代码、单元测试、静态检查,构建可交付镜像;镜像检查,基于一些工具检查镜像,看它里面是否有存在安全风险的东西。

以上是用户易用性上须要考虑的点。

这是用户使用产品的界面,应用编排、应用列表、应用服务编排。

一个强大的数据中心操做系统,还须要一个比较完善的周边生态。持续部署和 Kubernetes 打通,上面能够经过 HELM,右上角是 ISTIO,基于 ISTIO 作流量管理功能,好比灰度发布、熔断、链路追踪,帮咱们快速发现问题。

七牛云基于 K8S 实现了常见的数据库中间件服务,包含 MySQL、MongoDB、Redis、RabbitMQ。这些运维工具本质上就是由 Operator 实现的高可用服务,支持一键部署,能作按期备份和恢复,保证数据的可靠性。本质上是把公有云的 RDS 服务搬到 K8S 上,让非公有云用户使用高质量的数据库服务,大幅度减轻 DBA 的工做负担。

这是七牛云当前在 K8S 社区的全球排名,咱们排第 26 名。可能会有人问,到底有多少人在开源,个人回答是咱们没有一我的专职作开源,也没有把作开源当成很刻意的事情,是在维护 K8S 的稳定性、扩展功能、提升产品可用性的过程当中,贡献一些东西。由于咱们受益于开源,因此这些改进,新的功能咱们都尽可能直接贡献到开源。但咱们不作三件事情:不去改拼写错误、增长单元测试、改注释。

这是七牛容器云团队和七牛云内部一些小伙伴翻译的一本书,书的名字是《Kubernetes in Action》(中文版购买连接:https://item.m.jd.com/product/12510666.html),主要教咱们如何在 Kubernetes 上部署分布式容器应用,这本书的做者是 Marko Luksa,他是红帽 OpenShift 工程师,这本书由七牛云 CEO 老许亲自做序。翻译过程当中,七牛容器云团队根据实际应用经验,把这本书翻译得尽可能准确,而且通俗易懂。

Kubernetes 是希腊文,本意是舵手,带领一条船到达正确的地方,但愿这本书像舵手同样,能在你们学习 K8S 的过程当中带来一些帮助。

(Marko Luksa 在 ECUG Con 2018 的现场分享片断)

关注公众号:七牛云 点击本文文末「阅读原文」,获取

Marko Luksa

完整版精彩演讲 DEMO!

(为保证视频及时获取,请将「提交成功」页面截图发送至公众号后台)

相关文章
相关标签/搜索