写点什么

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:455786

评论 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
回复
没有更多了
发现更多内容

OpenHarmony使用ArkUI Inspector分析布局

OpenHarmony开发者

OpenHarmony

Autodesk AutoCAD 2021 for mac(cad2021) v2021.1.2永久激活版

mac

苹果mac Windows软件 CAD设计软件 AutoCAD 2021

文心一言 VS 讯飞星火 VS chatgpt (86)-- 算法导论8.2 3题

福大大架构师每日一题

福大大架构师每日一题

业务不想停机,就得这么实现MongoDB迁移

NineData

mongodb 数据迁移 NineData MongoDB迁移 全量数据迁移

AI应用如何进行测试?

互联网工科生

人工智能 AI

麒麟云容器运行时优化之容器停止优化

麒麟云

Kubernetes 云原生 银河麒麟云原生操作系统

“AI+算力”为出海企业打上了一剂“强心针”

千流出海

媒体 采访 出海

NFTScan | 08.28~09.03 NFT 市场热点汇总

NFT Research

NFT\

你应该知道的几个大数据平台相关术语

行云管家

数据中台 数据安全 大数据平台

如何避免财务共享流程设计不够落地导致实施初期重新设计的问题

用友BIP

智能财务 财务共享

重新定义内容创作和教育的新范式

百度开发者中心

人工智能 文心一言 文心大模型‘

影响LED显示屏价格的因素

Dylan

软件 硬件 价格 LED显示屏 led显示屏厂家

开箱即用!3个视频教你玩转华为云CodeArts Board!

华为云PaaS服务小智

云计算 软件开发 华为云

做等保测评的公司有多少家?哪里可以查到?

行云管家

网络安全 等级保护 等保测评 等保测评机构 行云堡垒

聚焦用户隐私安全,华为助力APP开发者守护个人信息安全

最新动态

龙智携手Atlassian和JFrog举办线下研讨会,探讨如何提升企业级开发效率与质量

龙智—DevSecOps解决方案

Atlassian JFrog

夏天不开车?沃尔沃XC40纯电版为你带来清凉与健康

新消费日报

时尚行业的前沿与挑战

百度开发者中心

人工智能 ChatGPT 生成式AI 文心一言

ClickHouse在腾讯游戏营销效果分析中的探索实践

腾讯云大数据

Clickhouse

D&R IP-SoC China 2023 Day演讲预告 | 龙智Perforce专家解析芯片开发中的数字资产管理

龙智—DevSecOps解决方案

芯片 半导体

荣耀开发者沙龙 · 北京站 活动精彩回顾

荣耀开发者服务平台

开发者 互联网技术 互联网生态 安卓 ios honor

数仓资源管控理论已掌握,是时候实战了

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号9月PK榜

入坑ThreadLocal,这一篇文章就够了

树上有只程序猿

Java ThreadLocal

公众期待开放的自然语言处理神器

百度开发者中心

人工智能 ChatGPT 文心一言

引领未来,挑战与机遇并存

百度开发者中心

人工智能 图像识别 文心大模型

细数2019-2023年CWE TOP 25 数据,看软件缺陷的防护

华为云开发者联盟

安全 后端 华为云 华为云开发者联盟 企业号9月PK榜

开发指导—利用CSS动画实现HarmonyOS动效(二)

HarmonyOS开发者

HarmonyOS

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