DockerSwarm集群部署
⼀、系统环境
1)服务器环境李玟禁播mv
节点名称IP操作系统内核版本
manager172.16.60.95CentOs7 4.16.1-1.el7.elrepo.x86_64
node-01172.16.60.96CentOs7 4.16.1-1.el7.elrepo.x86_64
node-02172.16.60.97CentOs7 4.16.1-1.el7.elrepo.x86_64
node-03172.16.60.98CentOs7 4.16.1-1.el7.elrepo.x86_64
2)前提条件
Docker版本1.12+
集群节点之间保证TCP 2377、TCP/UDP 7946和UDP 4789端⼝通信
TCP端⼝2377集群管理端⼝
TCP与UDP端⼝7946节点之间通讯端⼝
TCP与UDP端⼝4789 overlay⽹络通讯端⼝
⼆、集群部署
1)master创建Swarm(要保存初始化后token,因为在节点加⼊时要使⽤token作为通讯的密钥)
[root@master ~]# docker swarm init --adverti-addr 172.16.60.95
Swarm initialized: current node (kfi2r4dw6895z5yvhlbyzfck6) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3fzyz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-0mocmawzvm3xge6s37n5a48fw 172.16.60.95:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
注:上⾯命令执⾏后,该机器⾃动加⼊到swarm集群。这个会创建⼀个集群token,获取全球唯⼀的 t
oken,作为集群唯⼀标识。后续将其他节点加⼊集群都会⽤到这个token值。其中,--adverti-addr参数表⽰其它swarm中的worker节点使⽤此ip地址与manager联系。命令的输出包含了其它节点如何加⼊集群的命令。
使⽤docker info 或者 docker node ls 查看集群中的相关信息
docker info
.......广告策划方案范文
Swarm: active
NodeID: kfi2r4dw6895z5yvhlbyzfck6
Is Manager: true
ClusterID: y2zgs373cg0y6559t675yexcj
Managers: 1
Nodes: 1
Orchestration:
Task History Retention Limit: 5
.......
2)添加节点到swarm集群中
所有节点执⾏
docker swarm join --token SWMTKN-1-3fzyz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-0mocmawzvm3xge6s37n5a48fw 172.16.60.95:2377 在master上查看集群节点的状态
木瓜木瓜
到此Swarm集群就创建好了
3)docker node 命令
[root@master ~]# docker node --help
Usage: docker node COMMAND
Manage Swarm nodes
Options:
Commands:
demote Demote one or more nodes from manager in the swarm
inspect Display detailed information on one or more nodes早安励志正能量
ls List nodes in the swarm
promote Promote one or more nodes to manager in the swarm
ps List tasks running on one or more nodes, defaults to current node rm Remove one or more nodes from the swarm
update Update a node
# demote
鱼竿的绑法将管理节点降级为普通节点
# inspect
查看节点的详细信息
# ls
列出节点
# promote
将普通节点升级为管理节点
# ps
查看运⾏的任务
# rm
从swarm集群中删除节点
# update
改变集群节点状态
docker node 命令
[root@master ~]# docker node update --help
Usage: docker node update [OPTIONS] NODE
Update a node
Options:
--availability string Availability of the node ("active"|"pau"|"drain")
--label-add list Add or update a node label (key=value)
-
-label-rm list Remove a node label if exists
--role string Role of the node ("worker"|"manager")
# 主要使⽤availability string
# active
节点状态正常
# pau
节点挂起、暂停
# drain
排除节点,⽐如将master节点排除,不分配任务,只作为管理节点
node update命令
三、在Swarm中部署服务
1)创建服务
[root@master ~]# docker rvice --help
Usage: docker rvice COMMAND
Manage rvices
Options:
Commands:
create Create a new rvice
inspect Display detailed information on one or more rvices
logs Fetch the logs of a rvice or task
ls List rvices
ps List the tasks of one or more rvices
rm Remove one or more rvices
rollback Revert changes to a rvice's configuration
scale Scale one or multiple replicated rvice
包包奢侈品docker rvice
[root@master ~]# docker rvice create --replicas 1 --name hello busybox
# --replicas : 副本集个数
# --name:服务名称
2)查看服务信息
[root@master ~]# docker rvice ls
ID NAME MODE REPLICAS IMAGE PORTS
kosznwn4ombx hello replicated 0/1 busybox:latest
从REPLICAS中能看出这个 hello服务并没有启动起来,0/1 表⽰ 1计划启动的副本数,0实际启动的数量。所以启动失败
3)添加参数
在hello服务中busybox只是⼀个基础镜像,并没有⼀个持续运⾏的任务,所以manager会不断重启hello这个服务,所以有好多shutdown的记录。但是可以为其添加⼀个任务。
[root@master ~]# docker rvice update --args "ping " hello
hello
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
# update:更新状态
# --args:增加参数
再次查看状态:
过滤不正常的状态:
[root@master ~]# docker rvice ps -f "desired-state=running" hello
春潮澎湃ID NAME IMAGE NODE DESIRED STATE CURRENT STA
TE ERROR PORTS yxyivio4mzlg hello.1 busybox:latest master Running Running 4 minutes ago
# -f "desired-state=running" : 状态为runngin的服务
4)为服务扩容(缩融)scale
刚才设置的replicas=1,可以增加副本数量
[root@master ~]# docker rvice scale hello=4
hello scaled to 4
overall progress: 4 out of 4 tasks
1/4: running
2/4: running
3/4: running
4/4: running
verify: Service converged
# scale : 指定服务的数量会计学毕业论文
5)⼯作节点排除manager,manager只作为管理节点
上图中manager也运⾏了⼀个服务,将manager排除在外
[root@manager ~]# docker node update --availability drain manager
# node update :更改节点状态
# --availability : 三种状态
active: 正常
pau:挂起
drain:排除
排除manager后,其上⾯运⾏的服务会转移到其他节点
四、滚动更新服务
例如升级服务的镜像版本
[root@manager ~]# docker rvice create \
> --replicas 3 \
> --name redis \
> --update-delay 10s \
> redis:3.0.6
# 启动3个副本集的redis
# update-delay 10s :每个容器依次更新,间隔10s 滚动更新:
docker rvice update --image redis:3.0.7 redis
# --image : 指定版本
更新完成后新版本和历史记录都能查看
查看配置信息:
五、服务更新和回滚策略
1)设置策略
[root@manager ~]# docker rvice create \
--name my-web \
--replicas 10 \
--update-delay 10s \
--update-parallelism 2 \
--update-failure-action continue \
--rollback-parallelism 2 \
--rollback-monitor 20s \
--rollback-max-failure-ratio 0.2 \
nginx:1.12.1