Mat*_*att 35
您可以遇到许多系统限制(并且可以解决),但是依赖于大量的灰色区域
下图来自boot2docker 1.11.1 vm映像,该映像基于Tiny Core Linux 7.内核是4.4.8
Docker创建或使用许多资源来运行容器,而不是在容器内运行的容器.
docker0
网桥(每个网桥最多1023个)shm
文件系统(每个fs类型最多1048576次安装)docker-containerd-shim
管理流程(平均每个容器大约3MB sysctl kernel.pid_max
)cgroup
和名称空间ulimit -n
和sysctl fs.file-max
)-p
将在主机上为每个端口号运行额外的进程(avg pre 1.12上每个端口约4.5MB,每个端口约300k> 1.12 sysctl kernel.pid_max
)--net=none
并且--net=host
会删除网络开销.总体限制通常取决于你在容器内运行的内容而不是码头工人的开销(除非你做了一些深奥的事情,比如测试你可以运行多少个容器:)
如果您在虚拟机(node,ruby,python,java)中运行应用程序,内存使用可能会成为您的主要问题.
1000个进程中的IO会导致很多IO争用.
尝试同时运行的1000个进程会导致大量的上下文切换(请参阅上面的vm apps进行垃圾回收)
如果您从1000个容器创建网络连接,则主机网络层将进行锻炼.
调整linux主机以运行1000个进程并没有太大的不同,只需要包含一些额外的Docker开销.
1023运行的Docker busybox映像nc -l -p 80 -e echo host
占用大约1GB的内核内存和3.5GB的系统内存.
nc -l -p 80 -e echo host
在主机上运行的1023个普通进程使用大约75MB的内核内存和125MB的系统内存
连续开始1023个容器需要约8分钟.
连续杀死1023个集装箱需要约6分钟
小智 14
从邮件列表上的帖子,大约1000个容器,您开始遇到Linux网络问题.
原因是:
这是内核,特别是net/bridge/br_private.h.由于生成树要求,无法扩展BR_PORT_BITS.
小智 5
借助 Docker-compose,我能够在单个主机(具有 190GB 内存)上运行超过 6k 个容器。容器镜像小于 10MB。但由于网桥限制,我将容器分批划分为多个服务,每个服务有 1k 个容器和独立的子网。
docker-compose -f docker-compose.yml up --scale servicename=1000 -d
Run Code Online (Sandbox Code Playgroud)
但在达到 6k 后,尽管内存仍然可用在 60GB 左右,但它会停止缩放并突然增加内存。docker 团队应该发布基准数据来提供帮助,但不幸的是它不可用。另一方面,Kubernetes 发布了关于每个节点推荐的 Pod 数量的基准统计数据。
归档时间: |
|
查看次数: |
24084 次 |
最近记录: |