- A+
所属分类:容器
安装docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
yum remove docker \ docker-common \ container-selinux \ docker-selinux \ docker-engine yum install -y yum-utils yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce |
互通端口
- tcp 2377 集群管理通信端口
- tcp & udp 7946 节点间通信端口
- udp 4789 overlay网络通信接口 如果创建overlay网络使用加密选项--opt-encrypted,还需要确保50端口放开。
创建swarm
1 2 3 4 5 6 7 8 9 10 |
# docker swarm init --advertise-addr 10.0.3.166 Swarm initialized: current node (hyimf345yidq9qncgcuco1uaw) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-4995ewf1uzw90qe5tfem7qtcw7nx7ebwx1klt7rk8lk374i44f-dj7xhstoc8nfqnefo815ytktq \ 10.0.3.166:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. |
--advertise-addr 指定管理节点发布的地址。集群中的其它节点必须要能够访问该IP。 输出的内容包含新节点加入集群的命令。节点做为管理者还是工作者取决于--token值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.03.1-ce Storage Driver: overlay Backing Filesystem: extfs Supports d_type: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Swarm: active NodeID: hyimf345yidq9qncgcuco1uaw Is Manager: true ClusterID: lk5ddl5ncst0lu4ojdjyq5gbz Managers: 1 Nodes: 1 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Number of Old Snapshots to Retain: 0 Heartbeat Tick: 1 Election Tick: 3 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Node Address: 10.0.3.166 Manager Addresses: 10.0.3.166:2377 Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe init version: 949e6fa Security Options: seccomp Profile: default Kernel Version: 3.10.0-514.10.2.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 3.702 GiB Name: manager1 ID: EESP:4QLV:HO2G:HLDR:3PTL:PWSG:DY7N:FHYD:AMBT:2XMC:DFKT:KDFX Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false |
1 2 3 |
# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS hyimf345yidq9qncgcuco1uaw * manager1 Ready Active Leader |
节点后面的ID表明当前连接到的节点。 Docker Engine swarm模式自动的将HOSTNAME指定为节点主机名。
添加节点到swarm
一旦创建了管理节点,就可以添加工作节点了。
1 2 3 4 |
# docker swarm join \ > --token SWMTKN-1-4995ewf1uzw90qe5tfem7qtcw7nx7ebwx1klt7rk8lk374i44f-dj7xhstoc8nfqnefo815ytktq \ > 10.0.3.166:2377 This node joined a swarm as a worker. |
列出集群中所有节点。MANAGER列标识集群中的管理节点。此列为空说明是工作节点。
1 2 3 4 5 6 7 8 9 |
[root@manager1 ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 30z2pjjx3hpnyn2mqozg314te worker1 Ready Active hyimf345yidq9qncgcuco1uaw * manager1 Ready Active Leader [root@worker2 ~]# docker swarm join \ > --token SWMTKN-1-4995ewf1uzw90qe5tfem7qtcw7nx7ebwx1klt7rk8lk374i44f-dj7xhstoc8nfqnefo815ytktq \ > 10.0.3.166:2377 This node joined a swarm as a worker. |
在非manager节点上执行docker node ls 报错
1 2 |
[root@worker1 ~]# docker node ls Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager. |
部署服务
1 2 3 4 5 6 |
[root@manager1 ~]# docker service create --replicas 1 --name helloworld alpine ping docker.com oftt3pr3fqp040iqfmn2q514p [root@manager1 ~]# docker service ls ID NAME MODE REPLICAS IMAGE oftt3pr3fqp0 helloworld replicated 1/1 alpine:latest |
- docker service create 命令创建服务
- --name 定义服务名称
- --replicas 指定运行实例副本
- 参数 alpine ping docker.com 定义服务为执行ping docker.com命令的Alpine Linux容器。
docker service ls 列出运行的服务。
检查集群服务
查看运行服务的详细信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
[root@manager1 ~]# docker service inspect --pretty helloworld ID: oftt3pr3fqp040iqfmn2q514p Name: helloworld Service Mode: Replicated Replicas: 1 Placement: UpdateConfig: Parallelism: 1 On failure: pause Max failure ratio: 0 ContainerSpec: Image: alpine:latest@sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4 Args: ping docker.com Resources: Endpoint Mode: vip [root@manager1 ~]# docker service ps helloworld ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS w3rul33d1pss helloworld.1 alpine:latest worker1 Running Running 52 seconds ago [root@worker1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 636363ca51d5 alpine@sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4 "ping docker.com" About a minute ago Up About a minute helloworld.1.w3rul33d1psszwoti5u8hqyyb [root@worker2 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@worker2 ~]# |
docker service ps 查看哪些节点运行了该服务。 docker ps 在运行该任务的节点上执行以查看该任务容器的详细信息。 docker node ps [NODE-HOSTNAME] 查看集群内节点运行的任务。
缩放集群中服务
通过docker service scale =命令来扩展
1 2 3 4 5 6 7 8 9 10 |
[root@manager1 ~]# docker service scale helloworld=5 helloworld scaled to 5 [root@manager1 ~]# docker service ps helloworld ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS w3rul33d1pss helloworld.1 alpine:latest worker1 Running Running 3 minutes ago e4mwqwgyojxm helloworld.2 alpine:latest manager1 Running Running 15 seconds ago zaypoj337tyj helloworld.3 alpine:latest worker2 Running Preparing 15 seconds ago ws8jcrd2n0gf helloworld.4 alpine:latest worker2 Running Preparing 15 seconds ago g5wbf5bi3tdc helloworld.5 alpine:latest worker1 Running Running 15 seconds ago |
- 集群创建了4个新的任务来扩展helloworld。任务分布在集群中的三个节点中,其中一个在manager1节点上。
- 默认情况下管理节点也可以分配任务。可以设置管理节点为DRAIN,只用于管理,任务全分配到工作者节点上。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@manager1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9d405ab6fce8 alpine@sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4 "ping docker.com" 3 minutes ago Up 3 minutes helloworld.2.e4mwqwgyojxmt1t0icsjxd49u [root@worker1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 66f13f0869fa alpine@sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4 "ping docker.com" 4 minutes ago Up 4 minutes helloworld.5.g5wbf5bi3tdca59nzvg66f7zv 636363ca51d5 alpine@sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4 "ping docker.com" 8 minutes ago Up 8 minutes helloworld.1.w3rul33d1psszwoti5u8hqyyb [root@worker2 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2eae6a6d96cc alpine@sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4 "ping docker.com" 4 minutes ago Up 4 minutes helloworld.4.ws8jcrd2n0gf5zly0fm300kk7 24a2f3cc3c9a alpine@sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4 "ping docker.com" 4 minutes ago Up 4 minutes helloworld.3.zaypoj337tyjct6158rg9werk |
删除服务
1 |
docker service rm helloworld |
即使服务被删除,任务容器可能需要少许时间来清理这些容器。
滚动更新服务
将redis 3.0.6 升级为 3.0.7.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
[root@manager1 ~]# docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6 ieycvblfdcd2dkrugawahmpw1 [root@manager1 ~]# docker service inspect --pretty redis ID: ieycvblfdcd2dkrugawahmpw1 Name: redis Service Mode: Replicated Replicas: 3 Placement: UpdateConfig: Parallelism: 1 Delay: 10s On failure: pause Max failure ratio: 0 ContainerSpec: Image: redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842 Resources: Endpoint Mode: vip [root@manager1 ~]# docker service update --image redis:3.0.7 redis redis [root@manager1 ~]# docker service inspect --pretty redis ID: ieycvblfdcd2dkrugawahmpw1 Name: redis Service Mode: Replicated Replicas: 3 UpdateStatus: State: paused Started: 58 seconds Message: update paused due to failure or early termination of task f0jk6wc0ebuo8h2o8xrgyow4h Placement: UpdateConfig: Parallelism: 1 Delay: 10s On failure: pause Max failure ratio: 0 ContainerSpec: Image: redis:3.0.7@sha256:29f740b256f47f413f4ba7a03c8fc800edda4e3439e0754974819d8dbcf4e986 Resources: Endpoint Mode: vip |
- 出现 Message: update paused due to failure or early termination of task f0jk6wc0ebuo8h2o8xrgyow4h 执行 docker service update
可以在服务部署时配置滚动更新策略:
- --update-delay 配置更新服务任务之间的延迟时间。数字加上时间单位,如10m10s标识10分钟10秒。
- 默认情况下,更新调度一次更新一个任务。--update-parallelism来配置更新调度同时更新的最大服务任务数。
- 默认情况下,当单个任务的更新返回RUNNING状况时,调度另一个任务更新,直至所有更新都完成为止。如果在更新期间,更新的任务返回FAILED,则暂停更新。可以通过--update-failure-action标志来控制Docker服务创建或更新的行为。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
[root@manager1 ~]# docker service update redis redis [root@manager1 ~]# docker service inspect --pretty redis ID: ieycvblfdcd2dkrugawahmpw1 Name: redis Service Mode: Replicated Replicas: 3 UpdateStatus: State: updating Started: 3 seconds Message: update in progress Placement: UpdateConfig: Parallelism: 1 Delay: 10s On failure: pause Max failure ratio: 0 ContainerSpec: Image: redis:3.0.7@sha256:29f740b256f47f413f4ba7a03c8fc800edda4e3439e0754974819d8dbcf4e986 Resources: Endpoint Mode: vip [root@manager1 ~]# docker service ps redis ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS pd8p88zn5xbr redis.1 redis:3.0.7 worker2 Running Running about a minute ago ms0dptzw9owe \_ redis.1 redis:3.0.6 worker2 Shutdown Shutdown about a minute ago vfq7q3amryps redis.2 redis:3.0.7 worker1 Running Running about a minute ago olpcxjjx0a5a \_ redis.2 redis:3.0.7 worker1 Shutdown Shutdown about a minute ago wces10o0jj73 \_ redis.2 redis:3.0.6 worker1 Shutdown Shutdown 4 minutes ago 9eexaufh8t77 redis.3 redis:3.0.7 worker2 Running Running 2 minutes ago kgoi0zeei1ra \_ redis.3 redis:3.0.7 manager1 Shutdown Rejected 3 minutes ago "No such image: redis@sha256:2…" f0jk6wc0ebuo \_ redis.3 redis:3.0.7 manager1 Shutdown Rejected 3 minutes ago "No such image: redis@sha256:2…" 11r7vfmp37fj \_ redis.3 redis:3.0.7 manager1 Shutdown Shutdown 3 minutes ago qvgarw9yudj9 \_ redis.3 redis:3.0.7 manager1 Shutdown Rejected 3 minutes ago "No such image: redis:3.0.7" |
默认情况下,调度应用滚动更新如下:
- 停止第一个任务
- 调度已停止的任务更新
- 启动已更新完成的容器
- 如果更新任务返回RUNNING,等待指定的延迟时间,然后启动下一个任务。
- 如果在更新期间,任务返回FAILED,更新将暂停。
移除集群上的某个节点
节点AVAILABILITY列为Active,表明该节点可以接收任务。 如果需要对某个节点进行维护,可以将该节点设置为DRAIN。DRAIN状态节点将阻止从管理节点接收新的任务,同时,管理节点将停止该节点上当前运行的任务,并在其它Active状态的节点上启动该任务副本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[root@manager1 ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 30z2pjjx3hpnyn2mqozg314te worker1 Ready Active hyimf345yidq9qncgcuco1uaw * manager1 Ready Active Leader jfrta08n3qm3edtdj51upmiqq worker2 Ready Active [root@manager1 ~]# docker node update --availability drain worker1 worker1 [root@manager1 ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 30z2pjjx3hpnyn2mqozg314te worker1 Ready Drain hyimf345yidq9qncgcuco1uaw * manager1 Ready Active Leader jfrta08n3qm3edtdj51upmiqq worker2 Ready Active [root@manager1 ~]# docker node inspect --pretty worker1 ID: 30z2pjjx3hpnyn2mqozg314te Hostname: worker1 Joined at: 2017-03-29 08:22:12.963602242 +0000 utc Status: State: Ready Availability: Drain Address: 10.0.2.53 Platform: Operating System: linux Architecture: x86_64 Resources: CPUs: 1 Memory: 992.6 MiB Plugins: Network: bridge, host, macvlan, null, overlay Volume: local Engine Version: 17.03.1-ce [root@manager1 ~]# docker service ps redis | grep Running pd8p88zn5xbr redis.1 redis:3.0.7 worker2 Running Running 8 minutes ago cqfdsa7v0eqh redis.2 redis:3.0.7 manager1 Running Running 47 seconds ago 9eexaufh8t77 redis.3 redis:3.0.7 worker2 Running Running 9 minutes ago |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[root@manager1 ~]# docker node update --availability active worker1 worker1 [root@manager1 ~]# docker node inspect --pretty worker1 ID: 30z2pjjx3hpnyn2mqozg314te Hostname: worker1 Joined at: 2017-03-29 08:22:12.963602242 +0000 utc Status: State: Ready Availability: Active Address: 10.0.2.53 Platform: Operating System: linux Architecture: x86_64 Resources: CPUs: 1 Memory: 992.6 MiB Plugins: Network: bridge, host, macvlan, null, overlay Volume: local Engine Version: 17.03.1-ce [root@manager1 ~]# docker service ps redis | grep Running pd8p88zn5xbr redis.1 redis:3.0.7 worker2 Running Running 10 minutes ago cqfdsa7v0eqh redis.2 redis:3.0.7 manager1 Running Running 3 minutes ago 9eexaufh8t77 redis.3 redis:3.0.7 worker2 Running Running 12 minutes ago |

微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~