如何为swarm中的service设置需要cpu和内存?


想象一下这个场景,你有一个服务,想要最好的运行状态,必须需要一定的CPU和内存的数量,这样的场景,如何在service中进行设置?

 

也就是说,为service设置一个cpu和内存的值,swarm集群中的节点,只有满足这个要求的才能运行这个task。

 

参数

 

设置的方法,非常的简单,在创建service的时候,通过下面的参数指定cpu和内存的需求值

 

--reserve-memory 
--reserve-cpu

 

示例:有满足资源需求的节点

 

来看个例子,运行一个nginx的service,cpu要求2核,内存512M

 

docker service create \
  --with-registry-auth \
  --name=nginx \
  --replicas=3 \
  --reserve-memory=512M \
  --reserve-cpu=2 \
  --publish published=8080,target=80 \
  172.20.58.152/middleware/nginx:1.21.4

 

 

部署过程及service运行状态

[root@nccztsjb-node-01 ~]# docker service create \
>   --with-registry-auth \
>   --name=nginx \
>   --replicas=3 \
>   --reserve-memory=512M \
>   --reserve-cpu=2 \
>   --publish published=8080,target=80 \
>   172.20.58.152/middleware/nginx:1.21.4
rd9svjyzuopxzt6954lsxs6il
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 
[root@nccztsjb-node-01 ~]# 


[root@nccztsjb-node-01 ~]# docker service ls
ID             NAME      MODE         REPLICAS   IMAGE                                   PORTS
rd9svjyzuopx   nginx     replicated   3/3        172.20.58.152/middleware/nginx:1.21.4   *:8080->80/tcp
[root@nccztsjb-node-01 ~]# docker service ps nginx
ID             NAME      IMAGE                                   NODE               DESIRED STATE   CURRENT STATE                ERROR     PORTS
2nrgamav1lpe   nginx.1   172.20.58.152/middleware/nginx:1.21.4   nccztsjb-node-02   Running         Running about a minute ago             
2e341d756d06   nginx.2   172.20.58.152/middleware/nginx:1.21.4   nccztsjb-node-01   Running         Running about a minute ago             
sz1earbc8c2e   nginx.3   172.20.58.152/middleware/nginx:1.21.4   nccztsjb-node-05   Running         Running about a minute ago             
[root@nccztsjb-node-01 ~]# 

 

 

查看service的详细信息,在Resources中,保留的CPU是2,内存:512MiB

 

 

这个例子是,swarm集群节点中的资源满足service的要求,如果没有节点满足这个要求,service的状态会怎么样,看下面的例子······

 

示例:节点资源不满足service资源需求

 

主机是8c,16g,但是创建service的时候,指定需要9c

 

docker service create \
  --with-registry-auth \
  --name=nginx \
  --replicas=3 \
  --reserve-memory=512M \
  --reserve-cpu=9 \
  --publish published=8080,target=80 \
  172.20.58.152/middleware/nginx:1.21.4

 

 

部署时,会显示:no suitable node (insufficient resources on 4 nodes)

 

由于不满足资源的要求,在集群的4个节点上,都不适合运行这些task,所以,部署失败了!

 

以上,简单说明了下,service在创建时设置的资源的要求,但是下面的问题,你还需要考虑:

 

1、节点上已经运行task,占用内存之后,就剩512M,但是主机是16G,此时申请4G的service,可否被调度到这个节点上面?

 

2、service是否可以设置内存、内存使用的最大值?如何设置?

 

 

posted @ 2022-09-21 11:03  Zhai_David  阅读(217)  评论(0编辑  收藏  举报