gpt4 book ai didi

docker - 为什么 Kubernetes 源代码比其他容器编排器大一个数量级?

转载 作者:IT老高 更新时间:2023-10-28 12:47:24 25 4
gpt4 key购买 nike

考虑其他编排工具,例如 dokku , dcos, deis, flynn , docker swarm 等。就代码行数而言,Kubernetes 与它们相差无几,平均而言,这些工具大约有 100k-200k 行代码。

直觉上,管理容器(即检查运行状况、上下扩展容器、终止容器、重新启动容器等)并不一定包含 240 万多行代码,这让我感觉很奇怪(这是整个操作系统代码库的规模),我觉得它还有更多内容。

Kubernetes 与其他编排解决方案相比有何不同之处?

我对维护超过 5-6 台服务器一无所知。请解释它为什么这么大,其中有哪些功能发挥了重要作用

最佳答案

首先:不要被代码行数误导了,大部分都是vendor文件夹下的依赖,不考虑核心逻辑(实用程序、客户端库、gRPC、etcd、 等)。

使用 cloc 进行原始 LoC 分析

透视,对于 Kubernetes:

$ cloc kubernetes --exclude-dir=vendor,_vendor,build,examples,docs,Godeps,translations
7072 text files.
6728 unique files.
1710 files ignored.

github.com/AlDanial/cloc v 1.70 T=38.72 s (138.7 files/s, 39904.3 lines/s)
--------------------------------------------------------------------------------
Language files blank comment code
--------------------------------------------------------------------------------
Go 4485 115492 139041 1043546
JSON 94 5 0 118729
HTML 7 509 1 29358
Bourne Shell 322 5887 10884 27492
YAML 244 374 508 10434
JavaScript 17 1550 2271 9910
Markdown 75 1468 0 5111
Protocol Buffers 43 2715 8933 4346
CSS 3 0 5 1402
make 45 346 868 976
Python 11 202 305 958
Bourne Again Shell 13 127 213 655
sed 6 5 41 152
XML 3 0 0 88
Groovy 1 2 0 16
--------------------------------------------------------------------------------
SUM: 5369 128682 163070 1253173
--------------------------------------------------------------------------------

对于 Docker(而不是 Swarm 或 Swarm 模式,因为它包含更多功能,例如卷、网络和这些存储库中不包含的插件)。我们不包括 MachineComposelibnetwork 等项目,因此实际上整个 docker 平台可能包含更多的 LoC:

$ cloc docker --exclude-dir=vendor,_vendor,build,docs
2165 text files.
2144 unique files.
255 files ignored.

github.com/AlDanial/cloc v 1.70 T=8.96 s (213.8 files/s, 30254.0 lines/s)
-----------------------------------------------------------------------------------
Language files blank comment code
-----------------------------------------------------------------------------------
Go 1618 33538 21691 178383
Markdown 148 3167 0 11265
YAML 6 216 117 7851
Bourne Again Shell 66 838 611 5702
Bourne Shell 46 768 612 3795
JSON 10 24 0 1347
PowerShell 2 87 120 292
make 4 60 22 183
C 8 27 12 179
Windows Resource File 3 10 3 32
Windows Message File 1 7 0 32
vim script 2 9 5 18
Assembly 1 0 0 7
-----------------------------------------------------------------------------------
SUM: 1915 38751 23193 209086
-----------------------------------------------------------------------------------

Please note that these are very raw estimations, using cloc. This might be worth a deeper analysis.

粗略地说,该项目似乎占问题中提到的 LoC(~1250K LoC)的一半(您是否重视依赖关系,这是主观的)。

Kubernetes 中包含什么使其如此庞大?

大部分膨胀来自支持各种云提供商的库,以简化其平台上的引导或通过插件支持特定功能(卷等)。它还有 LotExamples从行数中解散。一个公平的 LoC 估计需要排除大量不必要的文档和示例目录。

Docker SwarmNomadDokku 相比,它还功能丰富得多。 .它支持高级网络场景,内置负载均衡,包括PetSets , Cluster Federation 、音量插件或其他项目尚不支持的其他功能。

它支持多个容器引擎,因此它不仅可以运行 docker 容器,还可以运行其他引擎(例如 rkt)。

很多核心逻辑都涉及与其他组件的交互:键值对存储、客户端库、插件等,远远超出了简单的场景。

分布式系统是出了名的困难,而 Kubernetes 似乎毫不妥协地支持容器行业主要参与者的大多数工具(其他解决方案正在做出这样的妥协) )。因此,该项目可能看起来人为地臃肿并且对于其核心任务(大规模部署容器)来说太大了。实际上,这些统计数据并不令人惊讶。

关键思想

KubernetesDockerDokku 进行比较并不合适。该项目的范围要大得多,并且包含更多功能,因为它不仅限于 Docker 工具系列。

虽然 Docker 的许多功能分散在多个库中,但 Kubernetes 倾向于将所有内容都放在其核心存储库中(这大大增加了行数,但也说明了该项目的受欢迎程度)。

考虑到这一点,LoC 统计数据并不令人惊讶。

关于docker - 为什么 Kubernetes 源代码比其他容器编排器大一个数量级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41586501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com