知识卡片

Kubernetes封装了服务集群却没有真正封装应用是复杂性的根源

普通读书笔记卡

内容

Kubernetes从能力上确实做到了”云原生操作系统”的名号——出色的管理能力、 扩展性、以声明代替命令的交互理念,但从易用角度差距还很大,以陡峭的 学习曲线闻名。用Kubernetes部署一套Spring Cloud版的Fenix’s Bookstore 这类微服务系统,要给每个微服务分别写好Deployment、ConfigMap、 StatefulSet、HPA、Service、ServiceAccount、Ingress等一整套资源元数据, 这个过程真正的难点不是繁琐本身,而是要写好这些配置,既要懂开发(服务 调用关系、镜像版本、环境变量),又要懂运维(部署多少副本、扩缩容策略、 密钥地址),有时还要懂平台(调度策略、集群资源管理)——一般企业根本 找不到一个角色能同时胜任这三重身份。这不是Kubernetes设计得不好,而是 一个更深层的结构性缺口:Docker容器镜像封装了单个服务,Kubernetes的 资源模型封装了服务集群,但从来没有一个载体真正把”整个应用”封装起来, 把应用内部的技术细节圈禁起来、不暴露给最终用户、系统管理员和平台维护者 ——应用难以管理的根本原因,在于封装应用的方式没能把开发、运维、平台 这几种角色的关注点恰当地分离开。这个诊断直接引出了[[Kustomize用Base Overlay分离信息但不解决应用全生命周期管理]]、Helm、Operator、OAM这几种 后续探索的应用封装方案——它们都是在试图补上这个缺口,只是切入角度 各不相同。

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第11章"虚拟化容器"11.3节 "以应用为中心的封装"(源文件:_epub-src对应OEBPS/Text/chapter138.xhtml) - 结论依据:原文说明Kubernetes以陡峭学习曲线闻名,用一个部署微服务需要 同时懂开发、运维、平台三重角色的具体例子说明痛点,并指出根本原因是 "封装应用的方法没能将开发、运维、平台等各种角色的关注点恰当地分离", 直接支撑本卡片结论。 - 原始内容:这些困难的实质源于Docker容器镜像封装了单个服务,Kubernetes 通过资源封装了服务集群,却没有一个载体真正封装整个应用……应用难以 管理的原因在于封装应用的方法没能将开发、运维、平台等各种角色的关注点 恰当地分离。