• docker swarm 实例


    1.配置三台虚拟机

    先在virtualbox上生成三个Linux主机,一个manager1(管理节点),两个工作节点worker1和worker2

    1)manager1

    userdeMacBook-Pro:~ user$ docker-machine create --engine-registry-mirror=https://hes89po0.mirror.aliyuncs.com --virtualbox-boot2docker-url=/Users/user/.docker/machine/cache/boot2docker.iso -d virtualbox manager1
    Running pre-create checks...
    (manager1) Boot2Docker URL was explicitly set to "/Users/user/.docker/machine/cache/boot2docker.iso" at create time, so Docker Machine cannot upgrade this machine to the latest version.
    Creating machine...
    (manager1) Boot2Docker URL was explicitly set to "/Users/user/.docker/machine/cache/boot2docker.iso" at create time, so Docker Machine cannot upgrade this machine to the latest version.
    (manager1) Downloading /Users/user/.docker/machine/cache/boot2docker.iso from /Users/user/.docker/machine/cache/boot2docker.iso...
    (manager1) Creating VirtualBox VM...
    (manager1) Creating SSH key...
    (manager1) Starting the VM...
    (manager1) Check network to re-create if needed...
    (manager1) Waiting for an IP...
    Waiting for machine to be running, this may take a few minutes...
    Detecting operating system of created instance...
    Waiting for SSH to be available...
    Detecting the provisioner...
    Provisioning with boot2docker...
    Copying certs to the local machine directory...
    Copying certs to the remote machine...
    Setting Docker configuration on the remote daemon...
    Checking connection to Docker...
    Docker is up and running!
    To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env manager1

    查看状态:

    userdeMBP:~ user$ docker-machine env manager1
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://192.168.99.101:2376"
    export DOCKER_CERT_PATH="/Users/user/.docker/machine/machines/manager1"
    export DOCKER_MACHINE_NAME="manager1"
    # Run this command to configure your shell: 
    # eval $(docker-machine env manager1)

    查看版本:

    userdeMacBook-Pro:~ user$ docker-machine version manager1
    18.09.0

    2)worker1

    userdeMBP:~ user$ docker-machine create --engine-registry-mirror=https://hes89po0.mirror.aliyuncs.com --virtualbox-boot2docker-url=/Users/user/.docker/machine/cache/boot2docker.iso -d virtualbox worker1
    Running pre-create checks...
    (worker1) Boot2Docker URL was explicitly set to "/Users/user/.docker/machine/cache/boot2docker.iso" at create time, so Docker Machine cannot upgrade this machine to the latest version.
    Creating machine...
    (worker1) Boot2Docker URL was explicitly set to "/Users/user/.docker/machine/cache/boot2docker.iso" at create time, so Docker Machine cannot upgrade this machine to the latest version.
    (worker1) Downloading /Users/user/.docker/machine/cache/boot2docker.iso from /Users/user/.docker/machine/cache/boot2docker.iso...
    (worker1) Creating VirtualBox VM...
    (worker1) Creating SSH key...
    (worker1) Starting the VM...
    (worker1) Check network to re-create if needed...
    (worker1) Waiting for an IP...
    Waiting for machine to be running, this may take a few minutes...
    Detecting operating system of created instance...
    Waiting for SSH to be available...
    Detecting the provisioner...
    Provisioning with boot2docker...
    Copying certs to the local machine directory...
    Copying certs to the remote machine...
    Setting Docker configuration on the remote daemon...
    Checking connection to Docker...
    Docker is up and running!
    To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env worker1
    
    userdeMBP:~ user$ docker-machine env worker1
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://192.168.99.102:2376"
    export DOCKER_CERT_PATH="/Users/user/.docker/machine/machines/worker1"
    export DOCKER_MACHINE_NAME="worker1"
    # Run this command to configure your shell: 
    # eval $(docker-machine env worker1)

    3)worker2

    userdeMBP:~ user$ docker-machine create --engine-registry-mirror=https://hes89po0.mirror.aliyuncs.com --virtualbox-boot2docker-url=/Users/user/.docker/machine/cache/boot2docker.iso -d virtualbox worker2
    Running pre-create checks...
    (worker2) Boot2Docker URL was explicitly set to "/Users/user/.docker/machine/cache/boot2docker.iso" at create time, so Docker Machine cannot upgrade this machine to the latest version.
    Creating machine...
    (worker2) Boot2Docker URL was explicitly set to "/Users/user/.docker/machine/cache/boot2docker.iso" at create time, so Docker Machine cannot upgrade this machine to the latest version.
    (worker2) Downloading /Users/user/.docker/machine/cache/boot2docker.iso from /Users/user/.docker/machine/cache/boot2docker.iso...
    (worker2) Creating VirtualBox VM...
    (worker2) Creating SSH key...
    (worker2) Starting the VM...
    (worker2) Check network to re-create if needed...
    (worker2) Waiting for an IP...
    Waiting for machine to be running, this may take a few minutes...
    Detecting operating system of created instance...
    Waiting for SSH to be available...
    Detecting the provisioner...
    Provisioning with boot2docker...
    Copying certs to the local machine directory...
    Copying certs to the remote machine...
    Setting Docker configuration on the remote daemon...
    Checking connection to Docker...
    Docker is up and running!
    To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env worker2
    
    userdeMBP:
    ~ user$ docker-machine env worker2 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.103:2376" export DOCKER_CERT_PATH="/Users/user/.docker/machine/machines/worker2" export DOCKER_MACHINE_NAME="worker2" # Run this command to configure your shell: # eval $(docker-machine env worker2)

    虚拟机上状态为:

     他们的IP地址分别是192.168.99.101,192.168.99.102,192.168.99.103

    2.开始创建集群

    1)先进入到manager1环境下,然后运行init命令:

    userdeMBP:~ user$ docker-machine ssh manager1
       ( '>')
      /) TC (   Core is distributed with ABSOLUTELY NO WARRANTY.
     (/-_--_-)           www.tinycorelinux.net
    
    docker@manager1:~$ docker swarm init --advertise-addr 192.168.99.101
    Swarm initialized: current node (i2pkhzq17szv3sjawgz0eafdn) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-5lbt98t7j553bzwqysglhcq16bwkayev8uundmzu6cfbp592s5-evhywv8wwp1fa7euzlvsv68xd 192.168.99.101:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    docker@manager1:~$ 

    2)然后就能够查看创建出来的集群的当前状态了:

    docker@manager1:~$ docker info
    Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
    Images: 0
    Server Version: 18.09.0
    Storage Driver: overlay2
     Backing Filesystem: extfs
     Supports d_type: true
     Native Overlay Diff: true
    Logging Driver: json-file
    Cgroup Driver: cgroupfs
    Plugins:
     Volume: local
     Network: bridge host macvlan null overlay
     Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
    Swarm: active
     NodeID: i2pkhzq17szv3sjawgz0eafdn
     Is Manager: true
     ClusterID: m5zzclnwvccl8okibvjjypl6i
     Managers: 1
     Nodes: 1
     Default Address Pool: 10.0.0.0/8   //默认的地址池
     SubnetSize: 24
     Orchestration:
      Task History Retention Limit: 5
     Raft:
      Snapshot Interval: 10000
      Number of Old Snapshots to Retain: 0
      Heartbeat Tick: 1
      Election Tick: 10
     Dispatcher:
      Heartbeat Period: 5 seconds
     CA Configuration:
      Expiry Duration: 3 months
      Force Rotate: 0
     Autolock Managers: false
     Root Rotation In Progress: false
     Node Address: 192.168.99.101
     Manager Addresses:
      192.168.99.101:2377
    Runtimes: runc
    Default Runtime: runc
    Init Binary: docker-init
    containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
    runc version: 69663f0bd4b60df09991c08812a60108003fa340
    init version: fec3683
    Security Options:
     seccomp
      Profile: default
    Kernel Version: 4.14.79-boot2docker
    Operating System: Boot2Docker 18.09.0 (TCL 8.2.1)
    OSType: linux
    Architecture: x86_64
    CPUs: 1
    Total Memory: 989.4MiB
    Name: manager1
    ID: K5LW:JU36:FYGM:3TUG:B7IY:K27B:TKSQ:SPIU:64SK:AWO3:OP3S:BFZO
    Docker Root Dir: /mnt/sda1/var/lib/docker
    Debug Mode (client): false
    Debug Mode (server): false
    Registry: https://index.docker.io/v1/
    Labels:
     provider=virtualbox
    Experimental: false
    Insecure Registries:
     127.0.0.0/8
    Registry Mirrors:
     https://hes89po0.mirror.aliyuncs.com/
    Live Restore Enabled: false
    Product License: Community Engine

    3)查看节点消息:

    docker@manager1:~$ docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    i2pkhzq17szv3sjawgz0eafdn *   manager1            Ready               Active              Leader              18.09.0

    节点ID旁边的*表示你当前正在此节点上连接。

    3.添加节点到集群中

    1)首先先进入到worker1的环境下,然后运行join命令:

    docker@worker1:~$ docker swarm join --token SWMTKN-1-5lbt98t7j553bzwqysglhcq16bwkayev8uundmzu6cfbp592s5-evhywv8wwp1fa7euzlvsv68xd 192.168.99.101:2377
    This node joined a swarm as a worker.

    如果你忘记了连接令牌的值,可以到manager1的环境下运行下面的命令查看:

    docker@manager1:~$ docker swarm join-token worker       
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-5lbt98t7j553bzwqysglhcq16bwkayev8uundmzu6cfbp592s5-evhywv8wwp1fa7euzlvsv68xd 192.168.99.101:2377

    然后在manager1环境上查看现在集群中的节点信息:

    docker@manager1:~$ docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    i2pkhzq17szv3sjawgz0eafdn *   manager1            Ready               Active              Leader              18.09.0
    qk6radp5986xbfserk3m8wnt6     worker1             Ready               Active                                  18.09.0

    2)然后进入worker2环境,执行与上面相同的内容:

    docker@worker2:~$ docker swarm join --token SWMTKN-1-5lbt98t7j553bzwqysglhcq16bwkayev8uundmzu6cfbp592s5-evhywv8wwp1fa7euzlvsv68xd 192.168.99.101:2377
    This node joined a swarm as a worker.

    在manager1环境上查看节点信息:

    docker@manager1:~$ docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    i2pkhzq17szv3sjawgz0eafdn *   manager1            Ready               Active              Leader              18.09.0
    qk6radp5986xbfserk3m8wnt6     worker1             Ready               Active                                  18.09.0
    bvfa8budw71nlesdbqqtzmfmm     worker2             Ready               Active                                  18.09.0

    到此为止,集群就创建成功了

    4.部署服务

    1)进入manager1环境运行service create命令:

    docker@manager1:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com
    gv1uwdh4574kf29b2vu6uu0pr
    overall progress: 1 out of 1 tasks 
    1/1: running   
    verify: Service converged 

    然后查看运行的服务的信息:

    docker@manager1:~$ docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    gv1uwdh4574k        helloworld          replicated          1/1                 alpine:latest 

    2)对集群中的服务进行检查

    docker@manager1:~$ docker service inspect --pretty helloworld
    
    ID:        gv1uwdh4574kf29b2vu6uu0pr
    Name:        helloworld
    Service Mode:    Replicated
     Replicas:    1
    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:        alpine:latest@sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1
     Args:        ping docker.com 
     Init:        false
    Resources:
    Endpoint Mode:    vip

    去掉--pretty,则返回json格式,不易读:

    docker@manager1:~$ docker service inspect helloworld
    [
        {
            "ID": "gv1uwdh4574kf29b2vu6uu0pr",
            "Version": {
                "Index": 21
            },
            "CreatedAt": "2019-01-10T06:28:51.634811423Z",
            "UpdatedAt": "2019-01-10T06:28:51.634811423Z",
            "Spec": {
                "Name": "helloworld",
                "Labels": {},
                "TaskTemplate": {
                    "ContainerSpec": {
                        "Image": "alpine:latest@sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1",
                        "Args": [
                            "ping",
                            "docker.com"
                        ],
                        "Init": false,
                        "StopGracePeriod": 10000000000,
                        "DNSConfig": {},
                        "Isolation": "default"
                    },
                    "Resources": {
                        "Limits": {},
                        "Reservations": {}
                    },
                    "RestartPolicy": {
                        "Condition": "any",
                        "Delay": 5000000000,
                        "MaxAttempts": 0
                    },
                    "Placement": {
                        "Platforms": [
                            {
                                "Architecture": "amd64",
                                "OS": "linux"
                            },
                            {
                                "OS": "linux"
                            },
                            {
                                "Architecture": "arm64",
                                "OS": "linux"
                            },
                            {
                                "Architecture": "386",
                                "OS": "linux"
                            },
                            {
                                "Architecture": "ppc64le",
                                "OS": "linux"
                            },
                            {
                                "Architecture": "s390x",
                                "OS": "linux"
                            }
                        ]
                    },
                    "ForceUpdate": 0,
                    "Runtime": "container"
                },
                "Mode": {
                    "Replicated": {
                        "Replicas": 1
                    }
                },
                "UpdateConfig": {
                    "Parallelism": 1,
                    "FailureAction": "pause",
                    "Monitor": 5000000000,
                    "MaxFailureRatio": 0,
                    "Order": "stop-first"
                },
                "RollbackConfig": {
                    "Parallelism": 1,
                    "FailureAction": "pause",
                    "Monitor": 5000000000,
                    "MaxFailureRatio": 0,
                    "Order": "stop-first"
                },
                "EndpointSpec": {
                    "Mode": "vip"
                }
            },
            "Endpoint": {
                "Spec": {}
            }
        }
    ]

    3)查看是哪个节点正在运行该服务:

    docker@manager1:~$ docker service ps helloworld
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
    psmawcihw8ju        helloworld.1        alpine:latest       manager1            Running             Running 3 minutes ago  

    可见是manager1节点在运行这个服务

    5.在集群中扩展服务

    1)进入manager1环境运行下面命令将服务运行副本从上面的一个扩展到5个:

    docker@manager1:~$ docker service scale helloworld=5
    helloworld 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 

    2)然后再查看目前的任务列表:

    docker@manager1:~$ docker service ps helloworld
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
    psmawcihw8ju        helloworld.1        alpine:latest       manager1            Running             Running 12 minutes ago                       
    0dcyw9yfalq4        helloworld.2        alpine:latest       worker1             Running             Running 44 seconds ago                       
    isan6tswf9vj        helloworld.3        alpine:latest       worker2             Running             Running 45 seconds ago                       
    49kzpmx87qr5        helloworld.4        alpine:latest       worker2             Running             Running 45 seconds ago                       
    jzay4dw8o9cn        helloworld.5        alpine:latest       manager1            Running             Running 59 seconds ago  

    可见两个任务运行在manager1,两个在worker2,一个在worker1

    3)如果想在运行的节点上查看任务,可以进入相应的环境,然后运行docker ps

    比如进入worker2环境,然后运行docker ps:

    docker@worker2:~$ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    5cf8e955f5ee        alpine:latest       "ping docker.com"   3 minutes ago       Up 2 minutes                            helloworld.4.49kzpmx87qr5cx0vveuuois0o
    c1095cae8c19        alpine:latest       "ping docker.com"   3 minutes ago       Up 2 minutes                            helloworld.3.isan6tswf9vjsdhvci9ngpt7k

    可见打开了两个容器

    6.删除集群中的服务

    1)进入manager1的环境,然后运行service rm来删除helloworld服务:

    docker@manager1:~$ docker service inspect --pretty helloworld
    
    ID:        gv1uwdh4574kf29b2vu6uu0pr
    Name:        helloworld
    Service Mode:    Replicated
     Replicas:    5
    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:        alpine:latest@sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1
     Args:        ping docker.com 
     Init:        false
    Resources:
    Endpoint Mode:    vip
    docker@manager1:~$ docker service rm helloworld
    helloworld
    docker@manager1:~$ docker service inspect --pretty helloworld
    Error: no such service: helloworld

    然后再进入worker2环境下,可以看见之前的两个容器也已经删除:

    docker@worker2:~$ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    7.对服务应用滚动更新

    1)进入manager1环境下,运行service create命令:

    docker@manager1:~$ docker service create 
    >   --replicas 3 
    >   --name redis 
    >   --update-delay 10s 
    >   redis:3.0.6
    yxph89nq9ntoo5ip43sfz03as
    overall progress: 3 out of 3 tasks 
    1/3: running   
    2/3: running   
    3/3: running   
    verify: Service converged 

    查看该redis服务:

    docker@manager1:~$ docker service inspect --pretty redis
    
    ID:        yxph89nq9ntoo5ip43sfz03as
    Name:        redis
    Service Mode:    Replicated
     Replicas:    3
    Placement:
    UpdateConfig:
     Parallelism:    1
     Delay:        10s
     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:        redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842
     Init:        false
    Resources:
    Endpoint Mode:    vip
    docker@manager1:~$ docker service ps redis
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
    rfvxxkgmsaac        redis.1             redis:3.0.6         worker1             Running             Running 11 minutes ago                       
    ks3co6k15muu        redis.2             redis:3.0.6         worker2             Running             Running 11 minutes ago                       
    qyuxuyhjlytf        redis.3             redis:3.0.6         manager1            Running             Running 12 minutes ago  

    2)对redis更新其容器镜像,从3.0.6版本更新到3.0.7版本

    docker@manager1:~$ docker service update --image redis:3.0.7 redis
    redis
    overall progress: 3 out of 3 tasks 
    1/3: running   
    2/3: running   
    3/3: running   
    verify: Service converged 

    然后再查看该服务:

    docker@manager1:~$ docker service inspect --pretty redis
    
    ID:        yxph89nq9ntoo5ip43sfz03as
    Name:        redis
    Service Mode:    Replicated
     Replicas:    3
    UpdateStatus:
     State:        completed
     Started:    6 minutes ago
     Completed:    18 seconds ago
     Message:    update completed
    Placement:
    UpdateConfig:
     Parallelism:    1
     Delay:        10s
     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:        redis:3.0.7@sha256:730b765df9fe96af414da64a2b67f3a5f70b8fd13a31e5096fee4807ed802e20
     Init:        false
    Resources:
    Endpoint Mode:    vip

    State:completed说明更新成功了

    然后查看节点上的变化:

    docker@manager1:~$ docker service ps redis
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
    pgche6fdwugv        redis.1             redis:3.0.7         worker1             Running             Running 39 seconds ago                       
    rfvxxkgmsaac         \_ redis.1         redis:3.0.6         worker1             Shutdown            Shutdown 2 minutes ago                       
    vhm4p6bmo0ch        redis.2             redis:3.0.7         worker2             Running             Running 4 minutes ago                        
    ks3co6k15muu         \_ redis.2         redis:3.0.6         worker2             Shutdown            Shutdown 6 minutes ago                       
    lnl8jeblqox2        redis.3             redis:3.0.7         manager1            Running             Running 2 minutes ago                        
    qyuxuyhjlytf         \_ redis.3         redis:3.0.6         manager1            Shutdown            Shutdown 4 minutes ago  

    8.耗尽drain集群中的节点

    1)进入manager1节点,先查看是否所有节点的状态是否都是Active

    docker@manager1:~$ docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    i2pkhzq17szv3sjawgz0eafdn *   manager1            Ready               Active              Leader              18.09.0
    qk6radp5986xbfserk3m8wnt6     worker1             Ready               Active                                  18.09.0
    bvfa8budw71nlesdbqqtzmfmm     worker2             Ready               Active                                  18.09.0

    2)然后drain节点worker1:

    docker@manager1:~$ docker node update --availability drain worker1
    worker1

    然后去查看其状态,果然变成了Drain:

    docker@manager1:~$ docker node inspect --pretty worker1
    ID:            qk6radp5986xbfserk3m8wnt6
    Hostname:                  worker1
    Joined at:                 2019-01-10 06:12:31.783583009 +0000 utc
    Status:
     State:            Ready
     Availability:             Drain
     Address:        192.168.99.102
    Platform:
     Operating System:    linux
     Architecture:        x86_64
    Resources:
     CPUs:            1
     Memory:        989.4MiB
    Plugins:
     Log:        awslogs, fluentd, gcplogs, gelf, journald, json-file, local, logentries, splunk, syslog
     Network:        bridge, host, macvlan, null, overlay
     Volume:        local
    Engine Version:        18.09.0
    Engine Labels:
     - provider=virtualbox
    TLS Info:
     TrustRoot:
    -----BEGIN CERTIFICATE-----
    MIIBajCCARCgAwIBAgI...EwHhcNMTkwMTEwMDYwMTAwWhcNMzkwMTA1MDYw
    MTAwWjATMREw...BBjAPBgNVHRMB
    Af8EBTADAQH/MB0GA1UdDgQWBBTo0q8ticZATPsUPxHTY1VjcALewzAKBggqhkjO
    PQQDAgNIADBFAi...9DUKIwJzxMbotuwRJwu
    -----END CERTIFICATE-----
    
     Issuer Subject:    MBMxETAP...XJtLWNh
     Issuer Public Key:    MFkwEwYHKoZIzj0CAQYIKoZIzj0...B6EH0YUgIBZK880xfLT7kF3e5gI14G9bB3o1ArCT8FuZl0/3vDsGuA==

    然后再去查看一些服务是怎么更新任务分配的:

    docker@manager1:~$ docker service ps redis
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                 ERROR               PORTS
    ugbktcw9mmwh        redis.1             redis:3.0.7         manager1            Running             Running 2 minutes ago                             
    pgche6fdwugv         \_ redis.1         redis:3.0.7         worker1             Shutdown            Shutdown about a minute ago                       
    rfvxxkgmsaac         \_ redis.1         redis:3.0.6         worker1             Shutdown            Shutdown 12 minutes ago                           
    vhm4p6bmo0ch        redis.2             redis:3.0.7         worker2             Running             Running 14 minutes ago                            
    ks3co6k15muu         \_ redis.2         redis:3.0.6         worker2             Shutdown            Shutdown 16 minutes ago                           
    lnl8jeblqox2        redis.3             redis:3.0.7         manager1            Running             Running 13 minutes ago                            
    qyuxuyhjlytf         \_ redis.3         redis:3.0.6         manager1            Shutdown            Shutdown 14 minutes ago  

    可见之前有worker1运行的任务被分配到了manager1上

    3)当然,我们可以重新将其转会Active状态:

    docker@manager1:~$ docker node update --availability active worker1
    worker1
    
    docker@manager1:~$ docker node inspect --pretty worker1
    ID:            qk6radp5986xbfserk3m8wnt6
    Hostname:                  worker1
    Joined at:                 2019-01-10 06:12:31.783583009 +0000 utc
    Status:
     State:            Ready
     Availability:             Active
     ...

    但是服务这次就不会再更改任务的分配了

    9.使用集群模式路由网格

    路由网格使得集群中每个节点都能够接收集群中已发布的服务端口的连接,即使节点上没有运行该任务

    路由网格将所有传入请求路由到发布端口的可用节点的可用容器上

    1)将nginx容器中的端口80发布到集群中任意节点的端口8080:

    docker@manager1:~$ docker service create 
    >   --name my-web 
    >   --publish published=8080,target=80 
    >   --replicas 2 
    >   nginx
    nzpj6mg1p6i5al8vwdzwtxv6z
    overall progress: 2 out of 2 tasks 
    1/2: running   
    2/2: running   
    verify: Service converged 

    2)使用docker service inspect命令去查看服务的发布端口:

    docker@manager1:~$ docker service inspect --format="{{json .Endpoint.Spec.Ports}}" my-web
    [{"Protocol":"tcp","TargetPort":80,"PublishedPort":8080,"PublishMode":"ingress"}]

    3)查看此时的服务分配:

    docker@manager1:~$ docker service ps my-web
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
    yaig5ijmlaob        my-web.1            nginx:latest        worker1             Running             Running 9 minutes ago                       
    mi36hhgnhrjd        my-web.2            nginx:latest        worker2             Running             Running 9 minutes ago    
  • 相关阅读:
    fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
    cvWaitKey 如果 cvNamedWindow就不会起作用
    Java 并发基础
    简化Getter 与 Setter 的插件 Lombok
    20、状态模式
    mybatis-generator 覆盖新增XML
    Jvm 虚拟机
    18、备忘录设计模式
    16、 观察者设计模式
    08、仲载者 -中间者模式
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/10249415.html
Copyright © 2020-2023  润新知