写点什么

Kubernetes 并不适合大多数团队

  • 2020-03-12
  • 本文字数:2285 字

    阅读完需:约 7 分钟

Kubernetes 并不适合大多数团队

如果你已经在使用 Docker 了,那么下一步很自然的就是要应用 Kubernetes。


在开发同一应用程序时,5 个软件工程师设计的解决方案,与 50 个、500 个软件工程师设计的肯定不同。因此,如果你是在一个小团队中,Kubernetes 可能不是一个好的选择,它会带来很多痛苦,但好处却微乎其微。


为什么这么说呢?

Kubernetes 应用存在哪些问题?

Kubernetes 有大量的活动部件——概念、子系统、过程、机器、代码,这就意味着会有大量的问题。

多机器

Kubernetes 是一个分布式系统:有一台控制工作机器的主机器,工作被安排在不同的工作机器上。然后,每台机器在容器中运行工作。


如果你的工作只需要两台机器或者虚拟机来完成,那么使用 Kubernetes,你可能就需要扩展,需要 3 个、4 个或者更多的虚拟机。

多代码

截至 2020 年 3 月初,Kubernetes 的代码库中已有超过 58 万行 Go 代码。 这是实际的代码行数,没有计算注释或空白行,也没计算供应商的包。


2019 年的安全审查 这样描述其代码库:


……Kubernetes 的代码库有很大的改进空间。该代码库庞大而复杂,大部分代码只包含很少的文档和大量的依赖关系,包括 Kubernetes 外部的系统。在代码库中有很多逻辑重新实现的情况,可以集中到支持库中,从而降低复杂性,简化补丁,并减少代码库中不同区域的文档负担。


坦率来讲,Kubernetes 与其它大型项目没有什么不同,如果想要应用程序不奔溃且更好的运行,那么研究代码是必须要做的工作。

复杂性

Kubernetes 是一个复杂的系统,包含许多不同的服务、系统和部件。


在运行单个应用程序之前,你需要以下高度简化的架构:



K8s 文档中的概念文档包含许多这样的讲解说明:


在 Kubernetes 中,EndpointSlice 包含对一组网络端点的引用。在指定选择器时,EndpointSlice 控制器自动为 Kubernetes 服务创建 EndpointSlice。这些 EndpointSlices 将包含任何与服务选择器匹配的 Pod 引用。EndpointSlice 通过唯一的服务和端口组合将网络端点分组。

在默认情况下,EndpointSlice 控制器管理的每个 EndpointSlice 的端点不超过 100 个。在这个范围内,EndpointSlice 应该与端点和服务进行 1:1 的映射,并且具有类似的性能。


仅仅这一段文字中就包含了很多的概念,例如 EndpointSlice、服务、选择器、Pod 和端点。但在实际应用中,有时你根本都用不到这些功能。


默认情况下,发送到 ClusterIP 或 NodePort 服务的流量可能被路由到该服务的任何后端地址。从 Kubernetes 1.7 开始,就可以将“外部”流量路由到在接收流量的节点上运行的 Pods,但这不支持 ClusterIP 服务,而且,也不可能实现更复杂的拓扑结构(如分区路由)。服务拓扑特性解决了这个问题,它允许服务创建者根据源节点和目标节点的节点标签定义流量路由策略。


安全审查是这样评价 Kubernetes 的:


Kubernetes 是一个庞大的系统,操作非常复杂。评估团队发现 Kubernetes 的配置和部署非常复杂,某些组件的默认设置令人困惑、缺少操作控制和隐式定义的安全控制。


另外,Kubernetes 的开发复杂性也很高,当你越多的使用 Kubernetes,就会越难进行平常的开发,需要了解各种概念之后才能运行代码,如 Pod、部署、服务等。同样测试时,也需要通过 VM 或嵌套的 Docker 容器启动完整的 Kubernetes 系统。


由于应用程序很难在本地运行,开发也就更困难了,所以各种各样的解决方案也就应运而生了,从过渡环境,到将本地进程代理到集群,再到将远程进程代理到本地机器……


虽然解决方案很多,但是有些方案也不完善,所以我认为最好也是最简单的解放方案是不使用 Kubernetes。

微服务

当系统允许运行多服务时,很容易就会编写许多服务。其实,这并不是个好主意。


首先,分布式应用程序很难编写,服务越多,问题就会越多。


其次,分布式应用程序很难调试,可能需要新的工具和日志记录来调试。


微服务其实是一种组织层面的扩展技术,当 500 名开发人员在共同开发一个网站时,不同的开发团队需要独立工作,这时支付大规模分布式系统的成本是有意义的,如果是一个 5 人团队,微服务是没有意义的。

Kubernetes 是不是就没用了呢?

上面讲了这么多 Kubernetes 应用时的问题,那是不是说明 Kubernetes 完全没用呢?当然不是。

扩展性

如果你需要大规模的扩展,Kubernetes 可能会很有用。


你可以得到最多 416 个 vCPU 和 8TiB RAM 的云 VM,虽然会很贵,但也很简单。


你可以使用像 Heroku 这样的服务来扩展许多简单的 Web 应用程序。


不过,大多数应用程序不需要扩展太多,一些合理的优化就足够了。


许多 Web 应用程序的扩展其瓶颈通常是数据库,而不是 Web 工作进程。

可靠性

活动部件越多,就意味着出错的机会越多。


Kubernetes 内置了很多特性(健康检查、滚动部署),可以使得可靠性变得更简单,例如,Nginx 可以对工作进程执行健康检查,使用 docker-autoheal 或类似的东西自动重启进程。


如果你关心的是停机时间,那么第一个想法不应该是“如何将部署停机时间从 1 秒减少到 1 毫秒”,而应该是“如何确保数据库模式更改不会妨碍我在事情搞砸时进行回滚”。


如果你只是想要一个可靠的 Web 工作进程,不存在单机故障点,那么有很多方法可以做到这一点,不必使用 Kubernetes。

最佳实践?

没有所谓的最佳实践,只有针对特定情况的最佳实践。


我们不能仅仅因为某件事很流行,就认为它是正确的选择。在某些情况下,Kubernetes 是一个非常好的主意,但在另一些情况下,这是一种毫无益处的时间陷阱。


在我看来,除非你的应用程序真的复杂到必须使用 Kubernetes,否则使用其它工具也可以很好的完成工作,例如单机 Docker Compose、类似 Heroku 的系统、用于计算管道的 Snakemake 等等。


原文链接:


https://pythonspeed.com/articles/dont-need-kubernetes


2020-03-12 08:455945

评论 4 条评论

发布
用户头像
很多团队都只是为了kpi而使用docker, k8s,运维自己都对这个没有了解,只是网上看看找个现成工具搭下集群,然后就让大家迁,哎
2020-04-05 22:45
回复
用户头像
K8S适合大多数团队,作者提到的这些复杂性可以使用cloud呀,为什么要全部自己负担呢
2020-04-01 11:02
回复
用户头像
“没有所谓的最佳实践,只有针对特定情况的最佳实践。”没错,想要能够适用全部场景的最佳实践等于寻找不存在的银弹。
2020-03-18 00:33
回复
用户头像
请问是否使用微服务和开发团队有多少成员有什么关系嘛?微服务是从系统和业务为基础而提出的,一个人也能完成复杂的业务系统,这只是反应开发效率。
2020-03-13 11:01
回复
没有更多了
发现更多内容

StarRocks Awards 2024 年度贡献人物

StarRocks

【A/B实验常见问题】实验异常值应该如何处理?

京东零售技术

使用 Taro 开发鸿蒙原生应用 —— 快速上手,鸿蒙应用开发指南

京东科技开发者

数字化时代下的数字化资产及其治理

京东科技开发者

2025 年 AI 与数据工程领域十大趋势前瞻

Baihai IDP

程序员 AI 数据工程

WebGL开发医学影像识别的挑战

北京木奇移动技术有限公司

医学影像 软件外包公司 webgl开发

云上一键部署 DeepSeek-V3 模型,阿里云PAI Model Gallery 最佳实践

阿里云大数据AI技术

人工智能 API 强化学习 LLM PAI

AI 技术在词汇学习系统的功能

北京木奇移动技术有限公司

英语学习 AI教育 软件外包

说说天翼云大规模数据中心组网架构的优势

天翼云开发者社区

云计算 数据中心 天翼云

结合LangChain实现网页数据爬取

测试人

人工智能 软件测试

数据库堡垒机是干嘛的?有什么用?怎么定义?

行云管家

网络安全 数据安全 堡垒机 数据库堡垒机

人工智能与物联网:智慧城市的未来

天津汇柏科技有限公司

物联网 AI 人工智能

域名管理常见问题:IP、域名和DNS之间的区别和关系

防火墙后吃泡面

为什么软件测试开发需要智能体(AI Agent)?

测试人

软件测试

开年「荣誉三重奏」,融云斩获技术、产品、出海三项大奖!

融云 RongCloud

Fluss: First Impression

Apache Flink

大数据 flink 实时计算 流存储

五个等保知识点总结-行云管家

行云管家

信息安全 等保 等级保护 等保测评

缓存之美——如何选择合适的本地缓存?

京东科技开发者

AI 技术开发口语对话机器人

北京木奇移动技术有限公司

AI技术 软件外包公司 AI口语练习

AI 技术在英语学习中的主要应用

北京木奇移动技术有限公司

英语学习 AI教育 软件外包公司

夜莺监控支持 ES 日志告警了

巴辉特

夜莺监控 开源监控 日志告警 ES告警

架构提效的矛盾和矛盾的主要方面

京东零售技术

【GreatSQL优化器-10】find_best_ref

GreatSQL

防火墙软件Little Snitch for mac激活版

小玖_苹果Mac软件

智慧公厕解决方案的定义、特点、技术核心!

光明源智慧厕所

VMware的快照原理

天翼云开发者社区

vmware 快照

AI 技术开发英语阅读理解系统

北京木奇移动技术有限公司

AI技术 AI教育 软件外包公司

代码之美:聊聊代码整洁之道

京东零售技术

Kubernetes 并不适合大多数团队_服务革新_Itamar Turner-Trauring_InfoQ精选文章