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

[经验分享] Docker1.12+ Swarm

[复制链接]

尚未签到

发表于 2018-5-27 10:49:24 | 显示全部楼层 |阅读模式
  Docker Swarm是一个用于创建Docker主机(运行Docker守护进程的服务器)集群的工具,使用Swarm操作集群,会使用户感觉就像是在一台主机上进行操作
  docker1.12集成了swarmkit, 使你可以不用安装额外的软件包, 使用简单的命令启动创建docker swarm集群。
  如果你在运行 Docker 1.12时,你就可以原生创建一个 Swarm 集群 .
  集成了swarm集群的安全特性, 集成了K-V存储, 你现在不需要额外部署etcd或者consul
  在Docker1.12版本中,一个大的功能点是swarm集群(基于swarmkit项目),通过Docker命令可以直接实现docker-engine相互发现,并组建成为一个容器集群
  SwarmKit将节点分为两类:
  工作节点(Worker):负责通过执行器运行任务。SwarmKit的默认执行器为Docker容器执行器(Docker Container Executor)。
    (1)内建分布式存储,不要额外的数据库
    (2)支持Rolling update
    (3)容器高可用
    (4)通过TLS保证了节点之间通讯的安全
  管理节点(Manager):负责接收和响应用户请求,将集群状态调节到最终状态。在SwarmKit中,用户可以动态调整节点的角色,即在ManagerWorker之间转换。
  如下图所示,这是一个典型的master-slave的架构。每个节点都是运行着Docker EngineDocker主机。一些节点有更高的权限,被称为Manager。下面的节点是worker节点,接收来自manager组的任务指示。
DSC0000.png

  部署docker1.12 Swarm
  实验环境:
  这里选择三台主机运行Swarm,依次为:
  node1 192.168.1.107         时间同步服务器    系统CentOS7
  node2 192.168.1.129
  node3 192.168.1.130
  基本环境配置
  为了3台主机确保时间一致在node1上面配置ntp服务器
[root@node1 ~]# yum  -y  install  ntp
[root@node1 ~]# vim  /etc/ntp.conf  添加下面两行

  server 127.127.1.0
  fudge  127.127.1.0 stratum 8
[root@node1 ~]# systemctl  restart  ntpd
[root@node1 ~]# firewall-cmd  --permanent  --add-port=123/udp
[root@node1 ~]# firewall-cmd --reload  node2和node3两台节点服务器进行时间同步
[root@node2 ~]# /usr/sbin/ntpdate  192.168.1.107  21 Aug 15:31:23 ntpdate[4304]: step time server 192.168.1.107 offset 0.621419 se
[root@node3 ~]# /usr/sbin/ntpdate  192.168.1.107  21 Aug 15:31:52 ntpdate[4239]: adjust time server 192.168.1.107 offset -0.004892 sec
  关闭selinux,开启路由转发3台配置一样
[root@node1 ~]# setenforce   0
[root@node1 ~]# vim /etc/sysctl.conf  添加

  net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl  -p  net.ipv4.ip_forward = 1

  修改主机名3台方法一样
  以node1 为例子:
[root@node1 ~]# vim /etc/hostname  node1

  

  系统环境准备
  准备系统环境, 配置host列表
3台主机都修改/etc/hosts文件,添加所有主机的ip地址和主机名的映射记录
  以node1 为例子:
[root@node1 ~]# vim  /etc/hosts  127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

  ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  192.168.1.107  node1
  192.168.1.129  node2
  192.168.1.130  node3
  开启宿主机之间的端口 3台同样配置
  TCP端口2377集群管理端口
  TCP与UDP端口7946节点之间通讯端口
  TCP与UDP端口4789 overlay网络通讯端口
[root@node1 ~]# firewall-cmd  --permanent   --add-port=2377/tcp
[root@node1 ~]# firewall-cmd  --permanent   --add-port=2377/udp
[root@node1 ~]# firewall-cmd  --permanent   --add-port=7946/tcp
[root@node1 ~]# firewall-cmd  --permanent   --add-port=7946/udp
[root@node1 ~]# firewall-cmd  --permanent   --add-port=4789/tcp
[root@node1 ~]# firewall-cmd  --permanent   --add-port=4789/udp
[root@node1 ~]# firewall-cmd --reload  
  配置所有节点密钥登录.
  配置所下节点密钥互信, 在node1可以免密码登录各节点,只在node1上执行:
  生成sshkey
[root@node1 ~]# ssh-keygen  Generating public/private rsa key pair.

  Enter file in which to save the key (/root/.ssh/id_rsa):
  Created directory '/root/.ssh'.
  Enter passphrase (empty for no passphrase):
  Enter same passphrase again:
  Your identification has been saved in /root/.ssh/id_rsa.
  Your public key has been saved in /root/.ssh/id_rsa.pub.
  The key fingerprint is:
  44:ce:a9:46:24:60:d8:06:60:d9:df:5d:b4:33:1b:03 root@node1
  The key's randomart image is:
  +--[ RSA 2048]----+
  |+==.. . .E..     |
  |ooo. o + ....    |
  | .  . o * .*     |
  |     o + .  *    |
  |      o S  .     |
  |     .           |
  |                 |
  |                 |
  |                 |
  +-----------------+
  发布sshkey到各个节点
[root@node1 ~]# ssh-copy-id  node1
[root@node1 ~]# ssh-copy-id  node2
[root@node1 ~]# ssh-copy-id  node3  测试密钥登录

[root@node1 ~]# for  N in  $(seq 1 3); do ssh node$N hostname; done ;  node1

  node2
  node3
  

  在所有节点上安装docker 1.12:
  以下命令请在所有节点上执行.

  安装docker
[root@node1 ~]# yum -y install docker  设为开机自启动并启动docker

[root@node1 ~]# systemctl  enable  docker
[root@node1 ~]# systemctl  start  docker  检查docker版本

[root@node1 ~]# docker -v  Docker version 1.12.6, build 88a4867/1.12.6

  
  docker1.12 Swarm 模式简介
  Docker Engine 1.12 集成了Swarm集群工具.
  主要使用三个新的命令行工具创建一个swarm集群:
  docker swarm 开启swarm模式; 加入Swarm集群; 配置集群参数
  docker node 查询集群节点信息; 提升/移除一个管理节点; 管理swarm节点主机
  docker service 创建管理 service
  可以查看docker  --help
  
  创建 Swarm集群
  在node1上初始化swram集群:
  注意 你只需要在一个node1上初始化swarm集群, 其他node加入这个集群就行了, 所以以下命令只需要在node1上运行.
[root@node1 ~]# docker swarm init  --advertise-addr  192.168.1.107  Swarm initialized: current node (9boy0msaa19b67z4ssp8yc32d) is now a manager.

  
  To add a worker to this swarm, run the following command:
  
      docker swarm join \
      --token SWMTKN-1-2fmdoue8fnqf26yp5m3quoxav33nxrjwbogwhcftpnlpjgoy16-7c3tgluhurunkdy9y9fc0ei65 \
      192.168.1.107:2377
  
  To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
  查看端口号监听情况
[root@node1 ~]# netstat  -anpt |  grep docker  tcp        0      0 192.168.1.107:32853     192.168.1.107:2377      ESTABLISHED 6259/dockerd-curren

  tcp        0      0 127.0.0.1:54831         127.0.0.1:2377          ESTABLISHED 6259/dockerd-curren
  tcp6       0      0 :::2377                 :::*                    LISTEN      6259/dockerd-curren
  tcp6       0      0 :::7946                 :::*                    LISTEN      6259/dockerd-curren
  tcp6       0      0 192.168.1.107:2377      192.168.1.107:32853     ESTABLISHED 6259/dockerd-curren
  tcp6       0      0 127.0.0.1:2377          127.0.0.1:54831         ESTABLISHED 6259/dockerd-curren
  检查node1 docker swarm mode信息:
[root@node1 ~]# docker info  查看主要内容

  Swarm: active #活跃
   NodeID: 9boy0msaa19b67z4ssp8yc32d
   Is Manager: true #管理角色
   ClusterID: 4536wglalec5c489ul0gd8dhn
   Managers: 1
   Nodes: 1
   Orchestration:
    Task History Retention Limit: 5
  查看swarm集群node列表
[root@node1 ~]# docker node  ls  ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

  9boy0msaa19b67z4ssp8yc32d *  node1     Ready   Active        Leader
  可以看到,我们的swarm集群中只有一个节点.现在我们把其他节点加入我们的集群中:
  把其他节点加入集群中:
  方法一:在node1通过ssh, 在node2-node3上执行上面的加入集群命令:
  本次不用此方法:
DSC0001.png

  方法二: 如果你不记得方法一提示的加入swarm集群的命令和密钥可以使用如下方式查看worker节点和manager节点的加入命令
  本次使用:将node2和node3使用worker节点方式加入swarm集群
  首先在node1上面查询集群的命令和密钥
[root@node1 ~]# docker swarm  join-token  worker  To add a worker to this swarm, run the following command:

  
      docker swarm join \
      --token SWMTKN-1-2fmdoue8fnqf26yp5m3quoxav33nxrjwbogwhcftpnlpjgoy16-7c3tgluhurunkdy9y9fc0ei65 \
      192.168.1.107:2377
  在node2和node3上面执行(直接将红色代码复制粘贴到节点服务器即可)
  [root@node2 ~]#docker swarm join \
  >     --token SWMTKN-1-2fmdoue8fnqf26yp5m3quoxav33nxrjwbogwhcftpnlpjgoy16-7c3tgluhurunkdy9y9fc0ei65 \
  >     192.168.1.107:2377
  This node joined a swarm as a worker.
  
  [root@node3 ~]# docker swarm join \
  >     --token SWMTKN-1-2fmdoue8fnqf26yp5m3quoxav33nxrjwbogwhcftpnlpjgoy16-7c3tgluhurunkdy9y9fc0ei65 \
  >     192.168.1.107:2377
  This node joined a swarm as a worker.
  如果想让服务器以manager节点加入swar集群在node1上面查询(直接将红色代码复制粘贴到节点服务器即可)
[root@node1 ~]# docker swarm  join-token  manager  To add a manager to this swarm, run the following command:

  
      docker swarm join \
      --token SWMTKN-1-2fmdoue8fnqf26yp5m3quoxav33nxrjwbogwhcftpnlpjgoy16-agvz0l10lykt66kd4a27fgegq \
      192.168.1.107:2377
  
  再次检查集群节点列表, 我们可以看到所有的服务器都已经加入swarm集群
[root@node1 ~]# docker node ls  ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

  8s3cxo00phorkfjb1qhr9iu05    node2     Ready   Active        
  9boy0msaa19b67z4ssp8yc32d *  node1     Ready   Active        Leader
  cigtp3x969rcsjzlh5cp2g7s7    node3     Ready   Active      
  不过现在集群只有一个manager节点node1, 为了swarm集群的高可用,和避免单点故障. 我们希望建立多个manager节点集群.
  只需要通过如下命令, 将node2worker节点提升成为manager节点:
[root@node1 ~]# docker node promote node2  Node node2 promoted to a manager in the swarm.

[root@node1 ~]# docker  node ls  ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

  8s3cxo00phorkfjb1qhr9iu05    node2     Ready   Active        Reachable
  9boy0msaa19b67z4ssp8yc32d *  node1     Ready   Active        Leader
  cigtp3x969rcsjzlh5cp2g7s7    node3     Ready   Active  
  
  查看node2的docker  info
[root@node2~]# docker info  查看主要内容

  Swarm: active
   NodeID: 8s3cxo00phorkfjb1qhr9iu05
   Is Manager: true
   ClusterID: 4536wglalec5c489ul0gd8dhn
   Managers: 2
   Nodes: 3
  

  查看node3的docker  info
[root@node3 ~]# docker  info  查看主要内容

  Swarm: active
   NodeID: cigtp3x969rcsjzlh5cp2g7s7
   Is Manager: false
   Node Address: 192.168.1.130
  
  现在我们可以看到, 已经有2manager节点了, 一个Leader节点, 一个Reachable节点. 现在你也可以在node2上面管理整个swarm集群.
  使用node2让node3下线
  查看ID
[root@node2 ~]# docker  node ls  ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
  8s3cxo00phorkfjb1qhr9iu05 *  node2     Ready   Active        Reachable
  9boy0msaa19b67z4ssp8yc32d    node1     Ready   Active        Leader
  cigtp3x969rcsjzlh5cp2g7s7    node3     Ready   Active        
  使用命令让node3下线
[root@node2 ~]# docker node  update  --availability  drain  cigtp3x969rcsjzlh5cp2g7s7  cigtp3x969rcsjzlh5cp2g7s7

[root@node2 ~]# docker node ls  ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
  8s3cxo00phorkfjb1qhr9iu05 *  node2     Ready   Active        Reachable
  9boy0msaa19b67z4ssp8yc32d    node1     Ready   Active        Leader
  cigtp3x969rcsjzlh5cp2g7s7    node3     Ready   Drain
   使用命令让node3上线
[root@node2 ~]# docker  node  update  --availability  active cigtp3x969rcsjzlh5cp2g7s7  cigtp3x969rcsjzlh5cp2g7s7

[root@node2 ~]# docker node  ls  ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

  8s3cxo00phorkfjb1qhr9iu05 *  node2     Ready   Active        Reachable
  9boy0msaa19b67z4ssp8yc32d    node1     Ready   Active        Leader
  cigtp3x969rcsjzlh5cp2g7s7    node3     Ready   Active  
  swarm集群就搭建完毕了
  学习方法:
  习惯使用docker命令帮助:docker<command>  --help
  总结:
  docker swarm 集群管理,子命令主要有下面几个。
  docker swarm init命令用于初始化一个集群
  docker swarm join命令用于加入一个现有集群
  docker swarm leave命令由于离开集群
  

运维网声明 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-481711-1-1.html 上篇帖子: 使用Rancher和DroneCI建立超高速Docker CI/CD流水线 下篇帖子: Docker快速部署(实战型)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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