ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Kubernetes 开发者工具生态反思:2018 Contributor Summit 开发者工具专场实录与解读

Kubernetes 开发者工具生态反思:2018 Contributor Summit 开发者工具专场实录与解读 Kubernetes 开发者工具生态反思2018 Contributor Summit 开发者工具专场实录与解读【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community导读本文基于 Kubernetes 社区仓库中 2018 年 5 月 Contributor Summit EU 开发者工具分会场讨论记录 整理而成。这场由 errordeveloper 与 r2d4 主持、mrbobbytales 与 onyiny-ang 记录的讨论聚焦一个至今仍具价值的问题开发者工具对于 Kubernetes 来说是否已经是一个被解决的问题以及我们该瞄准哪些 API、开发者工作流还有哪些环节未被覆盖。读完全文你将系统了解 2018 年前后 Kubernetes 开发者工具碎片化的真实痛点、社区提出的工作流阶段分解思路build / deploy / lifecycle / debug、应用定义标准化方向以及 kustomize 等工具诞生的历史背景——这些讨论直接塑造了后来 kubectl 生态的面貌。一、峰会背景与专场定位该分会场隶属于 2018 年 5 月 1 日在丹麦哥本哈根 Bella Center 举行的 2018 Kubernetes Contributor Summit EU。根据当日议程上午的 Current Contributor 分会场依次安排了 Networking、CRDs 与 Aggregation、client-go 与 API extensions、Developer Tools 四场专题其中 Developer Tools 场次排在 12:00–13:00。值得注意的是同日 CRDs 分会场 与 client-go 分会场 的讨论CRD 版本化、服务端打印列、控制器样板代码等与开发者工具议题存在大量交叉——API 扩展能力与工具生态的发展是相辅相成的。本专场没有任何幻灯片Slides: n/a是一场纯粹开放的圆桌讨论从 SIG Apps 用户调研的长篇反馈切入逐步展开到工具兼容性、抽象层级、应用定义、工作流阶段划分等话题。二、讨论起点开发者工具是已解决的问题吗讨论的第一个问题是你认为 Kubernetes 的开发者工具已经是一个被解决的问题吗与会者的一致回答是没有A: No。这一结论与 SIG Apps 用户调研 的长期反馈相互印证。根据 SIG Apps 会议记录该调研自 2016 年起持续收集在 Kubernetes 上运行应用的真实体验反馈而本次专场引用的调研长篇回复暴露了以下核心诉求需要认真讨论开发者体验Developer Experience社区可以做更多事情来推广软件开发工作流包括 CI/CD开发者期待关于如何以更高产的方式编写运行于 Kubernetes 上的软件的指南工具生态的双刃剑效应随着越来越多工具涌现开发者可以专注于应用开发而不被 Kubernetes 细节分心但大量可用工具本身就是一把双刃剑——这些工具在可用性、健壮性和安全性方面差异巨大选择与评估成本很高。可以看到早在 2018 年社区就已经意识到工具数量的增长并不能自动带来良好的开发者体验反而可能因为选择过载而加重负担。三、开发者体验的现状三个核心判断记录将当时的开发者体验现状凝练为三句话工具很多Many Tools——Helm、kompose、ksonnet、各种模板引擎等层出不穷大多互不兼容Mostly incompatible——不同工具生成的清单、遵循的约定、应用对象的方式各不相同缺少端到端工作流Few end-to-end workflows——单点工具解决单点问题但很少有工具能覆盖从开发、构建、部署到调试的完整链路。这三个判断成为整场讨论的共识基础。后续所有话题——无论是标准化、抽象层级还是工作流分解——本质上都是在回应工具碎片化这一现状。四、核心议题一工具碎片化与兼容性4.1 各公司各自为政的解决方案讨论指出不同公司的领域和工作流差异太大以至于每个人都有一套自己的有主见opinionated的解决方案。Domain 与 workflow 的高度分化使得任何单一工具都难以通吃所有场景。4.2 应用顺序不一致带来的问题Bryan Liles 与 Daniel Smith 等参与者深入探讨了工具间最隐蔽也最实际的问题——对象应用顺序kubectl apply、Helm 等工具以不同的顺序应用对象跨工具使用时可能引发一致性破坏Daniel Smith 的观点尤为犀利启动顺序问题startup order problems背后往往是更大的问题——顺序本不应该重要但在真实世界中有时就是会重要不过也有参与者指出有序的创建顺序并非坏事例如确保对象不会在创建后立即被垃圾回收某些 GC 相关任务确实依赖顺序约束。4.3 依赖启动顺序的可靠性陷阱一个被普遍认同的工程建议是那些依赖启动顺序的人往往会因为自身运维问题而遭遇可靠性问题应当尽量通过工程手段绕开顺序依赖。这与后来 Kubernetes 生态强调声明式、最终一致、幂等的理念一脉相承。4.4 标准化标签与分组管理讨论中有人提议也许应该标准化一组标签labels用来标记应该作为一组被管理的对象。Helm 只是其中一种实现标准化的范围应当超越 Helm。仓库中 SIG CLI 的 charter 与相关子项目的演化表明这类分组管理的诉求最终在 kustomize 的app.kubernetes.io标签约定等设计中得到部分回应。五、核心议题二抽象层级与学习曲线之争5.1 高层抽象的两面性围绕是否应该使用高层 DSL/抽象会场出现明显分歧支持方认为很多人根本不想深入细节只想填几个数据库等配置然后就能跑起来高层抽象降低了门槛反对方认为过度的高层抽象会让事情变得过于复杂、引入一堆隐性约束部分团队刻意回避高层 DSL是因为用户应该理解 readiness/liveness 探针等概念——虽然学习曲线陡峭但在排查问题、深入细节时这些知识是值得的。5.2 工具认知差异的根源Bryan Liles 分析了为什么这个领域如此难以统一同样的对象不同的工具kubectl、helm以不同顺序应用对象objects与抽象abstractions之间存在鸿沟以 ksonnet 为例有人爱它、有人恨它——Kubernetes 概念以不同方式引入给不同的人大家的起点并不一致因此有些工具对某些人来说就是比其他人更难掌握绑定单一工具会破坏跨提供商provider的兼容性。5.3 可移植性与打破玻璃场景讨论明确反对那些阻碍可移植性的工具有人建议构建一个以列表方式展示整个集群、支持轻松创建/销毁集群的 UI但强调应避免采用会阻止移植性的工具。此外Debug 容器非常适合 break-glass破窗场景——即在紧急情况下临时进入容器排障而不是作为常规入口。六、核心议题三应用定义标准化与 WG App Def6.1 从什么是应用到 App CRD讨论多次提及 App Def 工作组WG App Def 的进展App Def 工作组正在进行大量工作来定义什么是应用what an app isApp CRD 的工作应该能让开发者的生活更轻松有参与者设想是否可以把这些工具正式化为 CRD以及用脚手架scaffold来规范化 builder 的接口让背后可以自由替换实现。仓库中 archive/wg-app-def/README.md 记录了这一工作组的章程目标改善 API 及主要客户端库/工具中声明式原语declarative primitives的 UX理解生态其他部分在这一层的需求并通过关注点分离、公共约定与公共原则提升应用管理工具的互操作性。该工作组当前已归档至 archive 目录但其应用定义标准化的思路深刻影响了后续 Application CRD 与 OAM 等方向的探索。6.2 从贡献者视角退回到开发者视角讨论中有一段非常真诚的反思退一步摘下贡献者的帽子、戴上开发者的帽子来看当前存在严重的工具蔓延tool sprawl这些工具在 Kubernetes 的不同方面之间未必兼容。有没有办法整合它们、让它们更标准化这一呼吁把问题的本质从缺少工具转向了工具太多且缺乏治理。七、核心议题四把工作流拆成子问题——build / deploy / lifecycle / debug7.1 阶段化分解的提出多位参与者提出面对庞大的工具生态正确的策略是把开发与部署工作流拆解为阶段和组件逐一攻克子问题而不是一次性解决所有问题。当前社区的问题是同时在解决所有问题并且开发出多个做着相同事情的工具。7.2 jacob 对应用定义阶段的修正jacob 基于其 application definition 调研指出应用管理的阶段不只是 build、deploy、debug而是 build、deploy、lifecycle生命周期、debug 四个阶段。其中管理生命周期仍然是个问题——一键部署1-click deploy并不处理生命周期。这一修正对后续工具设计影响深远部署之后的升级、回滚、扩缩容、回收等生命周期操作才是应用管理的真正难点。7.3 可执行的下一步构建集群级 UI 与对象渲染讨论中还提出了若干具体的工程设想构建一个把整个集群以列表展示、便于创建/销毁的 UI对象以某种方式渲染到文件的流程应该发生在运行时并由一个额外的 operator 负责整体管理经历 3、4 次小版本升级而不破坏——即工具链自身要保持向后兼容。八、核心议题五Debug Containers 的双场景价值Debug 容器是本次讨论中被多次提及的高频词其价值被概括为两点生产场景非常适合break-glass破窗排障场景——在不出故障时零侵入出问题时能立即进入容器内部诊断开发场景Debug 容器可能会让开发者更容易完成构建与排查自己应用的工作——它降低了新开发者构建、排障的门槛而 Kubernetes API 的极高灵活性对新上手的开发者来说反而可能变得复杂debug 容器正是缓解这种复杂性的手段之一。从 SIG Node 的历史会议记录 可以看到这类讨论随后在 SIG Node 层面持续推进最终演化为kubectl debug与 ephemeral containers 等正式能力。九、核心议题六kustomize 的亮相讨论记录中有一个值得铭记的历史注脚SIG CLI 里有一个叫kustomize的工具它之前叫 konflate如今SIG CLI 的 README 中 kustomize 已是该 SIG 的正式子项目见 sig-cli/README.md 的 Subprojects 一节由 SIG CLI 维护并拥有独立的 OWNERS 治理。从konflate到 kustomize、再到被合并进kubectl apply -k的能力正是这场讨论中标准化清单处理、避免模板 DSL 泛滥诉求的直接产物。这也说明峰会圆桌上的吐槽确实可以变成改变生态的工具。十、更深层的工程哲学顺序、GC 与可靠性将散落在记录中的工程观点汇总可以提炼出几条对今天仍有指导意义的工程原则观点出处启动顺序依赖背后往往是更大的运维问题应通过工程手段绕开Daniel Smith 及多数与会者有定义的创建顺序不一定是坏事可避免对象创建后被立即 GC匿名参与者绑定单一工具会破坏跨提供商兼容性Bryan Liles依赖 startup order 的人常有可靠性问题匿名参与者高层抽象过猛会引入隐性约束学习底层概念值得投入匿名参与者生命周期管理比一键部署更难需要专门解决jacob这些观点共同指向一个核心理念Kubernetes 的声明式模型应当尽量让顺序无关成立工具链的价值在于帮助开发者绕开顺序依赖而不是强化它。十一、如何参与社区入口当时与现在记录末尾给出了明确的参与路径加入 SIG-Apps——通过 Slack、邮件列表或每周一的例会参与讨论。时至今日围绕开发者工具的讨论已经扩散到多个 SIG 与工作组SIG Apps延续应用管理、应用定义相关的讨论拥有完整的 charter 与 年度报告SIG CLIkubectl 及 kustomize、krew 等开发者工具子项目的归属地见 sig-cli/README.mdApp Def WG应用定义标准化探索的载体相关记录归档于 archive/wg-app-def/README.md。读者若想继续深入可查阅本仓库中 SIG Apps 会议议程 与 历史会议记录跟踪应用管理方向的一手讨论。结语2018 年的这场开发者工具专场没有给出最终答案它呈现的更多是社区面对工具爆炸时的清醒反思工具多不等于体验好抽象高不等于门槛低部署快不等于生命周期无忧。它提出的把工作流拆成 build / deploy / lifecycle / debug 子问题逐一攻克标准化应用定义与分组标签用 debug 容器同时改善开发与生产排障等思路在此后数年中一一落地为 kustomize、ephemeral containers、Application CRD 探索等具体成果。对今天的开发者而言这份记录既是一份宝贵的历史切片也是一份如何设计开发者工具的思维清单——无论你是在为团队挑选工具还是正在构建自己的 Kubernetes 工具链。【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表