限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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

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

哈银消费金融合规经营,持续稳健发展

极客天地

纯CSS实现有趣emoji切换开关

南城FE

CSS 前端

Chrome Extension 开发中的 Tab 操作与实践

FunTester

加入极限科技(INFINI Labs),成为搜索运维工程师!

极限实验室

招聘 搜索引擎运维

神奇的css选择器

六哥是全栈

CSS 前端‘’

Cisco Catalyst 9000 交换产品系列 IOS XE 17.15.1 发布下载,新增功能概览

sysin

Cisco 交换机

微软远程连接工具:Microsoft Remote Desktop for Mac 中文直装版

你的猪会飞吗

microsoft remote desktop Mac破解软件 mac破解软件下载

阿里巴巴商品详情API:1688电商发展新趋势下的数据驱动力

代码忍者

API 测试 pinduoduo API

中小企业为什么要上MES系统?

万界星空科技

mes 中小企业 万界星空科技mes 生产管理MES系统

Web应用是指什么?堡垒机对Web应用进行管理有什么好处?

行云管家

Web应用 Web 应用防火墙

望繁信科技亮相2023北京央企部委及大型企业CIO年会,为“数字化转型”注入全新想象

望繁信科技

数字化转型 流程挖掘 流程资产 流程智能 业务流程管理优化

Pencils Protocol生态经济全面运转,持续通缩的DAPP潜力颇大

股市老人

免费赠书、多样字体、丰富音色,华为阅读带用户多读书、读好书

最新动态

Pencils Protocol 全面推动市场,低流通的 DAPP 将持续通缩

加密眼界

“你好BOE”重磅亮相首届上海国际光影节 打造“艺术x科技”顶级影像盛宴

爱极客侠

专访 Bitlayer 联合创始人 Charlie:探索比特币 Layer2 技术的未来

TechubNews

700+开发者齐聚5城共探鸿蒙原生应用Codelabs

最新动态

AI西游记:企业如何闯过大模型的「火焰山」?

脑极体

AI

《Programming from the Ground Up》阅读笔记:p117-p146

codists

汇编 assembly 编程人

Pencils Protocol 全面推动市场,低流通的 DAPP 将持续通缩

石头财经

VMware Aria Suite 8.18 发布 - 云管理解决方案

sysin

vmware aria

Cisco SD-WAN (Viptela) 20.15.1 发布,新增功能概览

sysin

Cisco SD-WAN

Java 性能分析

FunTester

AI+,释放算力新价值论坛 | 超聚变联合伙伴发布FusionOne AI大模型解决方案

业界

TDengine 签约国家电投旗下四大火力发电厂,助力汽轮机振动数据的有效管理

TDengine

数据库 tdengine 时序数据库

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