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

2023-11-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • git:如何查明某个分支是否有拉取请求?

    我在 git 分支上 有没有办法查看该分支是否有拉取请求 在这种特殊情况下 Atlassian Stash 用于管理拉取请求 当然我可以使用Stash的Web界面来搜索拉取请求 但我也可以仅使用 git 命令行工具从脚本执行此操作吗 Cor
  • 比较 Lua 中的日期

    我有一个带有日期表的变量 如下所示 table day number 15 year number 2015 month number 2 如何获取当前日期与上述日期之间的天数 非常感谢 您可以使用os time 将表转换为秒并获取当前时间
  • Git 中的专有+开源设置? (例如铬/铬)

    您将如何设置一个拥有专有版本和开源版本 例如 Chrome 和 Chromium 的代码存储库 对于 Git 您会使用两个分支还是两个存储库 您如何使 私有 版本与开源版本保持同步 如果是我 我会有两个存储库 这样 您就可以对每个版本拥有不
  • 使用 GIT 自动增加 AssemblyFileVersion

    好吧 我知道这可能不是传统的 但除此之外 我使用 AssemblyFileVersion 作为我的 构建名称 字符串 它的格式如下 File Version information for an assembly consists of t
  • 是否存在比 SVN 更快的集中版本控制?

    我已经使用 SVN 很长时间了 现在我们正在尝试使用 Git 我在这里谈论的不是中心化 去中心化的争论 我唯一关心的是速度 后一个工具要快得多 但有时 我需要使用一种集中式方法 这种方法比分散式方法更简单 更简单 学习曲线非常快 这节省了大
  • 我可以通过链接分享我的私人 GitHub 存储库吗?

    我在 GitHub 上的私人存储库中有一个 Java 应用程序 我想与没有帐户的人共享它 我在网站上没有找到任何与此相关的选项 有没有办法做到这一点 协作者只能是 GitHub 用户 无法在非 Github 用户之间共享私有存储库 您需要
  • 警告:您的 git 版本是 1.9.3。存在严重的安全漏洞

    我在部署到 Heroku 期间收到有关 git 1 9 3 严重安全漏洞的警告 我尝试通过 homebrew 更新 git 但发现 git 最初并不是通过 homebrew 安装的 然后我通过自制程序安装了它 brew update bre
  • GitHub API:标记提交所属(与 git describe --tag 并行)

    我正在使用 GitHub API 进行实验octokit https github com octokit octokit rb红宝石 我的目标是能够提取提交 SHA 所属的 标签 现在我可以使用命令行轻松地执行此操作 gt git des
  • 在 git 子模块中签出分支

    如何从子模块内更改分支 当我跑步时git branch从子模块内 我看到以下输出 gt git branch HEAD detached from 229a7b2 master 我如何将自己置于一个新的分支上 喜欢development 只
  • 交互式变基后,本地 Git 分支已偏离原始分支

    我有一个本地分行 CRM ayrshireminis 其中有一些我已推送到原点的提交 origin CRM ayrshireminis 这个分支是从创建的develop大约一周前的一个分支 其他合作者已经在该分支上完成了一周的工作 我想做的
  • 有没有办法缓存 https 凭据以推送提交?

    我最近转而将我的存储库同步到 GitHub 上的 https 由于防火墙问题 并且每次都要求输入密码 有没有办法缓存凭据 而不是每次都进行身份验证git push 自 Git 1 7 9 2012 年发布 以来 Git 中有一个巧妙的机制可
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • 如何使用 .gitattributes 避免在 git root 中包含文件夹,但在 zip 的 dist 文件夹中包含同名文件夹

    我有一个名为lib在存储库的根目录和另一个名为lib在 dist 文件夹中 我正在尝试使用 gitattributes文件排除除 dist 之外的所有文件夹和文件 以便任何下载为 zip 或 tarball 的人都只会 git 分发文件 我
  • vscode通过SSH连接gitlab的问题

    我在尝试通过 SSH 连接到 GitLab 远程存储库时遇到问题 这里是迄今为止完成的步骤 成功生成 SSH 密钥 管理人员将密钥添加到存储库中 因此当我访问 GitLab 网站时 我可以提交和发布分支 我无法从 VSCODE 发布分支并收
  • 如何修复树与树之间的 Git 错误断开链接?

    我的事务被中断 当我再次尝试时 我遇到了空或损坏的对象错误 在另一个问题之后 我删除了所有空文件 当我运行时 git fsck full 我收到这个错误 Checking object directories 100 256 256 don
  • git 可以与 Xcode 集成吗?

    有没有办法将 git 存储库与 Xcode 内置的 SCM 功能一起使用 Xcode 4 原生支持 git WWDC 2010 上的开发者工具国情咨文演讲 在这里了解更多 Xcode 4 中的新增功能 http developer appl
  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外
  • git - 更新 fork 的 master 并将我的分支重新建立到它之上?

    我分叉了一个 github 项目 然后将其克隆到本地 然后我在新分支中做了一些更改my github the project repo 然后我添加并提交了更改 并推送到我的 github 存储库并提交了拉取请求 所有者已收到我的请求 并希望
  • 如何从 android.googlesource.com 或 github.com 下载单个目录?

    我想下载 https android googlesource com platform frameworks base git master tools aapt https android googlesource com platfo
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem

随机推荐

  • Vue技术 Object.defineProperty

    Object defineProperty 是JavaScript中的一个内置方法 用于定义或修改对象的属性 它接受三个参数 对象 属性名 以及一个属性描述符对象 属性描述符对象有两种形式 数据描述符和访问描述符 数据描述符用于定义普通属性
  • 【蓝桥杯】Java组必备API类 --快速读写实现方法 及输入输出的巧妙处理

    输入和输出 输入 Scanner s new Scanner System in 声明一个从控制台中读入数据的对象 int x s nextInt double x s nextDouble String x s next 无法读入空格 S
  • 统计和——前缀和

    题目大概 给定一个长度为n的整数数组和一个整数k 你需要找到该数组中和为k的连续子数组的个数 测试样例 输入 5 3 1 1 2 1 1 输出 2 思路1 利用for循环暴力枚举子数组 并且求和 计数 时间复杂度为O n 3 如果数据大于了
  • 毕设系列 - stm32机器视觉的口罩佩戴检测系统 - 单片机 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉
  • 桶排序 (详细图解)

    一 桶排序 桶排序 Bucket sort 或所谓的箱排序 是一个排序算法 工作的原理是将数组分到有限数量的桶里 每个桶再个别排序 有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序 最后依次把各个桶中的记录列出来记得到有序序列
  • 攻防世界web之ics-06

    打开网址 四处点击 点到报表中心 跳转新页面 查看源码也没有什么特别的 发现URL栏有 id 1 以为是sql注入 但是并不是 查看大佬的wp 发现这题采用brupsuite爆破 先将抓到的包放到Intruder 然后将id设为变量 然后把
  • WEB自动化测试面试题及答案大全

    1 Selenium是否支持桌面应用软件的自动化测试 Selenium不支持桌面软件的自动化测试 Selenium是根据网页元素的属性才定位元素 而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素 当然现在也有根据桌面元素的属性来定
  • type_traits

    概述 type traits提供了丰富的编译期间计算 查询 判断 转换和选择的帮助类 其被定义在 include
  • React-50:setState

    对象形式 也是最经常用到的 import React Component from react export default class Demo extends Component state count 0 add gt 对象式的set
  • 计算机网络学习笔记四、http和https

    http和https 从本篇文章开始总结http协议相关的知识点 http协议相关的内容可以分为四个部分 HTTP报文 HTTP请求 HTTP发展历史 HTTPS 1 HTTP报文 HTTP全称Hyper Text Transfer Pro
  • 数据库连接出错?

    数据库连接为什么会出错呢 NO suitable driver found for jdbc 问题源有3 1 连接的url的格式有错 Connection conn DriverManager getConnection jdbc sqls
  • 30个 JS 实用技巧总结,助你提升工作效率

    英文 https javascript plainenglish io 35 javascript short hands coding methodologies 28ea2d7d0a5e 翻译 杨小二 我是Rakshit Shah 我在
  • 【Java】JDK 1.8新特性

    Lambda 表达式 在没有 Lambda 表达式的时候 在 Java 中只能使用匿名内部类代替 Lambda 表达式 以下面的代码为例 查看 Lambda 表达式的使用 匿名内部类方式排序 List
  • c语言输入输出函数printf与scanf的用法格式

    c语言输入输出函数printf与scanf的用法格式 格式化规则例如 5 4f等类似问题的说明 Turbo C2 0 标准库提供了两个控制台格式化输入 输出函数printf 和scanf 这两个函数可以在标准输入输出设备上以各种不同的格式读
  • SAP LSMW日志信息如何导出到Excel里?

    SAP LSMW日志信息如何导出到Excel里 在SAP系统中 数据迁移LSMW运行的日志 是可以下载到本地Excel文件里的 方式如下所示 双击某个会话 点击打印机图标 就可以导出到Excel文件里了 输入文件名 指定文件保存的目录 完
  • 送书

    今天是周三 又到了给大家送书的时刻啦 这次给大家带来的是 OpenCV图像处理入门与实践 文末查看送书规则 简介 OpenCV 是一个开源的计算机视觉库 可以实现计算机视觉算法 本书从 OpenCV 用 Python 实现的基础语法讲起 逐
  • C51定时器和计数器 timer and counter

    代码 include
  • Seven Different Linux/BSD Firewalls Reviewed

    Seven Different Linux BSD Firewalls Reviewed Firewall November 14th 2007 Did you know more than 500 million computers in
  • 鲸鱼优化算法论文【matlab代码与仿真】

    一 算法流程 通过回声定位并相互传递探寻猎物信息 研究表明 鲸鱼大脑的某些区域与人类相似 有一种叫做梭形细胞的共同细胞 这些细胞负责人类的判断 情感和社会行为 这种细胞的数量是成年人的两倍 事实证明 鲸鱼可以像人类一样思考 学习 判断 交流
  • 从Kubernetes 1.14 发布,看技术社区演进方向

    Kubernetes 1 14 正式发布已经过去了一段时间 相信你已经从不同渠道看过了各种版本的解读 不过 相比于代码 Release 马上就要迎来5周岁生日的Kubernetes 项目接下来如何演进 其实也是一个让人着迷的话题 而作为一个