十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Kubernetes 云原生设计与跨组件重构:从标准日志、可注入配置到 OpenStack 编排的演进路径

Kubernetes 云原生设计与跨组件重构:从标准日志、可注入配置到 OpenStack 编排的演进路径 Kubernetes 云原生设计与跨组件重构从标准日志、可注入配置到 OpenStack 编排的演进路径【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community导读本文基于 KubeCon 2017 Contributor Summit 上由 Joe Beda 与 Amit Kumar Jaiswal 主持的「Cloud Native Design/Refactoring across Kubernetes」专题讨论纪要系统梳理 Kubernetes 组件云原生化的三大支柱标准化日志、可注入配置、可查询 API、OpenStack-Helm / Kolla-Kubernetes 编排场景以及社区在跨组件重构中遇到的真实 Issue、开放问题与观众反馈同时结合本仓库中同期峰会纪要、组件配置规范文档与 SIG 组织资料为读者还原 2017 年末 Kubernetes 组件架构演进的关键脉络并提供可继续深挖的仓库线索。会议定位与摘要解读该场次是 KubeCon 201712 月Contributor Summit 的专题讨论主持人为 Kubernetes 创始人之一 Joe Bedajbeda与 Amit Kumar JaiswalAMIT_GKP。讨论的核心命题是如何在 Kubernetes 组件中干净地支持云原生行为——标准化 Kubernetes 日志、可注入的配置以及通用的可查询 API。值得注意的是摘要明确指出这场讨论并不只围绕容器本身通过 OpenStack-Helm 或 Kolla-Kubernetes 在 Kubernetes 内编排 OpenStack 的部署与管理为获得更好的升级能力铺平了道路同时它也能改善独立运行单个 Kubernetes 服务或让 Kubernetes 服务与相邻技术组合运行的能力。也就是说这场讨论把云原生从应用层延伸到了基础设施编排层——连 OpenStack 这样的传统基础设施软件本身也可以作为工作负载被 Kubernetes 托管和编排。会议议程五步主线会议的 Agenda 勾勒出一条从宏观到落地的完整思考路径本文后续各节即沿此脉络展开Cloud Native Ecosystems——云原生生态全景Kubernetes Abstractions Primitives——Kubernetes 的抽象与原语Kubernetes Design Patterns——Kubernetes 设计模式Refactoring across Kubernetes——跨 Kubernetes 组件的重构Benefits of using Kubernetes——使用 Kubernetes 的收益。可以看出讨论试图回答两个层次的问题Kubernetes 自身组件应当如何云原生地设计与重构以及Kubernetes 作为平台能对外部系统尤其是 OpenStack 这类既有基础设施软件带来什么样的编排收益。云原生行为的三大支柱摘要将云原生行为具体化为三个可验证、可落地的技术特征这也是本场讨论最核心的技术骨架1. 标准化 Kubernetes 日志Kubernetes 日志体系正在从依赖具体运行时路径走向标准化采集。本场讨论中对应的落地议题是将fluentd 改为使用 CRI 日志路径并逐步弃用旧的容器日志路径。这条线索与同期峰会的其他讨论相互印证extending-kubernetes.md 明确将(gRPC) CRI列为 Kubernetes 的核心扩展机制之一并指出Kubelet 之下是 gRPC本仓库 committee-steering/meeting-notes-archive/2018-meeting-notes.md 中也记录了CRI 被提升到 v1从 v1alpha2的后续进展1.23 版本。也就是说fluentd 读取 CRI 标准日志路径正是把日志采集从容器运行时私有格式迁移到Kubernetes 标准接口这一云原生方向上的具体动作。2. 可注入的配置Injectable Configuration组件配置的注入方式是当时社区讨论的热点核心矛盾是命令行 Flag 与文件 / ConfigMap 两种配置来源的优先级。本场讨论将其列为开放问题Kubelet Flag 子字段优先级 vs 文件 / ConfigMap 到 Kubelet Config——即 Kubelet 的各 Flag 子字段与通过配置文件 / ConfigMap 提供的 Kubelet 配置应当如何裁决优先级。这一问题的完整背景可以在仓库文档中找到更系统的表述。contributors/devel/sig-architecture/component-config-conventions.md 开篇就指出了 Flag 驱动配置的六大痛点扁平命名空间导致--help失去参考价值、难以按实例差异化配置、修改需重启二进制、命令行对同主机非特权进程可见不适合传递机密、Flag 作为公共 API 却无法版本化以及配置变更的兼容性风险。而 archive/wg-component-standard/component-config/README.md 更是直接记录了当时社区对此问题的结论性线索Kubelet flags take precedence over config from files/ConfigMaps对应 kubernetes/kubernetes 的 PR #56097并提醒若希望多个实例共享同一份配置源例如通过 ConfigMap 下发配置则应避免迁移这类实例特有值如--hostname-override的 Flag。这为Flag 与 ConfigMap 优先级提供了当时社区的裁决方向。3. 通用可查询 APICommon Queryable APIs可查询意味着组件能力应通过统一的 API 面暴露而不是散落在私有命令行与日志中。本场讨论关联的具体诉求包括帮助社区完善API 文档与配置最佳实践在OpenAPI schema 中定义对象定义Object definition例如PersistentVolumeSpec、PersistentVolumeClaimSpec的定义讨论PersistentVolumeSpec / PersistentVolumeClaimSpec这类对象在 OpenAPI 描述中的组织方式为自动化工具如 kubectl、客户端库、校验工具提供机器可读的契约。仓库中 contributors/devel/sig-architecture/api-conventions.md 正是这一方向上的长期成果沉淀其中专门讨论了 ConfigMap 等资源在 OpenAPI 规范中 group 省略等细节可作为读者继续研究 API 约定的入口。OpenStack 编排云原生设计的外部延伸摘要中特别点名的两个项目是OpenStack-Helm与Kolla-Kubernetes——它们都是在 Kubernetes 之上部署与管理 OpenStack 的典型方案。讨论认为这类编排带来两个直接收益更好的升级能力把 OpenStack 组件容器化并纳入 Kubernetes 编排后升级可以借助滚动更新、健康检查与声明式状态管理来执行而不是依赖手工的逐机操作更强的组合能力单个 Kubernetes 服务既可以独立运行也可以与相邻技术如监控、日志、网络组件自由组合。从社区组织演进的视角看本仓库也保留了后续线索committee-steering/meeting-notes-archive/2018-meeting-notes.md 中记录了 Steering Committee 对SIG Cloud Provider 与 SIG OpenStack 合并的推动以及围绕OpenStack 抽取 KEP的讨论sigs.yaml 中sig-cloud-provider条目下的 Slack 频道api-reviews、bugs、feature-requests、maintainers、pr-reviews、proposals 等也印证了云厂商接入话题在社区治理层面的正式化。这些资料表明在 Kubernetes 内编排 OpenStack并非一次性的技术演示而是进入了长期的组织化推进轨道。跨 Kubernetes 重构现场提出的实战议题会议纪要的 Issues 部分列出的是面向贡献者的开放任务也是本场讨论最具可操作性的内容1. 寻找重构 Issue 的协作者会议明确在寻找帮助处理跨 Kubernetes 重构类 Issue 的贡献者列举了 kubernetes/kubernetes 仓库中的#51405、#46735、#54090、#55151等编号原文未展开每个 Issue 的具体内容仅作为重构工作量的样例。对于想参与开源重构的读者这类从具体 Issue 切入的方式是标准的贡献路径可参照仓库 contributors/guide/issue-triage.md 了解 Issue 治理流程。2. 整合 volume 工具文件一个具体到文件级别的重构任务整合 volume 相关的 util 文件包括pkg/volume/util.gopkg/volume/util/util.gopkg/volume/util/volumehelper/volumehelper.go会议提出的诉求是为每个文件补充更好的文档明确其各自职责边界。这类文件越聚越多、边界模糊的问题是单体仓库中典型的可重构信号——与同期 breaking-up-the-monolith.md 讨论的把代码移动到看起来像多个仓库的思路一脉相承。3. 增强 e2e 测试以跟踪云厂商 API QuotaEnhancing e2e tests to track cloud providers API Quotas——即在端到端测试中跟踪云厂商 API 配额。这一议题与同期 cloud-provider.md 的讨论高度呼应该场次提到 e2e 测试中存在大量if !GCE - skip式的跳过逻辑缺乏对非 GCE 云厂商的覆盖并讨论了分布式 CI 下各云厂商自建测试、结果回传 testgrid 的设想。跟踪 API Quota 的目的在于当集群规模或并发操作逼近云厂商限流阈值时e2e 测试能提前暴露问题而不是在生产环境才触发配额错误。4. fluentd 迁移到 CRI 日志路径将 fluentd 改为使用 CRI 日志路径最终弃用旧容器路径详见上文标准化日志一节。5. 特定应用场景下的部署 / 采纳问题Issues with deploying/adopting Kubernetes for specific applications use-cases——针对特定应用用例部署/采纳 Kubernetes 时遇到的问题。这属于落地反馈反哺平台演进的议题与本场讨论既有平台能力、又服务于具体业务的定位一致。现场开放问题Questions与解决线索Questions 部分记录了现场提出的技术问题以下结合仓库资料给出当时的讨论背景与线索开放问题讨论要点与仓库线索安全与 Kubernetes 的粒度如何在组件与 API 层面实现更细粒度的安全控制相关延伸机制见 extending-kubernetes.md 中列出的 admission webhooks、RBAC、KMS 等扩展点。Kube API 不应依赖--cloud-provider与--cloud-config这是云厂商接入解耦的核心诉求。同期 cloud-provider.md 给出了对应方案引入cloud-controller-managerCCM、将cloudproviderexternal设为新 Flag使 API Server 不再直接感知具体云厂商。API 文档与配置最佳实践见 contributors/devel/sig-architecture/api-conventions.md 与 component-config-conventions.md。面向 NFV/SDN 的测试框架网络功能虚拟化与软件定义网络场景下的测试工具需求属于 Kubernetes 网络生态的前沿问题。Kubelet Flag 子字段优先级 vs 文件 / ConfigMap上文已述社区最终方向是Flag 优先于文件 / ConfigMapPR #56097见 archive/wg-component-standard/component-config/README.md。如何从快照动态供给 AWS EBS 卷存储供给能力需求属于云厂商存储插件与 CSI 演进的前奏同期 cloud-provider.md 也提到卷方案从依赖 FlexVolume 转向CSI时间点不早于 Q3。OpenAPI 中PersistentVolumeSpec、PersistentVolumeClaimSpec的对象定义API 描述能力的完善需求与通用可查询 API支柱直接相关。K8s cephfs 的 FUSE client 支持存储接入方式内核态 vs FUSE 用户态挂载的取舍属于存储生态的开放议题。与同期峰会讨论的交叉印证组件解耦的整体图景本场讨论并非孤立的头脑风暴。它与同目录下的三份纪要共同拼出了 2017 年末 Kubernetes 组件架构演进的完整图景cloud-provider.md详述了云厂商代码外移的进展——kube-controller-manager 被禁用、cloud-controller-manager 在 GCE 上完成集群拉起验证还记录了胜利标准major cloud providers 运行 CCM、卷可留在树内直到 CSI 生产可用以及删光树内云厂商代码后 thockin 请蛋糕和啤酒的社区趣闻。breaking-up-the-monolith.md围绕是否拆分 k/k 单体仓库展开激辩核心论据之一是云厂商代码是天然的拆分突破口——外移后长尾云厂商不必等待上游发布节奏staging目录被视作已拆分的样板。extending-kubernetes.md系统盘点扩展机制API 扩展、admission webhooks、Finalizers、FlexVolume、CSI、CRI、CNI、KMS、kubectl 插件、External Cloud Provider 等为本场讨论的可查询 API与可注入配置提供了机制层面的支撑。将四份纪要放在一起可以看出云原生设计/重构在 2017 年末的共识是通过标准接口CRI、CSI、CCM、ConfigMap把组件能力外置化、模块化让 Kubernetes 核心保持精简同时让外部系统如 OpenStack成为一等公民工作负载。这一方向在后续多年被持续兑现cloud-controller-manager 正式化、CSI GA、CRI v1 等本仓库 sig-cloud-provider、sig-storage、sig-node 等 SIG 目录即为这些工作的长期载体。总结一场讨论映射出的云原生重构方法论回顾这场 2017 年的专题讨论其价值不在于给出最终答案而在于确立了判断组件是否云原生的三个可操作判据日志是否走标准路径——fluentd 迁移到 CRI 日志路径弃用私有容器路径配置是否可注入、可版本化——Flag 与文件 / ConfigMap 的优先级得到明确裁决Flag 优先配置 API 走向*.config.k8s.io版本化体系能力是否通过可查询 API 暴露——OpenAPI 对象定义、API 文档与最佳实践持续完善。在此基础上跨组件重构的具体抓手volume util 文件整合、云厂商 API Quota 的 e2e 跟踪、云厂商代码外移与开放问题Kube API 解耦--cloud-provider、EBS 快照供给、cephfs FUSE 支持等共同构成了 Kubernetes 从单体编排器走向云原生平台的真实演进路径。读者可沿本仓库的 component-config-conventions.md、cloud-provider.md 与 extending-kubernetes.md 继续深入观察这些 2017 年的设想如何在代码与治理层面逐步落地。【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表