摘要:swarmmanagernode的管理可以使用haproxy为多个管理节点创建高可用性解决方案。Raft协议用于确保管理节点的数据一致性。容错点数为(n-1)/2常见管理节点操作:将managernode设置为仅提供管理,而不是作为工作节点使用dockernodeupdate--availabilitydrainmanager节点主机名添加标签dockernode update--label add key name=value为节点设置标签,一个节点可以有多个标签。
managernode192.168.0.11
workernode192.168.0.12
安装上docker环境
yuminstallwget-y
wgethttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo-O/etc/yum.repos.d/docker-ce.repo
yum-yinstalldocker-ce-18.06.1.ce-3.el7
systemctlenabledocker&&systemctlstartdocker
docker--version
swarn下的命令集,可以使用--help逐层查看
dockerswarm--help
Commands:
caDisplayandrotatetherootCA
initInitializeaswarm
joinJoinaswarmasanodeand/ormanager
join-tokenManagejointokens
leaveLeavetheswarm
unlockUnlockswarm
unlock-keyManagetheunlockkey
updateUpdatetheswarm
部署swarmmanager
dockerswarminit--advertise-addr192.168.0.11
执行后给出worker节点加入当前manager下的命令,也可以通过dockerswarmjoin-tokenworker查看下面信息。
dockerswarmjoin--tokenSWMTKN-1-3vgownewoyrqequep2a3y6cawjurd27kix8***************-b5iregazi33c107qeivgkdwc0192.168.0.11:2377
dockerinfo#可以查看当前docker的swarm节下面的信息
Swarm:active
NodeID:hjy4pruqeygmtrhktr4t8rmph
IsManager:true
ClusterID:6tfy8npit0ekv55scx0rwaq40
Managers:1
Nodes:1
DefaultAddressPool:10.0.0.0/8
SubnetSize:24
DataPathPort:4789
Orchestration:
TaskHistoryRetentionLimit:5
dockernodels查看当前swarm下的节点
AVAILABILITY三种状态说明:
active可被指派task
pasue不可被指派task,但是节点中的已存在task正常运行
drain不可被指派task,且节点中的已存在task将调度到其他的worker节点运行
通过dockerswarmjoin-tokenwoker查看加入命令,然后在worker执行命令,加入swarm。
管理swarmmanagernode
可以使用haproxy来做多managenode的高可用方案,Raft协议用来保证管理节点的数据一致性,容错点数量是(n-1)/2
常见的管理节点的操作:
设置managernode只提供管理,不作为worker节点使用
dockernodeupdate--availabilitydrainmanager节点主机名
添加标签
dockernodeupdate--label-add键名称=值
为节点设置标签标记,一个节点可以多个标签。
dockernodeupdate--label-addfoo--label-addbarworker1
为节点指定类型标签,来标识调度程序如何部署到哪个节点
dockernodeupdate--label-addtyep=queueworker1
提权到manage组
dockernodepromoteworker1
降权
dockernodedemoteworkre1
manager节点要退出swarm集群,在manager机器上操作
dockerswarmnodeleave
若集群中存在其他workernode如果manager要退出swarm可以强制退出
dockerswarmnodeleave--force
worker节点要退出swarm,在woker机器上操作
dockerswarmnodeleave
其他管理命令
dockernodedemote从群集(swarm)管理器中降级一个或多个节点
dockernodeinspect显示一个或多个节点的详细信息
dockernodels列出群集(swarm)中的节点
dockernodepromote将一个或多个节点推入到群集管理器中
dockernodeps列出在一个或多个节点上运行的任务,默认为当前节点
dockernoderm从群集(swarm)删除一个或多个节点
dockernodeupdate更新一个节点
–availability节点的可用性(有效/暂停/耗尽)
–label-add添加或更新节点标签(key=value)
–label-rm删除节点标签(如果存在)
–role节点的作用(worker/manager)
管理服务(在managernode上完成)
dockerservicecreate--replicas2--namemyredisredis
#创建2个名为myredis的容器,源镜像为redis
dockerservicels
#查看已经部署了的服务
dockerservicepsmyredis
#查看服务的详细信息
dockerservicecreate--namehelloworld
--envMYVAR=myvalue
--workdir/tmp
--usermy_user
alpinepingdocker.com
#enc设置化境变量,workdir设置工作目录,user设置用户信息
扩容缩容服务
dockerservicescale服务名=服务task总数
例如dockerservicescalemyredis=3从之前的2个扩容到3个
dockerservicescalemyredis=1扩容到3个以后,再缩容到1个。
删除服务
dockerservicermmyredis
滚动更新
dockerservicecreate
--replicas3
--nameredis
--update-delay10s
redis:3.0.6
#每成功部署一个,间隔十秒后再部署下一个,更新失败则调度器停止
dockerserviceupdate--imagesredis:3.0.7redis使用新版本redis来升级当前版本。
添加overlay网络
dockernetworkcreate--driveroverlaymynetwork
#创建名字为mynetwork的网络,在manager上操作
dockerservicecreate
--replicas4
--networkmynetwokr
--namemyweb
nginx
#指定mynetwork网络下创建4份名字叫myweb的服务,源镜像用nginx
爬坑问题
将worker提权之后,会导致status为down,重启只有dockernodermworker1然后重新加入。