docker1.12+swarm

author author     2022-09-16     435

关键词:

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组的任务指示。

技术分享

部署docker1.12 Swarm

实验环境:

这里选择三台主机运行Swarm,依次为:

node1 192.168.1.107         时间同步服务器    系统CentOS7

node2 192.168.1.129

node3 192.168.1.130

基本环境配置

为了3台主机确保时间一致node1上面配置ntp服务器

[[email protected] ~]# yum  -y  install  ntp
[[email protected] ~]# vim  /etc/ntp.conf

添加下面两行

server 127.127.1.0

fudge  127.127.1.0 stratum 8

[[email protected] ~]# systemctl  restart  ntpd
[[email protected] ~]# firewall-cmd  --permanent  --add-port=123/udp
[[email protected] ~]# firewall-cmd --reload

node2node3两台节点服务器进行时间同步

[[email protected] ~]# /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

[[email protected] ~]# /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台配置一样

[[email protected] ~]# setenforce   0
[[email protected] ~]# vim /etc/sysctl.conf

添加

net.ipv4.ip_forward = 1

[[email protected] ~]# sysctl  -p

net.ipv4.ip_forward = 1

修改主机名3台方法一样

node1 为例子:

[[email protected] ~]# vim /etc/hostname

node1


系统环境准备

准备系统环境, 配置host列表
3台主机都修改/etc/hosts文件,添加所有主机的ip地址和主机名的映射记录

node1 为例子:

[[email protected] ~]# 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集群管理端口

TCPUDP端口7946节点之间通讯端口

TCPUDP端口4789 overlay网络通讯端口

[[email protected] ~]# firewall-cmd  --permanent   --add-port=2377/tcp
[[email protected] ~]# firewall-cmd  --permanent   --add-port=2377/udp
[[email protected] ~]# firewall-cmd  --permanent   --add-port=7946/tcp
[[email protected] ~]# firewall-cmd  --permanent   --add-port=7946/udp
[[email protected] ~]# firewall-cmd  --permanent   --add-port=4789/tcp
[[email protected] ~]# firewall-cmd  --permanent   --add-port=4789/udp
[[email protected] ~]# firewall-cmd --reload

配置所有节点密钥登录.

配置所下节点密钥互信, node1可以免密码登录各节点,只在node1上执行:

生成sshkey

[[email protected] ~]# 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 [email protected]

The key‘s randomart image is:

+--[ RSA 2048]----+

|+==.. . .E..     |

|ooo. o + ....    |

| .  . o * .*     |

|     o + .  *    |

|      o S  .     |

|     .           |

|                 |

|                 |

|                 |

+-----------------+

发布sshkey到各个节点

[[email protected] ~]# ssh-copy-id  node1
[[email protected] ~]# ssh-copy-id  node2
[[email protected] ~]# ssh-copy-id  node3

测试密钥登录

[[email protected] ~]# for  N in  $(seq 1 3); do ssh node$N hostname; done ;

node1

node2

node3


所有节点上安装docker 1.12:

以下命令请在所有节点上执行.

安装docker

[[email protected] ~]# yum -y install docker

设为开机自启动并启动docker

[[email protected] ~]# systemctl  enable  docker
[[email protected] ~]# systemctl  start  docker

检查docker版本

[[email protected] ~]# 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上运行.

[[email protected] ~]# 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.

查看端口号监听情况

[[email protected] ~]# 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信息:

[[email protected] ~]# docker info

查看主要内容

Swarm: active   #活跃

 NodeID: 9boy0msaa19b67z4ssp8yc32d

 Is Manager: true  #管理角色

 ClusterID: 4536wglalec5c489ul0gd8dhn

 Managers: 1

 Nodes: 1

 Orchestration:

  Task History Retention Limit: 5

查看swarm集群node列表

[[email protected] ~]# docker node  ls

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

9boy0msaa19b67z4ssp8yc32d *  node1     Ready   Active        Leader

可以看到,我们的swarm集群中只有一个节点.现在我们把其他节点加入我们的集群中:

把其他节点加入集群中:

方法一node1通过ssh, 在node2-node3上执行上面的加入集群命令:

本次不用此方法:

技术分享

方法二 如果你不记得方法一提示的加入swarm集群的命令和密钥可以使用如下方式查看worker节点和manager节点的加入命令

本次使用:将node2node3使用worker节点方式加入swarm集群

首先在node1上面查询集群的命令和密钥

[[email protected] ~]# 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

node2node3上面执行(直接将红色代码复制粘贴到节点服务器即可)

[[email protected] ~]#docker swarm join

>     --token SWMTKN-1-2fmdoue8fnqf26yp5m3quoxav33nxrjwbogwhcftpnlpjgoy16-7c3tgluhurunkdy9y9fc0ei65

>     192.168.1.107:2377

This node joined a swarm as a worker.

 

[[email protected] ~]# docker swarm join

>     --token SWMTKN-1-2fmdoue8fnqf26yp5m3quoxav33nxrjwbogwhcftpnlpjgoy16-7c3tgluhurunkdy9y9fc0ei65

>     192.168.1.107:2377

This node joined a swarm as a worker.

如果想让服务器以manager节点加入swar集群在node1上面查询(直接将红色代码复制粘贴到节点服务器即可)

[[email protected] ~]# 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集群

[[email protected] ~]# 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节点:

[[email protected] ~]# docker node promote node2

Node node2 promoted to a manager in the swarm.

[[email protected] ~]# docker  node ls

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

8s3cxo00phorkfjb1qhr9iu05    node2     Ready   Active        Reachable

9boy0msaa19b67z4ssp8yc32d *  node1     Ready   Active        Leader

cigtp3x969rcsjzlh5cp2g7s7    node3     Ready   Active  

 

查看node2docker  info

[[email protected]~]# docker info

查看主要内容

Swarm: active

 NodeID: 8s3cxo00phorkfjb1qhr9iu05

 Is Manager: true

 ClusterID: 4536wglalec5c489ul0gd8dhn

 Managers: 2

 Nodes: 3


查看node3docker  info

[[email protected] ~]# docker  info

查看主要内容

Swarm: active

 NodeID: cigtp3x969rcsjzlh5cp2g7s7

 Is Manager: false

 Node Address: 192.168.1.130

 

现在我们可以看到, 已经有2manager节点了, 一个Leader节点, 一个Reachable节点. 现在你也可以在node2上面管理整个swarm集群.

使用node2node3下线

查看ID

[[email protected] ~]# docker  node ls

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

8s3cxo00phorkfjb1qhr9iu05 *  node2     Ready   Active        Reachable

9boy0msaa19b67z4ssp8yc32d    node1     Ready   Active        Leader

cigtp3x969rcsjzlh5cp2g7s7    node3     Ready   Active        

使用命令让node3下线

[[email protected] ~]# docker node  update  --availability  drain  cigtp3x969rcsjzlh5cp2g7s7

cigtp3x969rcsjzlh5cp2g7s7

[[email protected] ~]# docker node ls

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

8s3cxo00phorkfjb1qhr9iu05 *  node2     Ready   Active        Reachable

9boy0msaa19b67z4ssp8yc32d    node1     Ready   Active        Leader

cigtp3x969rcsjzlh5cp2g7s7    node3     Ready   Drain

 使用命令让node3上线

[[email protected] ~]# docker  node  update  --availability  active cigtp3x969rcsjzlh5cp2g7s7

cigtp3x969rcsjzlh5cp2g7s7

[[email protected] ~]# 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命令由于离开集群


本文出自 “duyuheng” 博客,谢绝转载!

docker1.12新增swarm集群

在Docker1.12新版本中,一个新增加的功能点是swarm集群,通过docker命令可以直接实现docker-engine相互发现,并组建成为一个容器集群。有关集群的docker命令如下: (1)dockerswarm:集群管理,子命令有init,join,leave,update (2)doc... 查看详情

markdown在aws上创建docker1.12swarm集群(代码片段)

查看详情

dockerswarm(代码片段)

...资源的,比较适合中小型公司使用。DockerSwarm介绍Swarm在Docker1.12版本之前属于一个独立的项目,在Docker1.12版 查看详情

dockerswarm群集项目案例

...arm操作集群,会使用户感觉就像是在一台主机上进行操作docker1.12集成了swarmkit,使你可以不用安装额外的软件包,使用简单的命令启动创建dockerswarm集群。如果你在运行Docker1.12时,你就可以原生创建一个Swarm集群.集成了swarm 查看详情

Docker 1.12:多副本,单数据库

】Docker1.12:多副本,单数据库【英文标题】:Docker1.12:Multiplereplicas,singledatabase【发布时间】:2017-01-0421:49:43【问题描述】:随着Docker1.12引入新的“swarm模式”,我们一直在尝试将我们的应用程序迁移到容器上并利用swarm模式的编... 查看详情

dockerswarm群集

...arm操作集群,会使用户感觉就像是在一台主机上进行操作docker1.12集成了swarmkit,使你可以不用安装额外的软件包,使用简单的命令启动创建dockerswarm集群。如果你在运行Docker1.12时,你就可以原生创建一个Swarm集群 . 查看详情

dockerswarm集群

          Docker1.12+swrmkit    docker1.12集成了swarmkit,使你可以不用安装额外的软件包,使用简单的命令启动创建dockerswarm集群。如果你在运行Docker1.12时,你就可以原生创建一个Swarm集... 查看详情

docker技术剖析--docker1.12版本+swarmkit

...arm操作集群,会使用户感觉就像是在一台主机上进行操作docker1.12集成了swarmkit,使你可以不用安装额外的软件包,使用简单的命令启动创建dockerswarm集群。如果你在 查看详情

docker&swarm1.2

docker1.12版本后swarm内置,不需要另外安装。 一、dockerswarm1、dockerswarminit--listen-addr<MANAGER-IP>:<PORT>初始化swarm集群,并将该节点作为管理节点2、dockernodels查看swarm集群运行情况3、dockerswarmjoinip:prot节点加入集群4、docker... 查看详情

dockerswarm集群环境搭建(代码片段)

一、简介1.什么是dockerswarm?Swarm在Docker1.12版本之前属于一个独立的项目,在Docker1.12版本发布之后,该项目合并到了Docker中,成为Docker的一个子命令。目前,Swarm是Docker社区提供的唯一一个原生支持Docker集群管理的工具。它可以把... 查看详情

docker:docker三剑客之dockerswarm(代码片段)

...资源的,比较适合中小型公司使用。DockerSwarm介绍Swarm在Docker1.12版本之前属于一个独立的项目,在Docker1.12版 查看详情

dockerswarm

...操作集群,会使用户感觉就像是在一台主机上进行操作,docker1.12集成了swarmkit,使你可以不用安装额外的软件包,使用简单的命令启动创建dockerswarm集群。实验环境:这里选择三台主机运行Swarm,依次为:node1192.168.182.100node2192.168.182... 查看详情

dockerswarm集群部署

dockerswarm集群构建:swarm在docker1.12版本后内置#h官方文档tps://docs.docker.com/engine/swarm/#feature-highlights系统环境: centos7.3 docker17.061、初始化manager节点: dockerswarminit 为实现高可用,manager节点需要有奇数个,类 查看详情

docker里面swarm是啥?

...部署,显然DockerSwarm会更加适合。《Linux就该这么学》从Docker1.12.0版本开始,DockerSwarm已经包含在Docker引擎中(dockerswarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置Etcd或者Consul来进行服务发现配置了。 查看详情

dockerswarm介绍

...都能使用Swarm,包括DockerCompose、DockerMachine、Jenkins等等。Docker1.12版本之后,Swarm已经包含在Docker引擎中了,不需要再手动安装Swarm相关的组件了。Swarm遵循可插拔原则(swap,plug,andplay),它的后台引擎是可替换的,在大规模生产环境... 查看详情

linux企业运维——docker三剑客之dockerswarm

...本创建集群5、Swarm图形化管理界面1、DockerSwarm简介Swarm在Docker1.12 查看详情

docker1.12集群

??环境介绍虚拟机两台,vmware,网络为NATnode139:192.168.190.139Node140:192.168.190.140??设置hostname 以139为例[[email protected]~]$hostnamelocalhost.localdomain[[email protected]~]$sudohostnamectlset-hostnam 查看详情

docker三剑客之swarm(代码片段)

...ff0c;对于微服务的部署,显然DockerSwarm会更加适合。从Docker1.12.0版本开始,Docker 查看详情