从Kubernetes 1.14 发布,看技术社区演进方向

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Kubernetes 1.14 正式发布已经过去了一段时间,相信你已经从不同渠道看过了各种版本的解读。不过,相比于代码 Release,马上就要迎来5周岁生日的Kubernetes 项目接下来如何演进,其实也是一个让人着迷的话题。

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 项目对应用以及应用管理的定义也开始清晰了起来,我们可以用如下一幅示意图来简单描述:

image

在这个 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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes的奇妙之旅
【9月更文挑战第34天】在数字化浪潮中,云原生技术如Kubernetes已经成为IT行业的重要力量。本文旨在通过浅显易懂的方式,向初学者揭示Kubernetes的核心概念、架构设计及其在实际业务中的应用价值,帮助读者快速理解并掌握这一技术,为进一步深入学习和实践打下坚实基础。
7 1
|
9天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
29 4
|
11天前
|
Kubernetes 负载均衡 Cloud Native
探索云原生技术:Kubernetes的魔法
【9月更文挑战第24天】 在数字化浪潮中,云原生技术如同现代航海的罗盘,指引着企业航向灵活、高效的未来。本文将深入剖析云原生世界的璀璨明星——Kubernetes,揭秘其如何在容器化的基础上,实现复杂应用的自动化部署、扩展和管理。从概念到实践,我们将一同领略Kubernetes如何简化运维、提高资源利用率,并推动微服务架构的发展。通过实际的代码示例,我们将手把手教你如何在云上构建和运行第一个Kubernetes集群,让理论与实践相结合,开启云原生之旅。
|
18天前
|
Kubernetes 负载均衡 监控
深入云原生技术:Kubernetes集群部署与管理
【9月更文挑战第17天】在数字化转型的浪潮中,云原生技术以其灵活性和可扩展性成为企业新宠。本文将引导读者探索云原生的核心组件——Kubernetes,通过实际案例分析其部署与管理流程,旨在帮助技术从业者和企业决策者理解如何利用Kubernetes提升应用的可用性和性能。从基础概念到操作实践,我们将一同见证云原生技术的变革力量。
|
1月前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
8天前
|
存储 Kubernetes Docker
深入探索容器化技术:Docker 实战与 Kubernetes 管理
深入探索容器化技术:Docker 实战与 Kubernetes 管理
23 0
|
17天前
|
Kubernetes Cloud Native Java
探索未来编程新纪元:Quarkus带你秒建高性能Kubernetes原生Java应用,云原生时代的技术狂欢!
Quarkus 是专为 Kubernetes 设计的全栈云原生 Java 框架,凭借其轻量级、快速启动及高效执行特性,在 Java 社区脱颖而出。通过编译时优化与原生镜像支持,Quarkus 提升了应用性能,同时保持了 Java 的熟悉度与灵活性。本文将指导你从创建项目、编写 REST 控制器到构建与部署 Kubernetes 原生镜像的全过程,让你快速上手 Quarkus,体验高效开发与部署的乐趣。
15 0
|
2月前
|
Kubernetes 监控 Cloud Native
eBPF技术大揭秘:一张全景图彻底改变Kubernetes问题排查,助你成为云原生时代的超级英雄!
【8月更文挑战第8天】在云原生时代,Kubernetes作为容器编排的标准,其问题排查变得日益复杂。eBPF技术无需改动内核即可编写高效、安全的内核程序,实现系统细粒度观测与控制。近期发布的基于eBPF的Kubernetes问题排查全景图,展示了如何利用eBPF监控资源使用、网络性能及调度策略等,例如通过eBPF程序监控CPU使用率。此全景图有助于快速定位如高CPU使用率等问题所在Pod,进而优化配置或调整调度。
86 8
|
2月前
|
Kubernetes Cloud Native 开发者
探索云原生技术:从Docker到Kubernetes的旅程
【8月更文挑战第31天】云原生技术正在改变软件开发、部署和运维的方式。本文将带你了解云原生的核心概念,并通过实际代码示例,展示如何使用Docker容器化应用,并进一步通过Kubernetes进行集群管理。我们将一起构建一个简单的微服务架构,体验云原生带来的高效与便捷。
|
2月前
|
运维 Kubernetes 监控
自动化运维:使用Python脚本实现系统监控云原生技术实践:Kubernetes在现代应用部署中的角色
【8月更文挑战第31天】在现代IT运维管理中,自动化已成为提高效率和准确性的关键。本文将通过一个Python脚本示例,展示如何实现对服务器的自动监控,包括CPU使用率、内存占用以及磁盘空间的实时监测。这不仅帮助运维人员快速定位问题,也减轻了日常监控工作的负担。文章以通俗易懂的语言,逐步引导读者理解并实践自动化监控的设置过程。 【8月更文挑战第31天】本文旨在探索云原生技术的核心—Kubernetes,如何革新现代应用的开发与部署。通过浅显易懂的语言和实例,我们将一窥Kubernetes的强大功能及其对DevOps文化的影响。你将学会如何利用Kubernetes进行容器编排,以及它如何帮助你的
下一篇
无影云桌面