安装docker
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
# 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值。
# 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
# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
hyimf345yidq9qncgcuco1uaw * manager1 Ready Active Leader
节点后面的ID表明当前连接到的节点。 Docker Engine swarm模式自动的将HOSTNAME指定为节点主机名。文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
添加节点到swarm
一旦创建了管理节点,就可以添加工作节点了。文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
# docker swarm join \
> --token SWMTKN-1-4995ewf1uzw90qe5tfem7qtcw7nx7ebwx1klt7rk8lk374i44f-dj7xhstoc8nfqnefo815ytktq \
> 10.0.3.166:2377
This node joined a swarm as a worker.
列出集群中所有节点。MANAGER列标识集群中的管理节点。此列为空说明是工作节点。文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
[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 报错文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
[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.
部署服务
[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 列出运行的服务。文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
检查集群服务
查看运行服务的详细信息文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
[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] 查看集群内节点运行的任务。文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
缩放集群中服务
通过docker service scale =命令来扩展文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
[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,只用于管理,任务全分配到工作者节点上。
[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
删除服务
docker service rm helloworld
即使服务被删除,任务容器可能需要少许时间来清理这些容器。文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
滚动更新服务
将redis 3.0.6 升级为 3.0.7.文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
[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
可以在服务部署时配置滚动更新策略:文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
- --update-delay 配置更新服务任务之间的延迟时间。数字加上时间单位,如10m10s标识10分钟10秒。
- 默认情况下,更新调度一次更新一个任务。--update-parallelism来配置更新调度同时更新的最大服务任务数。
- 默认情况下,当单个任务的更新返回RUNNING状况时,调度另一个任务更新,直至所有更新都完成为止。如果在更新期间,更新的任务返回FAILED,则暂停更新。可以通过--update-failure-action标志来控制Docker服务创建或更新的行为。
[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"
默认情况下,调度应用滚动更新如下:文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
- 停止第一个任务
- 调度已停止的任务更新
- 启动已更新完成的容器
- 如果更新任务返回RUNNING,等待指定的延迟时间,然后启动下一个任务。
- 如果在更新期间,任务返回FAILED,更新将暂停。
移除集群上的某个节点
节点AVAILABILITY列为Active,表明该节点可以接收任务。 如果需要对某个节点进行维护,可以将该节点设置为DRAIN。DRAIN状态节点将阻止从管理节点接收新的任务,同时,管理节点将停止该节点上当前运行的任务,并在其它Active状态的节点上启动该任务副本。文章源自运维生存时间-https://www.ttlsa.com/docker/docker-swarm-manager/
[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
[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

评论