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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章