持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情
这里主要介绍Swarm里面的Service的概念,一个service就是一个container一个提供服务的容器,但是之前我们讲compose的时候这个service是会部署在compose机器上面,但是在swarm这个service可能会运行在cluster上任何一个节点上面
1. 创建service
我们看一下service相关的操作,总体来讲我们可以使用service create相关操作,这个类似docker run,但是我们现在在cluster创建service,而这个service不一定运行在本地,所以很少会用docker run这个命令。
docker service create --name demo busybox sh -c "while true;do sleep 3600;done"
这里我们基于busybox这个image,该image本地没有,所以会远程拉取,然后创建对应的service:
这里我们看到service有一个replicas,为1/1,这个意味着可以进行scale,水平扩展
另外这里我们这个service创建在哪台机器上了呢?我们可以使用ps命令看一下:
docker service ps demo
看node,目前运行在swarm-manager节点上面。
2. service的水平扩展
这里我们希望该service扩展有5个,可以执行上面的命令,会尝试去创建5个任务,然后running完成之后我们可以看到变化了:
5/5意味着总共5个副本,都ready了,接着我们观察demo这个service:
这里我们看到这5个分布是均匀在cluster的节点中的,这里就是通过scale把service扩展为5个,然后均匀分布在我们的cluster中
接着我们来看scale的另一种功能,首先我们强制删除一个容器(之前的一个replica):
然后我们可以观察到之前的replicas变成了4/5,但是很快就变成了5/5,我们观察该sercie情况:
当前worker1的container变多了,它不仅仅能做到水平扩展,还能保证一定数量的replica是生效的,即便shutdown了,他也能发觉,并基于cluster找代替的节点进行修补补足缺失的,这个feature可以保证系统有效稳定!
3. service的删除
这个service本身的remove操作是很快的,但是实际执行的时候后台还是需要一定时间,需要看到有多少个容器,每个容器在哪个机器上面