想象一下這個場景,你有一個服務,想要最好的運行狀態,必須需要一定的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是否可以設置內存、內存使用的最大值?如何設置?