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

[经验分享] docker swarm ,滚动更新

[复制链接]

尚未签到

发表于 2019-2-21 11:07:58 | 显示全部楼层 |阅读模式
  一、Docker swarm
  Swarm 是 Docker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理 Docker 集群,它将一群 Docker 宿主机变成一个单一的,虚拟的主机。Swarm 使用标准的 Docker API接口作为其前端访问入口,换言之,各种形式的 Docker Client(docker client in go, docker_py,docker 等)均可以直接与 Swarm 通信。Swarm 几乎全部用 Go 语言来完成开发。Swarm deamon 只是一个调度器(Scheduler)加路由器(router),Swarm 自己不运行容器,它只是接受 docker 客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm 由于某些原因挂掉了,集群中的节点也会照常运行,当 Swarm 重新恢复运行之后,它会收集重建集群信息。
  
  swarm create
Swarm 中 swarm create 命令用于创建一个集群标志,用于 Swarm 管理 Docker 集群时,Docker Node 的节点发现功能。发起该命令之后,Swarm 会前往 Docker Hub 上内建的发现服务中获取一个全球唯一的token,用以唯一的标识 Swarm 管理的 Docker 集群。

  swarm manage
Swarm 中 swarm manage 是最为重要的管理命令。一旦 swarm manage 命令在 Swarm 节点上被触发,则说明用户需要 swarm 开始管理 Docker 集群。从运行流程的角度来讲,swarm 经历的阶段主要有两点:启动 swarm、接收并处理 Docker 集群管理请求。

  Swarm 启动的过程包含三个步骤:
发现 Docker 集群中的各个节点,收集节点状态、角色信息,并监视节点状态的变化;初始化内部调度(scheduler)模块;创建并启动 API 监听服务模块;

  
第一个步骤,Swarm 发现 Docker 集群中的节点。发现(discovery)是 Swarm 中用于维护Docker 集 群 状 态 的 机 制 。 既 然 涉 及 到 发 现 ( discovery ) , 那 在 这 之 前 必 须 先 有 注 册(register)。Swarm 中有专门负责发现(discovery)的模块,而关于注册(register)部分,不同的 discovery 模式下,注册(register)也会有不同的形式。
  目 前 , Swarm 中 提 供 了 5 种 不 同 的 发 现 ( discovery ) 机 制 : Node Discovery 、 FileDiscovery、Consul Discovery、EtcD Discovery 和 Zookeeper Discovery。
Hosted Discovery with Docker Hub,Docker Hub 提供的发现服务,需要连接外网。
docker run -d -p :2375 swarm manage token://
基于 KV 分布式存储系统,支持 etcd,consul,zookeeper
swarm join --advertise= consul:///
静态文件描述
swarm manage -H tcp:// file:///tmp/my_cluster
静态 IP 列表
swarm manage -H  nodes://,

  第二个步骤,Swarm 内部的调度(scheduler)模块被初始化。swarm 通过发现机制发现所有注册的 Docker Node,并收集到所有 Docker Node 的状态以及具体信息。此后,一旦Swarm 接收到具体的 Docker 管理请求,Swarm 需要对请求进行处理,并通过所有 DockerNode 的状态以及具体信息,来筛选(filter)决策到底哪些 Docker Node 满足要求,并通过一定的策略(strategy)将请求转发至具体的一个 Docker Node。
  
第三个步骤,Swarm 创建并初始化 API 监听服务模块。从功能的角度来讲,可以将该模块抽象为 Swarm Server。需要说明的是:虽然 Swarm Server 完全兼容 Docker 的 API,但是有不少 Docker 的命令目前是不支持的,毕竟管理 Docker 集群与管理单独的 Docker 会有一些区别。当 Swarm Server 被初始化并完成监听之后,用户即可以通过 Docker Client 向 Swarm发送 Docker 集群的管理请求。
  Swarm 的 swarm manage 接收并处理 Docker 集群的管理请求,即是 Swarm 内部多个模块协同 合 作 的 结 果 。 请 求 入 口 为 Swarm Server , 处 理 引 擎 为 Scheduler , 节 点 信 息 依 靠Disocovery。
  
swarm join
Swarm 的 swarm join 命令用于将 Docker Node 添加至 Swarm 管理的 Docker 集群中。从这点也可以看出 swarm join 命令的执行位于 Docker Node,因此在 Docker Node 上运行该命令,首先需要在 Docker Node 上安装 Swarm,由于该 Swarm 只会执行 swarm join 命令,故可以将其当成 Docker Node 上用于注册的 agent 模块。功能而言,swarm join 可以认为是完成 Docker Node 在 Swarm 节点处的注册(register)工作,以便 Swarm 在执行 swarm manage 时可以发现该 Docker Node。然而,上文提及的 5 种discovery 模式中,并非每种模式都支持 swarm join 命令。不支持的 discovery 的模式有 Node Discovery 与 File Discovery。

  Docker Node 上 swarm join 执行之后,标志着 Docker Node 向 Swarm 注册,请求加入 Swarm管理的 Docker 集群中。Swarm 通过注册信息,发现 Docker Node,并获取 Docker Node 的状态以及具体信息,以便处理 Docker 请求时作为调度依据。
  swarm list
Swarm 中的 swarm list 命令用以列举 Docker 集群中的 Docker Node。

  
Docker Node 的信息均来源于 Swarm 节点上注册的 Docker Node。而一个 Docker Node 在Swarm 节点上注册,仅仅是注册了 Docker Node 的 IP 地址以及 Docker 监听的端口号。
  使用 swarm list 命令时,需要指定 discovery 的类型,类型包括:token、etcd、file、zk 以及。而 swarm list 并未罗列 Docker 集群的动态信息,比如 Docker Node 真实的运行状态,或者 Docker Node 在 Docker 集群中扮演的角色信息。
  实验环境 rhel7

  Server1    192.168.122.21      manager

  Server2    192.168.122.22      node

  Server3    192.168.122.23      node
  安装docker服务

  
  开启服务

  [root@server1 ~]# systemctl start docker

  

  查看版本
  
集群搭建
  创建docker swarm集群:
  [root@server1 ~]# docker swarm init

  
  加入集群

  其它两台运行   使其加入集群  

  docker swarm join \     --token SWMTKN-1-4shsvq36kx6b0f8h4yma6wnmtkgewqhlbjmi284b223kxa0hdr-bqnj0zo8gbss6hgdbveesfqut \     192.168.122.21:2377
  
  [root@server1 ~]# docker node  --help
  

  三个节点均导入
  [root@server1 ~]# docker load -i nginx.tar  

  [root@server1 ~]# docker service create --name web -p 80:80 --replicas 2 nginx

  

  [root@server1 ~]# docker node  ls    #查看节点
  
  [root@server1 ~]# docker service ls #查看服务状态
  

  [root@server1 ~]# docker service ps web  #查看web状态
  

  浏览器访问
  
  [root@server1 ~]# docker service scale web=4 #设置服务数量
  

  
  
  添加可视图形界面
  [root@server1 ~]# docker load -i visualizer.tar   

  

  [root@server1 ~]# docker service create \
  > --name=viz \

  > --publish=8080:8080/tcp \

  > --constraint=node.role==manager \

  > --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \

  > dockersamples/visualizer
  

  
  二、滚动更新(灰度更新)
  
  先从物理机导出镜像,分别发送到个结点

  导出镜像[root@foundation12 ~]# docker save -o apache.tar rhel7:v2

  各个节点导入
  

  [root@server1 ~]# docker load -i apache.tar
  
  [root@server1 ~]# docker service update --image rhe7:v2 --update-parallelism 2 --update-delay 2s web

  #2秒更新一次,每次更新2
  

  

  访问
  
  192.168.122.21/22/23

  
  写入页面

  

  分别拷入到容器里
  [root@server1 ~]# docker cp index.html 5694899fc975:/usr/share/nginx/html
  

  测试  实现负载均衡

  浏览器访问IP,页面切换





运维网声明 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-675268-1-1.html 上篇帖子: docker 容器互联,Docker Compose 下篇帖子: CentOS7修改Docker容器和镜像默认存储位置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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