溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解Swarm mode中的service

發(fā)布時(shí)間:2021-10-19 17:48:06 來源:億速云 閱讀:109 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹如何理解Swarm mode中的service,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

我們介紹如何操作service。

service,大家應(yīng)該不陌生,我們?cè)谥爸v過。一個(gè)service就對(duì)應(yīng)一個(gè)container容器。我們之前使用docker compose時(shí),一個(gè)service時(shí)部署在一臺(tái)機(jī)器上面的。但是我們?cè)趕warm下面,我們創(chuàng)建一個(gè)service時(shí),他可能會(huì)運(yùn)行在我們cluster中的任何一個(gè)節(jié)點(diǎn)中去,下面詳細(xì)介紹。

docker service 命令

docker service create 有點(diǎn)像docker run

在swarm下面,我們不適用docker run命令來運(yùn)行容器。docker run表示在本地創(chuàng)建一個(gè)container。而service不一定運(yùn)行在本地。所以在swarm下,一般不用docker run。

 我們用創(chuàng)建一個(gè)service:

vincent@swarm-manager:~$ docker service create --name demo busybox sh -c "while true; do sleep 3600;done"
lf0wx1k2xz3l88mandyifkdm7
overall progress: 1 out of 1 tasks
1/1: running
verify: Service converged

查看service情況:

vincent@swarm-manager:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
lf0wx1k2xz3l        demo                replicated          1/1                 busybox:latest

那么這個(gè)service運(yùn)行在哪個(gè)節(jié)點(diǎn)上呢?

vincent@swarm-manager:~$ docker service ps demo
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE               ERROR                              PORTS
hkgsjp3dswfh        demo.1              busybox:latest      swarm-worker-1      Ready               Ready 3 seconds ago

說明運(yùn)行在swarm-worker-1。

MODE replicated表示這個(gè)service是可以水平擴(kuò)展的

如何擴(kuò)展?

docker service scale demo=5

vincent@swarm-manager:~$ docker service scale demo=5
demo scaled to 5
overall progress: 5 out of 5 tasks
1/5: running
2/5: running
3/5: running
4/5: running
5/5: running
verify: Service converged
vincent@swarm-manager:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
lf0wx1k2xz3l        demo                replicated          5/5                 busybox:latest

可以看到成功擴(kuò)展了5個(gè)service。5/5表示:分母表示這個(gè)service的scale是多少,分子表示有多少個(gè)已經(jīng)正常啟動(dòng)了。    

vincent@swarm-manager:~$ docker service ps demo
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
kvngsxo8q1jv        demo.1              busybox:latest      swarm-worker-2      Running             Running 3 minutes ago
w9uw1zoncfki        demo.2              busybox:latest      swarm-worker-1      Running             Running 2 minutes ago
sxsro5dzepjc        demo.3              busybox:latest      swarm-manager       Running             Running 2 minutes ago
klxhs3ec1j6c        demo.4              busybox:latest      swarm-manager       Running             Running 2 minutes ago
yxov6fzvwsyr        demo.5              busybox:latest      swarm-worker-2      Running             Running 2 minutes ago

可以看到有兩個(gè)service在swarm-worker-2節(jié)點(diǎn)上,有兩個(gè)service在swarm-manager節(jié)點(diǎn)上,有一個(gè)在swarm-worker-1節(jié)點(diǎn)上。

我們?nèi)warm-worker-1驗(yàn)證一下:

vincent@swarm-worker-1:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f1644c316b53        busybox:latest      "sh -c 'while true; …"   3 minutes ago       Up 3 minutes                            demo.2.w9uw1zoncfkikb1iayit9mdba

有一個(gè)container。再去swarm-work-2驗(yàn)證一下:

vincent@swarm-worker-2:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
a0607b0aa4ad        busybox:latest      "sh -c 'while true; …"   4 minutes ago       Up 4 minutes                            demo.5.yxov6fzvwsyrfue8q1redjyx9
9ccc6696214e        busybox:latest      "sh -c 'while true; …"   6 minutes ago       Up 6 minutes                            demo.1.kvngsxo8q1jvd5mv6k9lcvxf1

有兩個(gè)container。再去swarm-manager驗(yàn)證一下:

vincent@swarm-manager:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
128053167c33        busybox:latest      "sh -c 'while true; …"   5 minutes ago       Up 5 minutes                            demo.4.klxhs3ec1j6cek8914lk5mhdt
dd1dca1864dc        busybox:latest      "sh -c 'while true; …"   5 minutes ago       Up 5 minutes                            demo.3.sxsro5dzepjc0mgs1phzz12ro

有兩個(gè)container。

將service橫向擴(kuò)展5個(gè)以后,一切正常。

如果刪除容器,會(huì)怎么樣?

我們將swarm-worker-2中的一個(gè)容器刪掉:

vincent@swarm-worker-2:~$ docker rm -f 9ccc6696214e
9ccc6696214e

然后早swarm-maganger上查看:

vincent@swarm-manager:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
lf0wx1k2xz3l        demo                replicated          5/5                 busybox:latest

發(fā)現(xiàn)還是5個(gè)。但是這已經(jīng)不是之前的5個(gè)容器了。

vincent@swarm-manager:~$ docker service ps demo
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR                         PORTS
vq4lgu31i4bn        demo.1              busybox:latest      swarm-worker-1      Running             Running 3 minutes ago
kvngsxo8q1jv         \_ demo.1          busybox:latest      swarm-worker-2      Shutdown            Failed 3 minutes ago     "task: non-zero exit (137)"
w9uw1zoncfki        demo.2              busybox:latest      swarm-worker-1      Running             Running 10 minutes ago
sxsro5dzepjc        demo.3              busybox:latest      swarm-manager       Running             Running 10 minutes ago
klxhs3ec1j6c        demo.4              busybox:latest      swarm-manager       Running             Running 10 minutes ago
yxov6fzvwsyr        demo.5              busybox:latest      swarm-worker-2      Running             Running 10 minutes ago

可以看到,我們?cè)趕warm-worker-2上的一個(gè)容器已經(jīng)shutdown了,但是在swarm-worker-1上重新啟動(dòng)了一個(gè)。因此swarm-worker-1上有兩個(gè)container。

因此,swarm不僅保證可以橫向擴(kuò)展,而且還保證一定數(shù)目的有效的。

當(dāng)swarm發(fā)現(xiàn)scale中的部分節(jié)點(diǎn)上的service失效,那么他會(huì)通過cluster的任一節(jié)點(diǎn)上重啟一個(gè),達(dá)到scale。可以確保系統(tǒng)是有效穩(wěn)定的。

docker service rm demo

可以刪除demo.

vincent@swarm-manager:~$ docker service rm demo
demo

關(guān)于如何理解Swarm mode中的service就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI