一、机器环境

  • 机器规划
172.16.0.89      swarm的manager节点      manager-node   
172.16.0.90 swarm的node节点      node1

机器版本(均是:CentOS Linux release 7.7.1908)

  • 设置主机名
在manager节点上
[root@manager-node ~]# hostnamectl --static set-hostname manager-node

在node1节点上

[root@node1 ~]# hostnamectl --static set-hostname node1

在2台机器上都要设置hosts,均执行如下命令:

vim /etc/hosts

......
172.16.0.89 manager-node
172.16.0.90 node1
  • 设置防火墙
关闭2台机器上的防火墙。如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)端口。
[root@manager-node ~]# systemctl disable firewalld.service     --禁止firewall开机启动
[root@manager-node ~]# systemctl stop firewalld.service --停止firewall
  • 安装docker

在2台机器上分别安装docker,这里使用的是【18.09.9】版本

二、创建集群

  • 创建Swarm

在 manager-node 节点上执行以下命令进行创建:

docker swarm init --advertise-addr 172.16.0.89

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值(要保存好)。

其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令:

docker swarm join --token SWMTKN-1-2202mw1jwjmqq075ego96j8pomplqawtjrbpobmxlld0gjcau6-4bniw4tiqwa5j1iz02p65iqwj 172.16.0.89:2377
  • 查看集群信息

执行 docker node ls 命令查看节点信息:

docker node ls

执行 docker info 命令查看详细信息:

docker info

  •  添加节点到swarm集群中

登录到node1节点上,执行前面创建swarm集群时输出的命令:

docker swarm join --token SWMTKN-1-2202mw1jwjmqq075ego96j8pomplqawtjrbpobmxlld0gjcau6-4bniw4tiqwa5j1iz02p65iqwj 172.16.0.89:2377

如果想要将其他更多的节点添加到这个swarm集群中,添加方法如上一致!

然后在manager-node管理节点上看一下集群节点的状态:

  •  Node Availablity
swarm集群中node的availability状态可以为:
  1. active:执行现有的task,且可以接受来自manager节点新的task分派;
  2. pause:现有的task继续执行,但不能指派新的task至该node,故障排除时会用到
  3. drain:把现有的task分派给其它node,且不再接受来自manager节点的任务分派,维护时会用到

有些文章會建議維護時可以把manager node設為drain,但實際上你會需要在manager node做管理的事情,例如有monitoring tools要跑(e.g. Portainer, swarm web GUI),或是需要與swarm溝通的logging engine,這些容器可不能被停掉(drain/pause),尤其這兩個狀態如果容器出了任何問題,沒辦法重新建立,建議不要用在manager node,而是用label的方式來限制(控制)manager tasks

示例1、下线节点:
docker node update --availability drain node1

如上,当node1的状态改为drain后,那么该节点就不会接受task任务分发,就算之前已经接受的任务也会转移到别的节点上。

示例2、上线节点:

docker node update --availability active node1

再次修改为active状态(即将下线的节点再次上线)

示例3、manager只作为管理节点????

在正式的生产环境中我们都建议这么做,因为在容器编排当中,区分Worker 和Master节点的主要原因是因为Worker 只负责完成任务,启动服务,而Master则负责任务的调配,一旦Master节点也运行服务,导致Master节点负载过重,则会使集群发生崩溃,所以工作节点排除manager是很有必要的。

docker node update --availability drain manager
  • 删除节点
docker node rm --force node1

  • 离开集群

在node1节点执行以下命令离开集群:

docker swarm leave

三、部署服务

  • 设置网络

在启动容器之前,先来创建一个覆盖网络,用来保证在不同主机上的容器网络互通的网络模式

docker network create -d overlay mrp_net

查看网络是否创建成功:

docker network ls

  • 创建服务

在manager-node节点上使用上面这个覆盖网络创建相应的服务,我这里用的是自己的应用masl:

docker service create --name masl -e TZ="Asia/Shanghai" --network mrp_net --replicas 2 -p 8081:8080 172.16.99.2:40305/masl:dev-yc-34

其中,--replicas 参数指定服务由几个实例组成。

使用 docker service ls 查看正在运行服务的列表:

docker service ls

使用 docker service inspect --pretty masl 查看服务信息:

docker service inspect --pretty masl

--pretty 使命令输出格式化为可读的格式,不加 --pretty 可以输出更详细的信息

使用docker service ps masl 查询到哪个节点正在运行该服务。
如下该容器被调度到manager-node节点上启动了,然后访问http://182.48.115.237即可访问这个容器应用(如果调度到其他节点,访问也是如此)
docker service ps masl

有上面命令可知,该服务分别在manager-node和node1节点上运行。分别登陆这2个节点,可以查看到masl容器在运行中

登陆manager-node节点查看:

登陆node1节点查看:

 

四、总结

1、Swarm上手很简单,Docker swarm可以非常方便的创建类似kubernetes那样带有副本的服务,确保一定数量的容器运行,保证服务的高可用,但功能比较简单;

2、Swarm、Kubernetes、Messos比较:

  • Swarm的优点和缺点都是使用标准的Docker接口,使用简单,容易集成到现有系统,但是更困难支持更复杂的调度,比如以定制接口方式定义的调度。
  • Kubernetes 是自成体系的管理工具,有自己的服务发现和复制,需要对现有应用的重新设计,但是能支持失败冗余和扩展系统。
  • Mesos是低级别 battle-hardened调度器,支持几种容器管理框架如Marathon, Kubernetes, and Swarm,现在Kubernetes和Mesos稳定性超过Swarm,在扩展性方面,Mesos已经被证明支持超大规模的系统,比如数百数千台主机,但是,如果你需要小的集群,比如少于一打数量的节点服务器数量,Mesos也许过于复杂了
 
 
 
参考资料:

Docker Swarm(一)集群部署的更多相关文章

  1. Docker Swarm redis 集群搭建

    Docker Swarm redis 集群搭建 环境1: 系统:Linux Centos 7.4 x64 内核:Linux docker 3.10.0-693.2.2.el7.x86_64 Docke ...

  2. Docker学习-Kubernetes - 集群部署

    Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...

  3. docker Swarm mode集群

    基本概念 Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具. 使用 Swarm 集群之前需要了解以下几个概念. 节点 运行 Docker 的主机可以主动 ...

  4. Docker Swarm nginx 集群搭建

    环境1: 系统:Linux Centos 7.4 x64 内核:Linux docker 3.10.0-693.2.2.el7.x86_64 Docker 版本:18.09.1 redis 版本:ng ...

  5. centos7 docker swarm加入集群失败

    提示的错误为 [root@localhost downloads]# docker swarm join --token SWMTKN-1-2ezr0k5ybds1la4vgi2z7j8ykxkmm0 ...

  6. 基于docker实现哨兵集群部署

    简单dockerfile文件,用于演示sentinel哨兵故障转移FROM centos:latest MAINTAINER BIXIAOYU RUN groupadd -r redis && ...

  7. Docker(二十一)-Docker Swarm集群部署

    介绍 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm ...

  8. Docker Swarm集群部署

    一.系统环境 1)服务器环境 节点名称 IP 操作系统 内核版本 manager 172.16.60.95 CentOs7 4.16.1-1.el7.elrepo.x86_64 node-01 172 ...

  9. docker~swarm搭建docker高可用集群

    回到目录 Swarm概念 Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入 ...

随机推荐

  1. [状压DP]子矩阵

    子 矩 阵 子矩阵 子矩阵 题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵 如,下面左图中选取第 2 . 4 ...

  2. [Fundamental of Power Electronics]-PART I-6.变换器电路-6.3 变压器隔离

    6.3 变压器隔离 在许多应用场合中,期望将变压器结合到开关变换器中,从而在变换器的输入输出之间形成直流隔离.例如,在离线(off-line)应用中(变换器输入连接到交流公用系统),根据监管部门要求, ...

  3. JS基础学习第四天

    对象(Object) 对象是JS中的引用数据类型对象是一种复合数据类型,在对象中可以保存多个不同数据类型的属性使用typeof检查一个对象时,会返回object 对象的分类: 1.内建对象- 由ES标 ...

  4. OO第四单元总结及学期总结

    目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...

  5. create-react-app 核心思路分析

    原文链接:http://axuebin.com/articles/fe-solution/cli/cra.html,转载请联系 Create React App is an officially su ...

  6. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

  7. BLE链路层状态机初探

    状态机 BLE链路层把所有的功能放到五种不同的状态中,在不同的状态分别执行不同的功能. 一般来说,BLE设备大致有这么几种状态:空闲,广播,扫描,发起连接和连接成功. 广播和扫描是相对应的,一个设备广 ...

  8. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之本地仓库-06

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之本地仓库-06 欢迎加QQ群:1026880196 进行讨论 1. 安装docker registry ...

  9. Docker下MySQL的安装

    1 概述 本文讲述了如何利用Docker去安装MySQL,以及MySQL自定义配置文件的相关设置. 2 安装Docker 首先安装Docker并开启服务: systemctl start docker ...

  10. SpringBoot自动装配,比较全的吧,来看看吧~

    文章挺长,表达不好,希望能有获~~~~~~~ Spring也提供使用注解来注册bean,为什么要用SpringBoot呢? 使用Spring应用,比如SpringMVC还行需要配置ViewResolv ...