Kubernetes和Docker效率

问题描述 投票:2回答:1

我一直在寻找有关Kubernetes和Docker在使用机器资源方面的效率的信息,但是到目前为止我还没有发现太多。这是我的三个问题,全部与Kubernetes + Docker有关:

  • 如果同一节点上的多个容器运行相同的二进制文件,那么所有这些实例之间是否共享代码页?也就是说,是否在节点上为所有这些进程分配了一组物理页面?例如,如果我正在运行一个像Istio这样的服务网格,它在每个Pod中运行Envoy,那么该系统是否足够智能,只需将Envoy代码加载到内存中一次,或者发生的所有间接访问都会导致Linux内核无法识别可以共享吗?

  • 在大型Kubernetes部署中,最终每个节点上都会有大量冗余下载的Docker映像。取而代之的是,为所有节点都可以从中获取这些图像的单个群集内存储库似乎更为有效。我看到this关于让docker使用NFS来存储公共映像。这是唯一的答案吗?

  • 我听说Kubernetes将在单个节点(30)上调度的Pod数量存在实际限制。如此小的限制迫使您使用较小的VM,以使其完全饱和。有人知道为什么存在这个限制,以及最终是否会提高呢?我在尝试在完全不使用VM的裸机上运行Kubernetes的情况下问这个问题。在这样的世界中,我希望能够在一台(大型)物理计算机上打包30多个Pod。

感谢您的见解或指导。

docker kubernetes
1个回答
0
投票

您以计划将docker用作kubernetes的容器运行时的方式陈述您的问题。很好-但还有更多选择。根据运行时间,答案将有所变化。通常,kubernetes提供了对pod /容器实际调度和运行的抽象。也许您花了太多的人力在细节上,而这些细节可以用更多便宜的金属解决。

单个节点上的多个容器通常只是(docker / containerd / crio)系统进程。就像您自己多次启动Apache httpd一样。如果内核使用内存重复数据删除,则它确实可以共享页面。如果您使用启动微型VM的容器运行时(爆竹,kata等),我怀疑可以进行重复数据删除。

我不建议共享容器映像的存储空间,例如使用NFS。对于某些客户设置,我不得不诊断由此引起的问题。像僵局一样。基本上,您将降低群集的健壮性,以节省磁盘空间。只需使用更多的金属。

通常的限制是每个节点110个Pod,通常足够。您可以使用--max-pods参数更改kubelet进程或kubelet的配置文件的限制。限制的原因是,对Pod的管理需要在kubelet和etcd / apiserver方面进行工作。

© www.soinside.com 2019 - 2024. All rights reserved.