解读2017之Kubernetes+云原生:明天会更好

282 阅读13分钟
原文链接: www.infoq.com

云计算技术发展至今已经 10 多个年头了,从最开始的硬件虚拟化、IaaS、OpenStack、PaaS、容器设置到如今的 Serverless,云计算已经越来约接近应用逻辑。容器实现了应用的分装,方便了应用在不同环境间的迁移,轻量级的特性又使它能够消耗更少的资源而带来更大的便利。但是独木难支,容器如果在单节点上运行并不能发挥它的最大效益,容器编排领域在 2016 年就已经成为了兵家必争之地。在新的一年来临之际,本文带您一起梳理 2017 年 Kubernetes 及云原生的发展,并对其在 2018 年的趋势作个展望。

Kubernetes

Kubernetes 是谷歌根据其内部使用的 Borg 改造成的一个通用容器编排调度器,于 2014 年开源,并于 2015 年将其捐赠给 Linux 基金会下属的云原生计算基金会(CNCF);同时它也是 GIFEE(Google Infrastructure For Everyone Else)中的一员,该组织还包括了 HDFS、HBase 和 ZooKeeper 等项目。

Kubernetes 的架构做得足够开放,通过系列的接口,如 CRI(Container Runtime Interface)作为 Kubelet 与容器之间的通信接口、CNI(Container Networking Interface) 来管理网络、而持久化存储通过各种 Volume Plugin 来实现,同时 Kubernetes 的 API 本身也可以通过 CRD(Custom Resource Define)来扩展,还可以自己编写 Operator 和 Service Catalog 来基于 Kubernetes 实现更高级和复杂的功能。

下面让我们来回顾一下 Kubernetes 的技术发展史。

Kubernetes 发展历史

相信凡是关注容器生态圈的人都不会否认,Kubernetes 已经成为容器编排调度的实际标准,不论 Docker 官方还是 Mesos 都已经支持了 Kubernetes,Docker 公司在今年 10 月 16 日至 19 日举办的 DockerCon EU 2017 大会上宣布支持 Kubernetes 调度,就在这不久前 Mesos 的商业化公司 Mesosphere 的 CTO Tobi Knaup 也在官方博客中宣布 Kubernetes on DC/OS。

而回想一下,2016 年的时候,我们还在为 Swarm、Mesos、Kubernetes 谁能够在容器编排调度大战中胜出而猜测。经过不到一年的发展,Kubernetes 就以超过 70% 的市场占有率(据 TheNewStack 的调研报告)将另外两者遥遥甩在身后。Kubernetes 已经在大量的企业中落地,还有一些重量级的客户也宣布将服务迁移到 Kubernetes 上,比如 GitHub、eBay、彭博社等。

Kubernetes 自 2014 年由 Google 开源以来,至今已经发展到了 1.9 版本,下面是 Kubernetes 的版本发布路线图:

  • 2014 年 10 月由 Google 正式开源。
  • 2015 年 7 月 22 日发布 1.0 版本,在 OSCON(开源大会)上发布了 1.0 版本。
  • 2015 年 11 月 16 日发布 1.1 版本,性能提升,改进了工具并创建了日益强大的社区。
  • 2016 年 4 月 16 日发布 1.2 版本,更多的性能升级加上简化应用程序部署和管理。
  • 2016 年 7 月 22 日发布 1.3 版本,对接了云原生和企业级工作负载。
  • 2016 年 9 月 26 日发布 1.4 版本,该版本起 Kubernetes 开始支持不同的运行环境,并使部署变得更容易。
  • 2016 年 12 月 13 日发布 1.5 版本,该版本开始支持生产级别工作负载。
  • 2017 年 3 月 28 日发布 1.6 版本,该版本支持多租户和在集群中自动化部署不同的负载。
  • 2017 年 6 月 29 日发布 1.7 版本,该版本的 Kubernetes 在安全性、存储和可扩展性方面有了很大的提升。
  • 2017 年 9 月 28 日发布 1.8 版本,该版本中包括了一些功能改进和增强,并增加了项目的成熟度,加强了 Kubernetes 的治理模式,这些都将有利于 Kubernetes 项目的持续发展。
  • 2017 年 12 月 15 日发布 1.9 版本,该版本最大的改进是 Apps Workloads API 成为稳定版本,这消除了很多潜在用户对于该功能稳定性的担忧。还有一个重大更新,就是测试支持了 Windows 了,这打开了在 Kubernetes 中运行 Windows 工作负载的大门。

从上面的时间线中我们可以看到,Kubernetes 的产品迭代周期越来越快,从 2014 年开源,2015 年发布了两个版本,2016 年发布了三个版本,到今年一年内就发布了 4 个大版本,Kubernetes 越来越受到关注,同时它也变得越来越稳定,越来越易用。

Cloud Native

在 Kubernetes 出现之前,就已经有人提出了云原生的概念,如 2010 年 Paul Fremantle 就在他的博客中提出了云原生的核心理念,但是还没有切实的技术解决方案。而那时候 PaaS 才刚刚出现,PaaS 平台提供商 Heroku 提出了 12 因素应用的理念,为构建 SaaS 应用提供了方法论,该理念在云原生时代依然适用。

现如今云已经可以为我们提供稳定而唾手可得的基础设施,但是业务上云成了一个难题,Kubernetes 的出现与其说是从最初的容器编排解决方案开始,倒不如说是为了解决应用上云(即云原生应用)这个难题。CNCF 中托管的一系列项目即致力于云原生应用整个生命周期的管理,从部署平台、日志收集、Service Mesh(服务网格)、服务发现、分布式追踪、监控以及安全等各个领域通过开源软件为我们提供一整套解决方案。

Google 通过将云应用进行抽象简化出的 Kubernetes 中的各种概念对象,如 Pod、Deployment、Job、StatefulSet 等,形成了 Cloud Native 应用的通用可移植的模型,Kubernetes 作为云应用的部署标准,直接面向业务应用,大大提高了云应用的可移植性,解决云厂商锁定的问题,让云应用可以在夸云之间无缝迁移,甚至用来管理混合云,成为企业 IT 云平台的新标准。

Cloud Native Landscape

github.com/cncf/landsc…

日益强大的社区

Kubernetes 已成为 GitHub 上参与和讨论人数最多的开源项目,在其官方 Slack 上有超过两万多名注册用户(其中包括中文用户频道 cn-users),而整个 Kubernetes 中文用户群可达数千名之众。

目前关于 Kubernetes 和云原生的图书也已经林林总总,英文版讲解 Kubernetes 的书籍有:

  • The Kubernetes Book
  • Kubernetes in Action
  • Kubernetes Microservices with Docker
  • ……

关于云原生架构的如《Cloud Native Infrastructure: Patterns for Scalable Infrastructure and Applications in a Dynamic Environment》,已发行和 2018 年即将发行的有十几本之多,同时关于云原生开发的书籍也不少,如:

  • Cloud Native Go(这本书已经被翻译成中文,由电子工业出版社引进出版)
  • Cloud Native Python(已由电子工业出版社引进,预计 2018 年推出中文版)
  • Cloud Native Java
  • ……

而中文书籍方面,也在不断增加:

  • Kubernetes 权威指南: 从 Docker 到 Kubernetes 实践全接触
  • Java 云原生(预计 2018 年出版)
  • ……

同时还有一系列开源的电子书和教程,比如我写的 kubernetes-handbook,而 Kubernetes 官方官网文档也即将推出完整的汉化版本,该项目目前还在进行中。

另外,除了图书和官方 Slack 外,国内外还有很多厂商、社区、爱好者组织的 meetup。国外已经有众多的 Kubernetes 和 Cloud Native meetup 定期举办,而在中国,今年可以说是小荷才露尖尖角:

  • 2017 年 6 月 19 日 -20 日,北京,L3 大会(LinuxCon+ContainerCon+CloudOpen China),CNCF 作为云原生应用的联合推广团体,也是由 Google 一手培植起来的强大“市场媒体”,第一次进入中国,华为、Google、Rancher、红帽等公司分别做了关于 Kubernetes 及 Cloud Native 的演讲。
  • 2017 年 7 月 25 日,北京、上海,K8sMeetup,Kubernetes 二周年北京 - 上海 Meetup 双城庆生。
  • 2017 年 9 月 12 日,北京,T11 大会,前 Pivotal 技术专家、现 CapitalOne 高级专家 Kevin Hoffman 做了“High Level Cloud Native Concepts”的演讲。
  • 2017 年 10 月 15 日,杭州,才云科技(Caicloud)、CNCF 与“K8sMeetup 中国社区”联合主办了聚焦 Kubernetes 中国行业应用与技术落地的 KEUC 2017- Kubernetes 中国用户大会。
  • 2017 年 12 月 13 日 -15 日,杭州,云原生技术大会——CNTC,这次会议由谐云科技与网易云共同主办,主要探讨云原生技术与应用,同时还进行了云原生集训。

另外还有由才云科技分别在北京、上海、深圳、青岛等地举办了多场 k8smeetup。

可以看到,国内外在 2017 年都对 Kubernetes 和云原生进行了大力宣传。

创业公司与厂商支持

国外 Google 的 GKE、微软的 Azure ACS、AWS 的 Fargate 和 2018 年即将推出的 EKS、Rancher 联合 Ubuntu 推出的 RKE,国内的华为云、腾讯云、阿里云等都已推出了公有云上的 Kubernetes 服务,Kubernetes 已经成为公有云的容器部署的标配,私有云领域也有众多厂商在做基于 Kubernetes 的 PaaS 平台。随着企业落地 Kubernetes 的日益增长,相关的人才缺口也将显现。CNCF 又就此推出了 CKA(Certified Kubernetes Administrator)和 CKD(Certified Kubernetes Developer),假若在 Kubernetes 的生态构建与市场发展顺利的情况下,该证书将会展现其含金量。

另外在国外还有一大批基于 Kubernetes 的创业公司,如 Kubernetes 创始人之一 Joe Beda 创立了 Heptio(于今年 9 月获获得 2500 万美元 B 轮融资),还有 Platform9、Kismatic、Diamanti、Bitnami、CoreOS、Hypernetes、Weave、NavOps 等,他们中有的提供 Kubernetes 的技术咨询和培训,有的专研某项具体技术,还有一系列基于 Kubernetes 的自动化工具、监控厂商如雨后春笋般出现。

国内这几年诞生了多家容器创业公司,例如 DaoCloud、精灵云、时速云、数人云、灵雀云、有容云、好雨云、希云、才云、博云等,这些厂商有的可能一开始不是以 Kubernetes 作为容器编排调度引擎,但是现在已经全部支持。这些容器厂商全部涉及私有云业务,主要对接金融、政府和电信行业,帮助传统企业进行 IT 转型,虽然很多厂商都声称支持 Kubernetes,但是在 Kubernetes 的易用性上还需要很多改进,单纯基于容器部署应用已经无法满足企业的需求,帮助企业上云、将传统应用改造以适应云的弹性与高效,构建 PaaS 平台,通过基于容器的基础调度平台运行大数据及 AI 应用,成为了这些创业公司的不二之选。

我认为对于特定行业的整体解决方案将是国内容器厂商的主要商业化方式。目前大部分容器云提供的产品大同小异,从云平台管理、容器应用的生命周期管理、DevOps、微服务架构等,这些大多是对原有应用的部署和资源申请流程的优化,没有形成杀手级的平台级服务,这些都是原来容器时代的产物。而容器云进化到高级阶段 Cloud Native(云原生)后,容器技术将成为该平台的基础,虽然大家都声称具有全面的功能,但是厂商在推行容器技术时需要结合企业的具体应用场景。

当前存在的问题

Kubernetes 既然是下一代云计算的标准,那么它当前的现状如何,距离全面落地还有存在什么问题?

如果 Kubernetes 被企业大量采用,将会是对企业 IT 价值的重塑,IT 将是影响业务速度和健壮性的中流砥柱,但是 Kubernetes 真正落地还存在诸多问题:

  • 部署和运维起来复杂,需要有经过专业的培训才能掌握;
  • 企业的组织架构需要面向 DevOps 转型,很多问题不是技术上的,而是管理和心态上的;
  • 对于服务级别尤其是微服务的治理不足,暂没有一套切实可行可落地的完整微服务治理方案;
  • 对于上层应用的支持不够完善,需要编写配置大量的 YAML 文件,难于管理;
  • 当前很多传统应用可能不适合迁移到 Kubernetes。

以上这些问题是企业真正落地 Kubernetes 时将会遇到的比较棘手的问题,针对这些问题,Kubernetes 社区早就心领神会,社区早已设置了多个 SIG(Special Interest Group)专门负责不同领域的问题,而初创公司和云厂商们也在虎视眈眈,觊觎着这份大蛋糕。

2018 年展望

2017 年可以说是 Cloud Native 蓬勃发展和大发异彩之年,Kubernetes 在这一年中连续发布了 4 个版本,从 1.6 到 1.9,Containerd、Fluentd、CoreDNS、Jeager 分别发布自己的 1.0 版本。

在今年 12 月的 KubeCon&CloudNativeCon Austin 会议上,已经为 2018 年的云原生生态圈的发展确定几大关键词:

  • Service Mesh,在 Kubernetes 上践行微服务架构进行服务治理所必须的组件;
  • Serverless,以 FaaS 为代表的无服务器架构将会流行开来;
  • 加强数据服务承载能力,例如在 Kubernetes 上运行大数据应用;
  • 简化应用部署与运维,包括云应用的监控与日志收集分析等。

这些功能是 Kubernetes 生态已有但是亟待加强的功能,它们能够解决我们在上文中提到的当前生态中存在的问题。

2018 年 IaaS 的运营商将主要提供基础架构服务,如虚拟机、存储和数据库等传统的基础架构和服务,仍然会使用现有的工具如 Chef、Terraform、Ansible 等来管理;Kubernetes 则可能直接运行在裸机上运行,结合 CI/CD 成为 DevOps 的得力工具,并成为高级开发人员的应用部署首选;Kubernetes 也将成为 PaaS 层的重要组成部分,为开发者提供应用程序部署的简单方法,但是开发者可能不会直接与 Kubernetes 或者 PaaS 交互,实际的应用部署流程很可能落在自动化 CI 工具如 Jenkins 上。

2018 年,Kubernetes 将更加稳定好用,云原生将会出现更多的落地与最佳实践,这都值得我们期待!

作者介绍

宋净超,曾就职于科大讯飞,在大数据平台架构、云平台的开发运维、容器平台构建方面有丰富经验,目前在TalkingData从事Kubernetes和云原生应用的研究和推广工作。《Cloud Native Go》译者之一,QCon讲师,个人博客 jimmysong.io

感谢雨多田光对本文的策划和审校。