Kubernetes 1.14 正式发布已经过去了一段时间,相信你已经从不同渠道看过了各种版本的解读。

不过,相比于代码 Release,马上就要迎来5周岁生日的Kubernetes 项目接下来如何演进,其实也是一个让人着迷的话题。而作为一个日趋成熟的开源生态,Kubernetes 项目每三个月一次的正式发布,其实正是这个高速发展的技术社区不断向前演进的过程中留下的扎实脚印。

而如果说以“不断提升插件能力和可扩展能力”的 “基础设施开源项目民主化”进程是Kubernetes在2017-2018年的核心主题的话,那么在2019年,这个技术社区的发展脉络又是怎样的呢?

本篇文章,我们将从Kubernetes 1.14 这个承前启后的发布出发,一起来探索一下这个问题背后的技术本质。

Windows 生态成为 Kubernetes 项目的一等公民

Kubernetes 对 Windows 生态的支持,自从这个项目发布起就被提上了日程。不过,作为一个纯粹的 Linux 技术栈支撑的基础设施开源项目,Windows 节点以及 Windows 容器支持真正取得实质性进展,还是要从Kubernetes 项目的插件和可扩展能力在1.6版本后逐渐成熟之后才慢慢步入了正轨。这也很容易理解,Windows 体系与目前主流容器技术栈有着本质性的差异,这就要求Kubernetes项目必须能够提供更高层次的抽象和可扩展能力以支持两种迥然不同的技术栈,并且同现有的Kubernetes生态比如 CNI 和 CSI 完成对接。这部分工作的复杂度和工作量,也是 Windows Node的生产可用从1.13延期到1.14的主要原因。

而在这次1.14的发布中,Kubernetes 的Pod,Service,应用编排,CNI 网络等绝大多数核心能力都已经在 Windows 节点上得到了支持。此外,包括自定义监控指标、水平扩展、抢占和优先级调度等很多进阶功能也都在 Windows 上得以实现。目前,尚不能被支持的功能基本上都是在 Windows 上暂时无法实现的语义比如 Host Network以及其它Linux 内核专属的资源和权限定义方式等。可以看到,Kubernetes 这次发布对 Windows节点和 Windows 容器的支持,较之前相比有了巨大提升,完成度非常高,确实对得起 “GA”这个具备承诺意味的发布用语。而国内外公有云提供商比如阿里云容器服务(ACK)也已经于近期已经推出了 Windows Container 的支持,提供了Linux/Windows应用混合部署的统一管理能力,再一次印证了这次发布的可用度。

不难看到,公有云提供商(比如本次Windows 支持GA背后的微软云团队)作为 CNCF社区的主要推动方之一,实际上一直在整个云原生技术生态中发挥着巨大的作用,逐步促成了将像 Windows 支持这样的实际企业用户诉求带给了一个高速发展的、完全以 Linux 技术栈为核心的基础设施项目。而在未来的发展中,诸如此类的来自于公有云提供商的输入,将会继续在 Kubernetes 项目发展的过程中扮演至关重要的角色,这也会成为更多的企业用户能够从云原生技术生态中获益的一个重要途径。这一点,将会继续成为 Kubernetes 项目与其他基础设施开源项目的最大不同。

Kubernetes 原生的应用管理能力崭露头角

在长期一段时间里,Kubernetes 的应用管理都是由 Helm 这样的第三方项目或者上层 PaaS 来完成的。不过,在1.14之后,Kubernetes 项目本身开始具备了原生的应用管理能力,这其中最重要的一个功能,就是 Kustomize。

Kustomize 允许用户以一个应用描述文件 (YAML 文件)为基础(Base YAML),然后通过 Overlay 的方式生成最终部署应用所需的描述文件,而不是像 Helm 那样只提供应用描述文件模板,然后通过字符替换(Templating)的方式来进行定制化。

而与此同时,其他用户可以完全不受影响的使用任何一个Base YAML 或者任何一层生成出来的 YAML 。这使得每一个用户都可以通过类似fork/modify/rebase 这样 Git 风格的流程来管理海量的应用描述文件。这种 PATCH 的思想跟 Docker 镜像是非常相似的,它可以规避“字符替换”对应用描述文件的入侵,也不需要用户学习额外的 DSL 语法(比如 Lua)。

更为重要的是,上述PATCH 的思想,跟 Kubernetes 项目强调的声明式 API是完全匹配的,整个使用体验跟 Kubernetes API 本身完全一致,没有割裂感(大家可以思考一下为什么 PATCH 才是声明式API 的精髓)。

在1.14发布中,Kustomize 功能已经成为了 kubectl 的一个内置命令,这使得用户使用 Kubernetes 的声明式 API来直接在云端管理、修改和部署海量的应用成为了可能。并且,kubectl 本身的插件机制也在1.14中得到了大量完善,使得 kubectl 结合各种客户端插件已经具备成为应用管理工具的潜在能力。而在这样的演进路线下,Kubernetes 项目对应用以及应用管理的定义也开始清晰了起来,我们可以用如下一幅示意图来简单描述:

在这个 Kubernetes 原生的应用管理体系中,应用描述文件(YAML 文件)居于核心位置。一份应用描述文件,实际上是多个 Kubernetes API 对象的组合,共同定义了这个部署这个应用所需的资源编排和服务编排内容。一旦这样一个描述文件提交给 Kubernetes ,那么接下来它就会通过控制器模式来保证整个集群里的状态与该描述文件的定义完全一致。

这些描述文件的来源,则来自于上层框架或者用户的产出。更为重要的是,所有对应用的操作,都应该通过声明式 API 对该文件进行 Create、Patch 和 Delete 操作来完成,进而触发 Kubernetes 的控制器模型执行预定义的编排动作。

不难看到,在这个模型中,Helm和 Kustomize 其实定义了两种不同的应用描述文件的产出路径和用户体验,也代表了两种同 Kubernetes API 不同的耦合度和抽象程度:一个自成体系,一个则融入到了 Kubernetes的设计理念当中。在1.14发布之后,Kubernetes 社区当前正在探索的这种应用管理体系效果如何,我们不妨拭目以待。

大规模场景下的性能优化工作逐渐提上日程

熟悉 Kubernetes 项目的很多参与者可能都知道,在过去一段时间,Kubernetes 社区对于大规模场景下的性能优化工作的优先级大多不会非常高。这里的原因也比较容易理解,在一个基础设施开源项目发展的早期,扩大生态和完善功能相比于支持更大的集群来说往往要更重要一些。

但在 Kubernetes 的主干功能日趋稳定之后,社区一定会开始更多的关注大规模场景下 Kubernetes 项目会暴露出来的各种各样的问题,这其实依然容易理解:中小规模的用户固然是整个项目取得生态成功的根本,但是通过 Kubernetes 这条路径让更多的沃尔玛、星巴克、国内外的技术独角兽们成为云原生技术的受益者,进而成为公有云上的规模性用户,一定是 Kubernetes 社区要重点考虑的发展方向。

当然,作为一个天然处于“被集成”位置的基础设施项目,Kubernetes 进行性能提升的主要方向,一定优先关注于与上层使用者关系最为紧密的 API 层以及客户端使用场景。当然,这也与 Kubernetes 项目的架构关系紧密:声明式API 的设计围绕着以 etcd 为核心的配置管理机制,使得 Kubernetes 项目天生就是一个重 API 层而轻调度的分布式系统。这也意味着当需要管理的配置信息(即:API 对象)数量巨大时,这一层也是最有可能的暴露出性能问题的领域。

所以,在Kubernetes v1.14中,社区首先从面向最终用户的角度做出了很多优化,比如:kubectl对 API 对象的遍历行为进行了大量的并行化工作。这种看似微小的修改在大规模场景下对kubectl使用者带来的性能提升体验,却是非常显著的。

当然,最重要的工作,还是发生在 APIServer 本身的性能优化上。比如,Kubernetes 的 Aggregated API允许开发人员编写一个自定义服务,并把这个服务注册到k8s的 API 里面像原生 API 一样使用。但是在这个情况下,APIServer 会将用户自定义 API Spec 与原生的 API Spec 归并起来,这是一个非常消耗CPU 的性能痛点。而在v1.14中,社区专门对这个操作的效率进行了细致的优化,最终极将APIServer 归并 Spec 的性能提升了十倍以上。

除此之外,Kubernetes 项目性能提升的另一个重要方向,就是对 etcd 到 APIServer 之间的连接路径的优化和提升上。作为 Kubernetes 项目的配置中心,也是唯一的外部数据依赖,etcd每一次提交操作的数据量和间隔大小,每一个连接的请求和响应周期,都有可能对最终Kubernetes 项目在大规模场景下的性能表现产生影响。阿里巴巴的技术团队在etcd 项目的中一直在持续进行性能调优与提升工作并已陆续发布在了 etcd 的最新版本当中。这些内容虽然不属于 Kubernetes 1.14 发布的一部分,但同样值得我们关注。

可扩展能力和项目稳定性持续提升

除了上述几个领域在本次发布后逐步成为核心领域之外,Kubernetes 项目在过往一直比较重视的几个核心方向,比如,可扩展能力的提升,项目稳定性等,依然是 Kubernetes 项目继续演进的重要旋律。所以在Kubernetes 1.14中,才会出现很多像 “Pod Ready ++” 这样将原本已经成熟的系统特性进一步重构成为可扩展接口的重要变更。在Pod Ready ++ 正式发布后,Kubernetes 用户只需要自己编写一个外部控制器(Controller)就可以非常方便的自定义一个应用从创建到最终可用(Ready) 的标准到底是什么,而不是被强迫遵守 Kubernetes 项目已有的定义方法。这种能力,同样是基础设施开源项目“民主化”的重要体现。

对于这些可扩展能力和项目稳定性提升技术细节的解读,推荐你关注Kubernetes 1.14 发布技术解读文章来做进一步了解,并最终按照这些特性对自己所在组设置的重要程度来定制的升级计划。

总结

Kubernetes 1.14的发布,在这个日趋成熟稳定的项目开源基础设施项目的发展过程中有着重要的承前启后的作用。所以我们会看到,Kubernetes 社区正在几个以往并不太受关注的领域里开始持续发力,甚至有可能会进一步改变整个云原生社区在某些领域的发展方向。这种在日趋稳定的发展历程中不时透露出来的技术革新,也正是这个社区能够持续令人兴奋的关键所在

而放眼当前的云计算生态,国外越来越多的大规模企业级用户比如 Snapchat、Twitter等都已经开始了将自己的整套技术栈直接迁往以Kubernetes为基础的公有云服务上,这正好印证了“云原生”这个关键词的本质含义:在未来云的时代,软件的开发、测试、发布、运维等完整的生命周期,都会基于云来进行。而所谓的“云原生”,其实正在通过一系列技术手段,为广大开发者编制出了一幅能够让软件天然的生长在云上、交付在云上,从而最大程度地发挥出云的价值的技术蓝图。

更多关于云原生技术原理和实践的内容,欢迎关注阿里云和CNCF 官方联合开发的免费公开课《CNCF x Alibaba 云原生技术公开课》。业内一线技术大咖为你剖析云原生技术核心原理与落地实践,期待各位的学习与反馈:https://edu.aliyun.com/roadmap/cloudnative


本文作者:Lei Zhang

原文链接

本文为云栖社区原创内容,未经允许不得转载。

从Kubernetes 1.14 发布,看技术社区演进方向的更多相关文章

  1. Kubernetes 1.14发布:对Windows节点的生产级支持、Kubectl更新与持久本地卷通用版本已全面到来

    今天,我们高兴地宣布Kubernetes 1.14版本的正式亮相,这亦是我们在2019年当中进行的首次发布!Kubernetes 1.14版本由31项增强功能组成,具体包括:10项稳定版功能,12项b ...

  2. 《关于长沙.NET技术社区未来发展规划》问卷调查结果公布

    那些开发者们对于社区的美好期待 2月,长沙.net 技术社区自从把群拉起来开始,做了一次比较正式.题目为<关于长沙.NET技术社区未来发展规划>的问卷调查,在问卷调查中,溪源写道: 随着互 ...

  3. 二进制方式安装Kubernetes 1.14.2高可用详细步骤

    00.组件版本和配置策略 组件版本 Kubernetes 1.14.2 Docker 18.09.6-ce Etcd 3.3.13 Flanneld 0.11.0 插件: Coredns Dashbo ...

  4. 我们为什么要搞长沙.NET技术社区(二)

    我们为什么要搞长沙.NET技术社区(二) 某种意义上讲,长沙和中国大部分内地城市一样,都是互联网时代的灯下黑.没有真正意义上的互联网公司,例如最近发布的中国互联网企业一百强中没有一家湖南或者长沙的公司 ...

  5. 我们为什么要搞长沙.NET技术社区?

    我们为什么要搞长沙.NET技术社区? 感谢大家的关注,请允许我冒昧的向大家汇报长沙.NET技术社区第一次交流会的会议进展情况. 活动过程汇报 2019年2月17日,继深圳,广州,西安,成都,苏州相继成 ...

  6. Cloud Native Weekly | Kubernetes 1.13发布

    云原生一周精选 1——Kubernetes 1.13发布 2——Kubernetes首次出现重大安全漏洞 3——Docker和微软公司推出云原生应用的部署规范 4——谷歌推出beta版本的Cloud ...

  7. 直播:中国HBase技术社区第一届MeetUp

    6月6日,由中国HBase技术社区组织,阿里云主办的中国第一届HBase Meetup将在北京举行,来自阿里.小米.滴滴.360等公司的各位大神会共同探讨HBase2.0的技术革新,HBase在国内各 ...

  8. 中国HBase技术社区第一届Meetup资料大合集

    2018年6月6号,由中国HBase技术社区组织,阿里云主办的中国第一次HBase Meetup在北京望京阿里中心举行,来自阿里.小米.滴滴.360等公司的各位HBase的PMC.committer共 ...

  9. 14个Java技术网站,程序员必备!

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 程序员都是无师自通?这就有点胡 ...

随机推荐

  1. php版本选择

    对应环境,选择对应的php包 apache环境:VC6.TS(thread safe) IIS环境:VC9.NTS(non thread safe)

  2. textarea高度自动增高

    <!--随着textarea 输入内容 自动增加高度--> <script type="text/javascript"> $(".input_t ...

  3. Python的Django REST框架中的序列化及请求和返回

    Python的Django REST框架中的序列化及请求和返回 序列化Serialization 1. 设置一个新的环境 在我们开始之前, 我们首先使用virtualenv要创建一个新的虚拟环境,以使 ...

  4. 【大数据】Hadoop常用启动命令

    Hadoop常用启停命令 最近在装大数据环境,不知由于年纪大的问题还是笨的缘故,老师记不住一些常用命令,在这里就单独记一下Hadoop常用的启停命令.Hadoop常用的启停命令都在hadoop/sbi ...

  5. idea使用docker插件

    idea使用docker插件 接着上一篇docker开启远程访问后,我们就可以通过idea使用docker插件把项目部署到docker了. 首先我们先在idea安装docker插件: 在setting ...

  6. 2019.9.28 csp-s模拟测试54 反思总结

    咕咕咕的冲动如此强烈x T1x: 看完题目想了想,感觉把gcd不为1的强行放在一组,看作一个连通块,最后考虑连通块之间的组合方式就可以了. 然后维护这个连通块可以写并查集可以连边跑dfs怎么着都行… ...

  7. 洛谷P1514 [NOIP2010提高组T4]引水入城

    P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...

  8. 禁用/移除WordPress页面的评论功能

    对于某些类型的WordPress站点,也许不需要在页面(page)提供评论功能,那么你可以通过下面的方法,很容易就禁用或移除WordPress页面的评论功能. 方法1:在页面编辑界面取消该页面的评论功 ...

  9. tinkcmf视频上传大小限制

    /application/Common/Common/function.php 找到upload_max_filesize把后面的数值改成合适的大小(单位是KB)

  10. [C#] 利用方向鍵移動 TextBox Focus

    論壇問題 版面上有 100 個 textbox,編號為 1-100,textbox 排列為 1 欄 20 個,共 5 欄,當一開打這個 form 會將在第一欄第一列第一個 textbox 的背景顏色變 ...