如何为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是否可以设置内存、内存使用的最大值?如何设置?