设为首页 收藏本站
查看: 939|回复: 0

[经验分享] Docker Swarm

[复制链接]

尚未签到

发表于 2017-12-5 21:40:14 | 显示全部楼层 |阅读模式
前言
  之前在总结docker machine的时候,当时对docker理解还不够深入,甚至还不知道 docker machine 与 docker swarm 的区别。
  在查阅资料以及官方文档之后,今天基本彻底搞明白了。其实 docker machine 只是一个docker多节点的管理工具,它的作用是帮助我们在其他节点上安装docker、运行docker容器等;而 docker swarm 则是一个docker集群管理工具,有了它整个集群就能协同工作,从容器的角度来说有点像是openstack的感觉,能够直接管理整个集群,从分布式的角度来说有点像是hadoop,当然只是从分布式的这个角度来考虑。
  本文为大家简单介绍 docker swarm 下的跨主机通信以及最强大的 docker swarm 集群管理功能。

一、docker swarm 安装

1.1 docker machine 创建节点
  此处也能体现 docker machine 与 docker swarm 的区别,简单来说docker machine是为 docker swarm 服务的。
  先使用 docker-machine 创建三个docker节点。
  

docker-machine create -d generic --generic-ip-address <ip> <name>  

  在docker-machine主节点执行三次上述操作,其中ip为要创建的主机的ip地址,name为给想要创建的主机重命名的host名称。此处假设分别为swarm-manager、swarm-node1、swarm-node2,很明显我们选择swarm-manager为manager节点(下文详细讲解)。

1.2 创建 swarm 集群
  docker swarm 分为manager节点和worker节点,显然manager节点相当于主节点,能够管理所有worker节点。

创建 manager 节点
  在上述创建好的三个docker节点中选择一个作为manager节点(上文已经选择了swarm-manager节点),在docker-machine节点上执行下述操作:
  

docker-machine ssh swarm-manager &quot;docker swarm init&quot;  

  执行上述操作,会提示你创建成功,并给出一个创建worker节点的命令,其中会包含token等信息,token是manager节点识别子节点的标识。

创建worker节点
  同样,在docker-machine中执行下述操作:
  

docker-machine ssh swarm-node1 &quot;docker swarm join --token <token> <ip>:2377&quot;  

  
docker-machine ssh swarm-node2 &quot;docker swarm join --token <token> <ip>:2377&quot;
  

  其中为上述token、ip为manager节点ip地址,这些都会在创建成功manager节点后给出。
  都执行完就可以在manager节点中执行下述命令查看所有集群中所有节点:
  

docker node ls  

  此命令会列出集群中所有节点,并给出各个节点的角色。当然此处你也可以通过docker-machine以ssh的方式执行,下同。

二、docker swarm 跨主机通信
  swarm 跨主机通信同样需要overlay网络(或者其他几个选项,还未测试)。但是与之前讲述不同的是swarm不需要consul服务,其实是swarm提供了consul的功能,相当于简化了跨主机通信的操作。
  在manager节点执行下述命令创建overlay网络:
  

docker network create -d overlay --attachable my_net  

  此处必须要添加--attachable参数,否则不能用于容器。
  在主节点上创建overlay网络之后,worker节点并不像采用consul的方案那样能够自动识别到该网络,但是可以通过--network my_net的方式在创建容器的时候使用该网络,当在worker节点按上述方式运行容器并使用该网络之后,即可通过docker network ls在此worker节点上查看到该网络。
  这样所有使用该网络的节点均可进行通信。同样通过brctl show 命令可以看到节点生成了一个docker_gwbridge网桥,并且下面挂载了相应的vethxxx,这与之前分析的相同,是overlay网络的工作原理。

三、docker swarm 集群管理——部署应用
  这是docker swarm强大之处,通过它能够直接实现负载均衡、主备、容灾等功能。它可以自动创建一个应用,应用包含一系列的服务,每一个服务简单的说是一个镜像创建几个容器,这些容器集合起来能够实现某些特定的功能,并且无需用户指定这些容器运行在哪些节点上,swarm会自动分配,甚至会在不同的节点上跳转,当某worker节点挂掉的时候其上运行的所有容器也会自动迁移到其他节点上。
  说了这么多好处,下面详细介绍一下如何发布一个服务。

3.1 创建配置文件
  首先创建一个配置文件,其内包含了该应用的所有信息,包含需要的服务,每一个服务使用的镜像、创建的容器个数、端口映射、存储映射、网络等等,基本上是前面所介绍的容器信息的集合。
  其配置文件采用YAML格式,YAML是专门用来写配置文件的语言,非常简洁。YAML基本规则如下:


  • 大小写敏感。
  • 使用缩进表示层级关系。
  • 进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
  • # 表示注释,从这个字符一直到行尾,都会被解析器忽略。
  YAML详细规则可以参考http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
  swarm应用基本模板如下:
  

version: &quot;3&quot;  
services:
  web:
  # replace username/repo:tag with your name and image details
  image: username/repo:tag
  deploy:
  replicas: 5
  restart_policy:
  condition: on-failure
  resources:
  limits:
  cpus: &quot;0.1&quot;
  memory: 50M
  ports:
  - &quot;80:80&quot;
  networks:
  - webnet
  visualizer:
  image: dockersamples/visualizer:stable
  ports:
  - &quot;8080:8080&quot;
  volumes:
  - &quot;/var/run/docker.sock:/var/run/docker.sock&quot;
  deploy:
  placement:
  constraints: [node.role == manager]
  networks:
  - webnet
  
networks:
  webnet:
  ipam:
  config:
  - subnet: 172.19.0.0/24
  

  其中version: &quot;3&quot;表示使用第三版,每个版本配置规则不同,services项下面有web和visualizer两项(此处名称可以任取,只要自己清楚就行),表示应用有两个服务,每个服务下面是使用的镜像以及端口映射、存储映射、网络等信息。重点看一下deploy项,replicas表示运行容器运行的个数,restart_policy表示重启策略,resources下是容器的运行资源,limits是运行限制,包含cpu、内存等限制,cpus值为&quot;0.1&quot;表示所有cpu的百分之十,constraints: [node.role == manager]表示该容器只部署在manager节点上。每个service下面的networks可以有多个,但是必须都包含在顶级的networks中,顶级networks中也可以包含多个网络,每一个可以不进行任何设置,可以采用上述方式进行设置,最终swarm会创建一个appname_webnet的网络,此处webnet的名字也可以任取,appname是将要创建的服务的名称,在下面会介绍。
  将上述配置文件保存到docker-compose.yml文件中,待用。

3.2 部署应用
  通过运行以下命令部署应用:
  

docker stack deploy -c docker-compose.yml <appname>  

  其中appname为应用的名称。这样我们就成功部署了一个应用,里面包含三个服务。
  访问swarm集群下的任何一个ip地址的上述端口,swarm都会将其随机转发到stack下的任何一个container,这样就可以起到负载均衡、容灾、主备等功能。

3.3 docker stack 常用命令

docker stack ls
  查看部署的所有应用,可以查看到应用名称及包含的服务个数。

docker stack deploy
  

docker stack deploy -c <composefile> <appname>  

  上面介绍过的部署应用。

docker stack services
  

docker stack services <appname>         

  查看某个应用中的服务具体信息。

docker stack ps
  

docker stack ps <appname>  

  查看某个应用的具体信息,包含每个容器的配置以及运行在哪个节点等。

docker stack rm
  

docker stack rm <appname>  

  删除某个应用。

四、总结
  本文简单介绍了docker swarm以及其安装、部署应用及docker stack相关操作。可以看出swarm功能很强大,基本等同于一个小的openstack,后续会继续深入学习。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-420961-1-1.html 上篇帖子: Docker 第二篇--安装Docker 下篇帖子: 【译文】什么是Docker
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表