docker 實踐(十一)docker swarm

一、docker swarm部署

部署架構圖:

swarm.png

1.1.docker swarm初始化

1.1.docker swarm-manager初始化

[root@docker-2-120 ~]# docker swarm init --advertise-addr 192.168.2.120
Swarm initialized: current node (shyex5019e84dup8kjwgy9esj) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-2nioyk01u61y4xju7z13ngr70zglt5w0hj2bpfnn9l7d3lso34-c45yo9ivt30qmai0lp3zyb3ks 192.168.2.120:2377  
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

1.1.2.docker manager查看節點

[root@docker-2-120 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
shyex5019e84dup8kjwgy9esj *   docker-2-120        Ready               Active              Leader              18.09.0

#暫時只有管理節點

1.2.添加work節點

1.2.1.在dm1上執行:

[root@dm1 /]# docker swarm join --token SWMTKN-1-2nioyk01u61y4xju7z13ngr70zglt5w0hj2bpfnn9l7d3lso34-c45yo9ivt30qmai0lp3zyb3ks 192.168.2.120:2377
This node joined a swarm as a worker.

1.2.2.在dm2上執行:

[root@dm2 ~]# docker swarm join --token SWMTKN-1-2nioyk01u61y4xju7z13ngr70zglt5w0hj2bpfnn9l7d3lso34-c45yo9ivt30qmai0lp3zyb3ks 192.168.2.120:2377
This node joined a swarm as a worker.

1.2.3.在manger節點上查看:

[root@docker-2-120 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
32ak19ny1nib5woq9wfij5cz4     dm1                 Ready               Active                                  18.09.0
jhf5lcacfdun78t4tie3dt0zy     dm2                 Ready               Active                                  18.09.0
shyex5019e84dup8kjwgy9esj *   docker-2-120        Ready               Active              Leader              18.09.0

二、部署service

2.1.在manager上運行nginx鏡像的service

[root@docker-2-120 ~]# docker service create --name "ckl_web" nginx


2.1.1.查看service

[root@docker-2-120 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
v3ifjb3k2yye        ckl_web             replicated          1/1                 nginx:latest

#ID:serviceID

#NAME :名稱

#REPLICAS :當前的副本數量

#IMAGE :鏡像名詞

#PORTS:端口


2.1.2.查看副本狀態

[root@docker-2-120 ~]# docker service ps ckl_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
cb1cv5dgqfrh        ckl_web.1           nginx:latest        docker-2-120        Running             Running 59 seconds ago


查看容器運行:

[root@docker-2-120 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
acb5a7377b4f        nginx:latest        "nginx -g 'daemon of…"   About a minute ago   Up About a minute   80/tcp              ckl_web.1.cb1cv5dgqfrhrt2bdpk8elzhw


2.2.提升副本,模擬負載均衡

2.2.1.在manager上執行

[root@docker-2-120 ~]# docker service scale ckl_web=6
ckl_web scaled to 6
overall progress: 6 out of 6 tasks 
1/6: running   [==================================================>] 
2/6: running   [==================================================>] 
3/6: running   [==================================================>] 
4/6: running   [==================================================>] 
5/6: running   [==================================================>] 
6/6: running   [==================================================>] 
verify: Service converged


2.2.2.查看擴展後副本信息

[root@docker-2-120 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
v3ifjb3k2yye        ckl_web             replicated          6/6                 nginx:latest

查看容器運行節點:

[root@docker-2-120 ~]# docker service ps ckl_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
cb1cv5dgqfrh        ckl_web.1           nginx:latest        docker-2-120        Running             Running 7 minutes ago                            
wbx0wbr9w8tq        ckl_web.2           nginx:latest        dm1                 Running             Running about a minute ago                       
mviu588mulo2        ckl_web.3           nginx:latest        dm2                 Running             Running about a minute ago                       
ltnuyjpbj4eo        ckl_web.4           nginx:latest        dm2                 Running             Running about a minute ago                       
lil6pq81fnaa        ckl_web.5           nginx:latest        docker-2-120        Running             Running about a minute ago                       
ap36bx8k6y65        ckl_web.6           nginx:latest        dm1                 Running             Running about a minute ago


#目前正好均勻的運行在三個節點上,每個節點2個容器運行

2.2.3.如果只希望容器運行在worker節點

[root@docker-2-120 ~]# docker node update --availability drain docker-2-120 
docker-2-120

2.2.4.查看node節點狀態

[root@docker-2-120 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
32ak19ny1nib5woq9wfij5cz4     dm1                 Ready               Active                                  18.09.0
jhf5lcacfdun78t4tie3dt0zy     dm2                 Ready               Active                                  18.09.0
shyex5019e84dup8kjwgy9esj *   docker-2-120        Ready               Drain               Leader              18.09.0

2.2.5.查看service運行

[root@docker-2-120 ~]# docker service ps ckl_web                            
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
q5d9hbtzfszp        ckl_web.1           nginx:latest        dm1                 Running             Running 2 minutes ago                        
cb1cv5dgqfrh         \_ ckl_web.1       nginx:latest        docker-2-120        Shutdown            Shutdown 2 minutes ago                       
wbx0wbr9w8tq        ckl_web.2           nginx:latest        dm1                 Running             Running 9 minutes ago                        
mviu588mulo2        ckl_web.3           nginx:latest        dm2                 Running             Running 9 minutes ago                        
ltnuyjpbj4eo        ckl_web.4           nginx:latest        dm2                 Running             Running 9 minutes ago                        
ij9dt6fjjmhy        ckl_web.5           nginx:latest        dm2                 Running             Running 2 minutes ago                        
lil6pq81fnaa         \_ ckl_web.5       nginx:latest        docker-2-120        Shutdown            Shutdown 2 minutes ago                       
ap36bx8k6y65        ckl_web.6           nginx:latest        dm1                 Running             Running 9 minutes ago

#原來manager節點運行的容器已經被分攤到dm1和dm2上了

2.3.減少副本

2.3.1.減少副本數

[root@docker-2-120 ~]# docker service scale ckl_web=4
ckl_web scaled to 4
overall progress: 4 out of 4 tasks 
1/4: running   [==================================================>] 
2/4:   
3/4: running   [==================================================>] 
4/4: running   [==================================================>] 
verify: Service converged

2.3.2.查看service

[root@docker-2-120 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
v3ifjb3k2yye        ckl_web             replicated          4/4                 nginx:latest

#副本數爲4

2.3.3.查看容器運行節點

[root@docker-2-120 ~]# docker service ps ckl_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
q5d9hbtzfszp        ckl_web.1           nginx:latest        dm1                 Running             Running 7 minutes ago                        
cb1cv5dgqfrh         \_ ckl_web.1       nginx:latest        docker-2-120        Shutdown            Shutdown 7 minutes ago                       
wbx0wbr9w8tq        ckl_web.2           nginx:latest        dm1                 Running             Running 14 minutes ago                       
mviu588mulo2        ckl_web.3           nginx:latest        dm2                 Running             Running 14 minutes ago                       
ltnuyjpbj4eo        ckl_web.4           nginx:latest        dm2                 Running             Running 14 minutes ago                       
lil6pq81fnaa        ckl_web.5           nginx:latest        docker-2-120        Shutdown            Shutdown 7 minutes ago

三、故障轉移

swarm內置failover策略可以實現故障轉移

模擬dm1宕機

3.1.查看node節點狀態

[root@docker-2-120 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
32ak19ny1nib5woq9wfij5cz4     dm1                 Down                Active                                  18.09.0
jhf5lcacfdun78t4tie3dt0zy     dm2                 Ready               Active                                  18.09.0
shyex5019e84dup8kjwgy9esj *   docker-2-120        Ready               Drain               Leader              18.09.0
#dm1階段狀態爲down


3.2.查看service狀態

[root@docker-2-120 ~]# docker service ps ckl_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE             ERROR               PORTS
rs3ntbl74en3        ckl_web.1           nginx:latest        dm2                 Running             Running 2 minutes ago                         
q5d9hbtzfszp         \_ ckl_web.1       nginx:latest        dm1                 Shutdown            Running 25 minutes ago                        
cb1cv5dgqfrh         \_ ckl_web.1       nginx:latest        docker-2-120        Shutdown            Shutdown 25 minutes ago                       
kwctm7bg4jha        ckl_web.2           nginx:latest        dm2                 Running             Running 2 minutes ago                         
wbx0wbr9w8tq         \_ ckl_web.2       nginx:latest        dm1                 Shutdown            Running 33 minutes ago                        
mviu588mulo2        ckl_web.3           nginx:latest        dm2                 Running             Running 32 minutes ago                        
ltnuyjpbj4eo        ckl_web.4           nginx:latest        dm2                 Running             Running 32 minutes ago                        
lil6pq81fnaa        ckl_web.5           nginx:latest        docker-2-120        Shutdown            Shutdown 25 minutes ago

#運行在dm1上的容器,已都轉移到dm2上了,故障節點狀態是shutdown


四、訪問docker service

4.1.在manager上部署service

[root@docker-2-120 ~]# docker service create --name "ckl_nginx" --replicas=2 nginx


4.2.service運行節點

[root@docker-2-120 ~]# docker service ps ckl_nginx
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
p28o2lobduog        ckl_nginx.1         nginx:latest        dm2                 Running             Running 29 seconds ago                       
38yanzwce36u        ckl_nginx.2         nginx:latest        dm1                 Running             Running 28 seconds ago


4.3.在dm1查看容器

[root@dm1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6a835035f35f        nginx:latest        "nginx -g 'daemon of…"   51 seconds ago      Up 49 seconds       80/tcp              ckl_nginx.2.38yanzwce36uf007j0okvctus

查看容器並訪問:

[root@dm1 ~]# curl http://10.8.95.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>


4.4.端口映射,外網訪問service

[root@docker-2-120 ~]# docker service update --publish-add 8000:80 ckl_nginx

查看service狀態:

[root@docker-2-120 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
ggjfmz39jzj7        ckl_nginx           replicated          2/2                 nginx:latest        *:8000->80/tcp


[root@docker-2-120 ~]# docker service ps ckl_nginx
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE             ERROR               PORTS
r84wybzu2zez        ckl_nginx.1         nginx:latest        dm2                 Running             Running 27 seconds ago                        
p28o2lobduog         \_ ckl_nginx.1     nginx:latest        dm2                 Shutdown            Shutdown 29 seconds ago                       
t5xln1zllf3i        ckl_nginx.2         nginx:latest        dm1                 Running             Running 30 seconds ago                        
38yanzwce36u         \_ ckl_nginx.2     nginx:latest        dm1                 Shutdown            Shutdown 32 seconds ago


外網訪問:

666.png

777.png

查看docker網絡:

[root@docker-2-120 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
9a316505e6c8        bridge              bridge              local
bf0464ee4b94        ckl_net             bridge              local
33a5e13e7f47        ckl_net1            bridge              local
aed4e7c4891e        host                host                local
43z63iliw2ok        ingress             overlay             swarm  #swarm創建的overlay網絡
cf895048ef39        none                null                local

五、service 之間通信

5.1.創建overlay網絡

[root@docker-2-120 ~]# docker network create --driver overlay ckl_ov
p6qmkf3jlbgescuwurwalu5me
[root@docker-2-120 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
9a316505e6c8        bridge              bridge              local
bf0464ee4b94        ckl_net             bridge              local
33a5e13e7f47        ckl_net1            bridge              local
p6qmkf3jlbge        ckl_ov              overlay             swarm  #創建的新網絡
aed4e7c4891e        host                host                local
43z63iliw2ok        ingress             overlay             swarm
cf895048ef39        none                null                local

5.2.創建web service

[root@docker-2-120 ~]# docker service create --name "ckl_web" --replicas=3 --network ckl_ov nginx
anlm52hs5p12efn5wras7h65v
[root@docker-2-120 ~]# docker service ps ckl_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
tiqpv81m6icb        ckl_web.1           nginx:latest        dm2                 Running             Running about a minute ago                       
tl3i10w296kk        ckl_web.2           nginx:latest        dm1                 Running             Running about a minute ago                       
zdxxqy8zwnvt        ckl_web.3           nginx:latest        dm2                 Running             Running about a minute ago

5.3.創建centos service

[root@docker-2-120 ~]# docker service create --name "ckl_cent" --network ckl_ov centos sleep 10000
xut1xxmsp42mw4thixvd4iqt2
#兩個service屬於同一overlay網絡


查看service狀態:

[root@docker-2-120 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
xut1xxmsp42m        ckl_cent            replicated          1/1                 centos:latest       
anlm52hs5p12        ckl_web             replicated          3/3                 nginx:latest


[root@docker-2-120 ~]# docker service ps ckl_cent
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
fzs6ejkhangm        ckl_cent.1          centos:latest       dm1                 Running             Running 59 seconds ago

                 

5.4.在dm1上測試連通

[root@dm1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
710f6b55400d        centos:latest       "sleep 10000"            About a minute ago   Up About a minute                       ckl_cent.1.fzs6ejkhangm3r0eh8v46zljx
5f0c2ba01f88        nginx:latest        "nginx -g 'daemon of…"   About an hour ago    Up About an hour    80/tcp              ckl_web.2.tl3i10w296kks0qnh0ri8i0i4
[root@dm1 ~]# docker exec -it 710f6b55400d /bin/bash
[root@710f6b55400d /]# 
[root@710f6b55400d /]# 
[root@710f6b55400d /]# ping -c3 ckl_web
PING ckl_web (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2 (10.0.0.2): icmp_seq=1 ttl=64 time=0.122 ms
64 bytes from 10.0.0.2 (10.0.0.2): icmp_seq=2 ttl=64 time=0.168 ms
64 bytes from 10.0.0.2 (10.0.0.2): icmp_seq=3 ttl=64 time=0.120 ms
--- ckl_web ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.120/0.136/0.168/0.025 ms

#10.0.0.2是service 的VIP

在dm1上查看ip:

[root@dm1 ~]# docker inspect 5f0c2ba01f88 | grep IPAddress 
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "10.0.0.4",

在dm2上查看ip:

[root@dm2 ~]# docker inspect `docker ps | grep ckl_web | awk '{print $1}'` | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "10.0.0.5",
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "10.0.0.3",

#對於ckl_cent只需要知道webservice 的名詞就可以訪問,而不需要知道serviceip

六、swarm 升級副本

6.1.查看當前服務

[root@docker-2-120 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
xut1xxmsp42m        ckl_cent            replicated          1/1                 centos:latest       
anlm52hs5p12        ckl_web             replicated          3/3                 nginx:latest
[root@docker-2-120 ~]# docker service ps ckl_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE          ERROR               PORTS
tiqpv81m6icb        ckl_web.1           nginx:latest        dm2                 Running             Running 16 hours ago                       
tl3i10w296kk        ckl_web.2           nginx:latest        dm1                 Running             Running 16 hours ago                       
zdxxqy8zwnvt        ckl_web.3           nginx:latest        dm2                 Running             Running 16 hours ago

 

6.2.升級副本

部署service,在worker節點上要預先存在的鏡像,下面測試以及預先pull過

6.2.1.部署service服務

[root@docker-2-120 ~]# docker service create --name "ckl_web" --replicas=3 nginx:1.2.1
image nginx:1.2.1 could not be accessed on a registry to record
its digest. Each node will access nginx:1.2.1 independently,
possibly leading to different nodes running different
versions of the image.
vnwqr4prkgmqtrpagp3tu9c4n
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged

查看service狀態:

[root@docker-2-120 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
xut1xxmsp42m        ckl_cent            replicated          1/1                 centos:latest       
vnwqr4prkgmq        ckl_web             replicated          3/3                 nginx:1.2.1
[root@docker-2-120 ~]# docker service ps ckl_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
vma7lxxn29gw        ckl_web.1           nginx:1.2.1         dm2                 Running             Running 2 minutes ago                       
xiubyfckzete        ckl_web.2           nginx:1.2.1         dm2                 Running             Running 2 minutes ago                       
gmysmkahj6bz        ckl_web.3           nginx:1.2.1         dm1                 Running             Running 2 minutes ago

     

6.2.2.將service更新到1.2.2

[root@docker-2-120 ~]# 
[root@docker-2-120 ~]# docker service update --image nginx:1.2.2 ckl_web
image nginx:1.2.2 could not be accessed on a registry to record
its digest. Each node will access nginx:1.2.2 independently,
possibly leading to different nodes running different
versions of the image.
ckl_web
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged

查看service狀態:

[root@docker-2-120 ~]# docker service ps ckl_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE             ERROR               PORTS
s9b3pzrzvhgj        ckl_web.1           nginx:1.2.2         dm2                 Running             Running 15 seconds ago                        
vma7lxxn29gw         \_ ckl_web.1       nginx:1.2.1         dm2                 Shutdown            Shutdown 16 seconds ago                       
r1cp4b4c2yqb        ckl_web.2           nginx:1.2.2         dm2                 Running             Running 11 seconds ago                        
xiubyfckzete         \_ ckl_web.2       nginx:1.2.1         dm2                 Shutdown            Shutdown 13 seconds ago                       
t21saofxe7ai        ckl_web.3           nginx:1.2.2         dm1                 Running             Running 18 seconds ago                        
gmysmkahj6bz         \_ ckl_web.3       nginx:1.2.1         dm1                 Shutdown            Shutdown 20 seconds ago                
#三個副本都已經升級到1.2.2

6.2.3.查看更新配置

[root@docker-2-120 ~]# docker service inspect ckl_web
....
            },
            "UpdateConfig": {
                "Parallelism": 1,  #一次並行,更新副本數量
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
....

6.2.4.設置並行更新副本的數量及更新延遲時間

--update-parallelism 設置並行更新副本的個數

--update-delay 設置更新間隔時長


模擬副本爲6個,並行更新數量爲2,延遲爲50s

[root@docker-2-120 ~]# docker service update --replicas=6 --update-parallelism 2 --update-delay=30s --image nginx:2.2.1 ckl_web 
image nginx:2.2.1 could not be accessed on a registry to record
its digest. Each node will access nginx:2.2.1 independently,
possibly leading to different nodes running different
versions of the image.
ckl_web
overall progress: 6 out of 6 tasks 
1/6: running   [==================================================>] 
2/6: running   [==================================================>] 
3/6: running   [==================================================>] 
4/6: running   [==================================================>] 
5/6: running   [==================================================>] 
6/6: running   [==================================================>] 
verify: Service converged

6.2.5.查看更新結果

888.png

6.2.6.查看當前service配置

[root@docker-2-120 ~]# docker service inspect --pretty ckl_web
ID:             mrntpv6h7nv1cm08rt3j4she4
Name:           ckl_web
Service Mode:   Replicated
 Replicas:      6
UpdateStatus:
 State:         completed
 Started:       4 minutes ago
 Completed:     3 minutes ago
 Message:       update completed
Placement:
UpdateConfig:
 Parallelism:   2    #並行更新數量
 Delay:         30s  #更新時間間隔
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:         nginx:2.2.1
 Init:          false
Resources:
Endpoint Mode:  vip

6.2.7.更新回退

更新完畢後,如果想回退則只能回退到上一次更新版本使用參數--rollback

[root@docker-2-120 ~]# docker service update --rollback ckl_web
ckl_web
rollback: manually requested rollback 
overall progress: rolling back update: 3 out of 3 tasks 
1/3: running   [>                                                  ] 
2/3: running   [>                                                  ] 
3/3: running   [>                                                  ] 
verify: Service converged

查看回退結果:

999.png

運行了三個副本,版本爲1.2.2

七、設置service mode

service 除了replicated mode還有global mode,global mode運行每個host只能運行一個副本

7.1.創建service指定mode

[root@docker-2-120 ~]# docker service create --mode global --name "ckl_http" httpd
29bwhe6v2nltogg059svx6u3j
overall progress: 2 out of 2 tasks 
32ak19ny1nib: running   [==================================================>] 
jhf5lcacfdun: running   [==================================================>] 
verify: Service converged


[root@docker-2-120 ~]# docker service inspect ckl_http --pretty 
ID:             29bwhe6v2nltogg059svx6u3j
Name:           ckl_http
Service Mode:   Global  #mode
Placement:
UpdateConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:         httpd:latest@sha256:1a25dda4141b143ca018490fb4f64ce9aa8acb16c2660a7aa395db9fe4ae1793
 Init:          false
Resources:
Endpoint Mode:  vip

八、使用label來控制service運行位置

要想控制service運行位置必須滿足:爲node定義label;設置service運行的label node

8.1.設置dm1爲test環境

[root@docker-2-120 ~]# docker node update --label-add env=test dm1
dm1

查看dm1詳情:

1010.png

8.2.將dm2設置爲prod環境

[root@docker-2-120 ~]# docker node update --label-add env=prod dm2
dm2

查看dm2詳情:

1111.png

8.3.部署service到測試環境

[root@docker-2-120 ~]# docker service create --constraint node.labels.env==test --replicas 3 --name "ckl_test_web" --publish 8000:80 nginx
uoirr9a9no2lbuozo9qajj7gr
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged
[root@docker-2-120 ~]# docker service ps ckl_test_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
xwd5kcug0fxg        ckl_test_web.1      nginx:latest        dm1                 Running             Running 40 seconds ago                       
6w4rbz13ls2w        ckl_test_web.2      nginx:latest        dm1                 Running             Running 40 seconds ago                       
mkmglm5eroa6        ckl_test_web.3      nginx:latest        dm1                 Running             Running 40 seconds ago

1212.png

8.4.更新service,遷移到生產環境

8.4.1.刪除原來的constraint

[root@docker-2-120 ~]# docker service update --constraint-rm node.labels.env==test ckl_test_web
ckl_test_web
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged

8.4.2.更新constraint到生產環境

[root@docker-2-120 ~]# docker service update --constraint-add node.labels.env==prod ckl_test_web
ckl_test_web
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged

8.4.3.查看服務狀態

1313.png

8.4.4.constraint結合global mode

比如在生產環境中獲取某些文件內容

[root@docker-2-120 ~]# docker service create --mode global --constraint node.labels.env==prod --name "ckl_pro_http" httpd
gc5wse0q9q7exqz6yqky2mdiz
overall progress: 1 out of 1 tasks 
jhf5lcacfdun: running   [==================================================>] 
verify: Service converged

1414.png

參考:https://docs.docker.com/engine/reference/commandline/service_create/#create-a-service-with-a-rolling-update-policy

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