Ken*_*ynh 8 docker docker-compose
我有一个本地服务器,我想在其中部署许多微服务。我正在使用 docker-compose 文件来声明所有服务,并希望设置 cpu 限制。我参考下面的文档: https: //docs.docker.com/compose/compose-file/ 我的 docker compose 文件如下:
version: "3.7"
services:
redis:
image: redis:alpine
deploy:
resources:
limits:
cpus: '2'
memory: 256M
reservations:
cpus: '0.25'
memory: 64M
service1:
image: service1 image
deploy:
resources:
limits:
cpus: '2'
memory: 512M
reservations:
cpus: '0.25'
memory: 64M
...
Run Code Online (Sandbox Code Playgroud)
我对计算 cpu 限制感到困惑。例如cpu是8核。有20个微服务。有什么方法可以计算每个服务的 cpu 限制吗?或者有什么公式可以做到这一点?
----- 更新 ------ 为了更清楚,我的要点是 CPU 限制。这是因为如果一个微服务的 CPU 使用该微服务 80% 的 CPU,我想发送警报。如果我不设置cpu限制,微服务CPU使用率真的会和主机CPU使用率一样吗?我不使用 Docker 的 Swarn,只使用 Docker。
任何想法都非常感激。
谢谢,
bli*_*web 15
欢迎来到 2022 年。我使用的是 docker-compose 版本 1.29,yaml 版本为 3.9
如果我将 yml 文件设置如下:
version: '3.9'
services:
astro-cron:
build: ./cron
image: astro-cron
restart: unless-stopped
volumes:
- /home/docker-sync/sites/com/cron:/astro/cron
environment:
- TZ=America/Phoenix
mem_limit: 300m
mem_reservation: 100m
cpus: 0.3
Run Code Online (Sandbox Code Playgroud)
它很好地将容器 cpu 限制为机器的 30%。如果超出内存限制,容器将被终止,容器将自动重新启动。
cpu 限制不会杀死任何东西,只是保持不变。
我没有使用 docker swarm。
附言。解决另一个答案:CPU 过度使用不是问题。如果您的一个容器是不重要的后台作业,而另一个容器是面向客户的网站或数据库,那就是一个问题。除非有人能解释为什么情况并非如此。
过度使用 CPU 并不是真正的问题。如果您有 16 个进程,并且它们都试图在 8 核系统上执行需要 100% CPU 的工作,则内核将在进程之间进行分时;实际上,您应该期望这些进程每个获得 50% 的 CPU,而任务只需要两倍的时间。我(在 Kubernetes 领域)听到的一条建议是根据服务的稳态负载要求设置 CPU 请求,而不是设置 CPU 限制。
没有什么神奇的公式可以设置这些数字。最好的方法是设置一些指标系统(例如 Prometheus),运行组合系统,然后查看实际的资源利用率。在某些情况下,可以知道某个进程是单线程的,并且永远不会使用超过 1 个核心,或者您希望某个进程受到 I/O 限制,如果不是,则应该受到限制,但这些设置应基于实际情况使用可能会更好。
(内存是不同的,因为您实际上可能会耗尽物理内存,而且进程能够保留比实际需要更多的内存。同样,度量工具在这里会很有帮助。)
您的问题建议使用单个主机。本deploy:
节仅适用于 Docker 的 Swarm 集群管理器。如果您不使用 Swarm,那么您需要使用一个version: '2'
docker-compose.yml
文件,该文件具有一组不同的资源约束声明(并且大多数没有“保留”的概念)。例如,
version: '2'
services:
redis:
image: redis:alpine
# cpus: 2.0
mem_limit: 256m
mem_reservation: 64m
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28378 次 |
最近记录: |