部署Swarm - Deploy Swarm

2023-10-27

参考文档:https://docs.docker.com/swarm/install-manual/

使用的部署环境

参考文档中是要把Swarm部署到AWS的EC2上的,没有这样的条件,所以选择在本地建立多个虚机机来搭建。
操作系统选择centos7,共建立了5个虚拟机, 为了简单起见,均使用root用户做操作。

[root@mamager1 ~]# cat /etc/hosts
192.168.221.136 manager0
192.168.221.137 manager1
192.168.221.138 consul0
192.168.221.139 node0
192.168.221.140 node1

manager0和manager1是swarm的管理结点,两个节点用来做高可用。
consul0节点是服务发现结点,部署了consul
node0和node1是资源结点

5 个节点都事先安装好了docker engine 1.12

安装docker: curl -sSL https://get.docker.com/ | sh
启动docker: docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

开始部署

配置好以上环境后,可以直接进入参考文档的 Step 4 了

Step 4. Set up a discovery backend

这一步是用来创建服务发现功能,采用了consul作为服务发现服务程序,也可以选择zookeeper,etcd。

安装consul是比较简单的,直接运行一个容器就好了。

在consul0结点上运行一下命令:

docker run -d -p 8500:8500 --name=consul progrium/consul -server -bootstrap
Step 5. Create Swarm cluster

Swarm的安装和运行也是比较简单的,同样是使用容器运行。

在manager0结点上运行以下命令
docker run -d -p 4000:4000 swarm manage -H :4000 –replication –advertise 192.168.221.136:4000 consul://192.168.221.138:8500

在manager1结点上运行以下命令
docker run -d -p 4000:4000 swarm manage -H :4000 –replication –advertise 192.168.221.137:4000 consul://192.168.221.138:8500

在node0结点上运行以下命令
docker run -d swarm join –advertise=192.168.221.139:2375 consul://192.168.221.138:8500

在node1结点上运行以下命令
docker run -d swarm join –advertise=192.168.221.140:2375 consul://192.168.221.138:8500

试用一下

在manager0上执行命令: docker -H :4000 info

[root@localhost ~]# docker -H :4000 info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 4
Server Version: swarm/1.2.4
Role: replica
Primary: 192.168.221.137:4000
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint
Nodes: 2
 node0: 192.168.221.139:2375
  └ ID: 6UEQ:FE4C:QYPC:7EFT:CXYZ:EPDF:OYWD:5L5U:QAB2:32EW:3GYS:GZAR
  └ Status: Healthy
  └ Containers: 1 (1 Running, 0 Paused, 0 Stopped)
  └ Reserved CPUs: 0 / 4
  └ Reserved Memory: 0 B / 1.003 GiB
  └ Labels: kernelversion=3.10.0-327.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper
  └ UpdatedAt: 2016-08-02T10:10:57Z
  └ ServerVersion: 1.12.0
 node1: 192.168.221.140:2375
  └ ID: RTT2:OFYE:MWP5:GVAY:QUTG:QHZU:3AXA:OILX:UG5K:D3RM:6XJE:QX2Z
  └ Status: Healthy
  └ Containers: 1 (1 Running, 0 Paused, 0 Stopped)
  └ Reserved CPUs: 0 / 4
  └ Reserved Memory: 0 B / 1.003 GiB
  └ Labels: kernelversion=3.10.0-327.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper
  └ UpdatedAt: 2016-08-02T10:10:39Z
  └ ServerVersion: 1.12.0
Plugins:
 Volume: 
 Network: 
Swarm: 
 NodeID: 
 Is Manager: false
 Node Address: 
Security Options:
Kernel Version: 3.10.0-327.el7.x86_64
Operating System: linux
Architecture: amd64
CPUs: 8
Total Memory: 2.005 GiB
Name: cfb6647dfc11
Docker Root Dir: 
Debug Mode (client): false
Debug Mode (server): false
WARNING: No kernel memory limit support

在manager1上执行命令: docker -H :4000 info

[root@mamager1 ~]# docker -H :4000 info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 4
Server Version: swarm/1.2.4
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint
Nodes: 2
 node0: 192.168.221.139:2375
  └ ID: 6UEQ:FE4C:QYPC:7EFT:CXYZ:EPDF:OYWD:5L5U:QAB2:32EW:3GYS:GZAR
  └ Status: Healthy
  └ Containers: 1 (1 Running, 0 Paused, 0 Stopped)
  └ Reserved CPUs: 0 / 4
  └ Reserved Memory: 0 B / 1.003 GiB
  └ Labels: kernelversion=3.10.0-327.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper
  └ UpdatedAt: 2016-08-02T10:11:33Z
  └ ServerVersion: 1.12.0
 node1: 192.168.221.140:2375
  └ ID: RTT2:OFYE:MWP5:GVAY:QUTG:QHZU:3AXA:OILX:UG5K:D3RM:6XJE:QX2Z
  └ Status: Healthy
  └ Containers: 1 (1 Running, 0 Paused, 0 Stopped)
  └ Reserved CPUs: 0 / 4
  └ Reserved Memory: 0 B / 1.003 GiB
  └ Labels: kernelversion=3.10.0-327.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper
  └ UpdatedAt: 2016-08-02T10:11:43Z
  └ ServerVersion: 1.12.0
Plugins:
 Volume: 
 Network: 
Swarm: 
 NodeID: 
 Is Manager: false
 Node Address: 
Security Options:
Kernel Version: 3.10.0-327.el7.x86_64
Operating System: linux
Architecture: amd64
CPUs: 8
Total Memory: 2.005 GiB
Name: 558a052d79fa
Docker Root Dir: 
Debug Mode (client): false
Debug Mode (server): false
WARNING: No kernel memory limit support

根据Role,可以看出来,manager1是主,manager0是从,已经有两个node加入进来了,分别是node0: 192.168.221.139:2375node1: 192.168.221.140:2375

在manager1上执行以下命令,查看正在运行的容器

[root@mamager1 ~]# docker -H :4000 ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
fa5f096d9aa4        swarm               "/swarm join --advert"   47 minutes ago      Up 47 minutes       2375/tcp            node1/infallible_montalcini
7ca9201566b1        swarm               "/swarm join --advert"   About an hour ago   Up About an hour    2375/tcp            node0/compassionate_shannon

在manager1上执行以下命令,创建一个容器:

[root@mamager1 ~]# docker -H :4000 run hello-world
[root@mamager1 ~]# docker -H :4000 ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
efecac9a30e7        hello-world         "/hello"                 6 seconds ago       Exited (0) 5 seconds ago                       node0/determined_hoover
fa5f096d9aa4        swarm               "/swarm join --advert"   49 minutes ago      Up 49 minutes              2375/tcp            node1/infallible_montalcini
7ca9201566b1        swarm               "/swarm join --advert"   About an hour ago   Up About an hour           2375/tcp            node0/compassionate_shannon

可以看到 hello-world已经运行过了,但是hello-world在运行后就退出了,所以需要用 ps -a 才能看到。

高可用

参考文档的第7步是测试Swarm管理结点的高可用,挂掉主节点,从结点会切换为主

Step 7. Test Swarm failover

结论是可以用的,就不贴过程了,干掉manager1上面的swarm容器后,在mangager0上执行 docker -H :4000 info, 可以看到manager0已经变为主了。

踩过的坑

在部署的过程中,也是遇到了一些问题的,都不是大问题,很快就能解决。

  • ip地址: 发现不了结点
    因为刚开始的时候,我已经把host和ip信息写入/etc/hosts文件里面了,所以启动swarm manager和swarm ndoe的使用用的是机器名称而不是直接写的IP,这样引起的问题是,这些参数会带入到swarm的容器中,容器中是没有/etc/hosts文件的,所以就会找不到相应的服务,导致所有服务都不能正常启动

  • 防火墙: no route to host
    没有配置防火墙,导致node结点的2375端口不能被manager结点访问,所以修改了一下防火墙策略

firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --zone=dmz --add-port=2375/tcp --permanent
firewall-cmd --reload
  • docker id: prending
    我用的5个虚拟机都是直接从一个basic复制过来的,basic已经安装好docker了,所以导致了所有docker id 都是相同的。使用docker info可以看到每个docker的ID值。 结果就是,所有的结点的程序都起来了,但是从 manager1结点看,node只有一个是Healthy的,另外一个的状态一直是Prending。解决这个问题也比较简单,删除/etc/docker/key.json,重启启动docker engine和node结点上运行的swarm join容器就好了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部署Swarm - Deploy Swarm 的相关文章

随机推荐

  • 解放生产力,社媒运营人还能这样玩转ChatGPT?

    相信大家这段时间都被ChatGPT刷屏了吧 东哥我也不例外 基本上一打开社媒平台都是在讨论ChatGPT 那社媒运营人应该如何使用ChatGPT呢 东哥今天就跟大家唠唠 利用ChatGPT写广告标语 广告文案 运营人常常为广告标语 广告文案
  • 一碗云南米线,加剧速食食品赛道“内卷”?

    说起云南 人们的印象往往是藏在苍山洱海 玉龙雪山里的风花雪月 然而 生活中最常见的 滇味 却是一碗鲜香美味 软中带劲的米线 近年来 从广西的螺蛳粉到河南的酸辣粉 越来越多带着地域特色的主食被装进小小纸桶 成为速食食品行业的新品类 如今 云南
  • 非科班进大厂必备算法

    基础数据结构的融合是成为庞大系统的基石 比如 Redis 中的跳跃表 数据库索引 B 树等 只有对基础的数据结构足够的熟悉才能更容易去理解稍微复杂的结构 就仿佛我们闯关打怪一样 一步一步解锁直到结局 今天想和大家一起分享的是常见数据结构以及
  • @Lazy标签解决问题的原理

    Lazy原理解析 文章目录 Lazy原理解析 1铺垫知识点 2 lazy解决问题原理 3 lazy为什么不能用在原型模式中 4其他解决循环依赖的办法 最近在重构一个国重项目的时候 用 lazy解决了循环依赖的问题 在自己的类中又依赖了自己
  • 图像恢复系列(11)之修复(inpainting)

    十一 图像恢复 修复 27 WaveFill A Wavelet based Generation Network for Image Inpainting 图像修复旨在用逼真的内容完成图像缺失或损坏的区域 当前流行的方法通过使用生成对抗网
  • 金山文档手机app服务器异常,为什么我的手机看不了金山文档 看不了金山文档怎么办...

    1 手机wps上找到 我的office 点击上面的 登录wps 使用有关的账号登录 2 使用的QQ账号登录 登录成功 就可以使用wps的云文档功能了 可以将文档加入文档 只要在电脑上登录就可以同步查看了 3 在菜单当中找到 打开 在 导入到
  • 推荐三款最好用的压缩/解压软件

    写在前面 推荐三款特别好用的压缩 解压软件 Bandizip WinRAR 7 Zip 这三款软件也分别代表了三种常用的压缩格式 zip rar 7z 压缩格式 格式 优点 速度 zip 兼容性好 快 rar 私有格式 中 7z 压缩率高
  • 数据库架构在美团点评的演变实践

    前言 IT时代的缩影基本被CPU 操作系统 数据库这三大核心领域 支撑了半个世纪人类的商业科技文明 本文讲到美团点评数据库的演变 首先从数据库的简史讲起 把数据库划分成三个时代 分别就是关系型数据库时代 NoSQL时代 NewSQL时代 下
  • 【Kaggle】Stable Diffusion 竞赛(2023 年 5 月 11 日版本,准确率 0.59 + )

    一 第一部分讲解 mkdir p kaggle images from PIL import Image from pathlib import Path images list Path kaggle input stable diffu
  • android 轮播图_两步路户外助手谷歌卫星图终极解决方案

    不点蓝字 我们哪来故事 国庆节前 教大家一步步搞回了两步路 户外助手 的 谷歌卫星图 和 路网 错过的朋友可以看之前的文章 快速找回 两步路 户外助手 的谷歌卫星图 路网 但是文章发出后陆续收到一两个驴友反馈 路网是回来了 但是还是没有谷歌
  • linux ssh权限设置,linux 让ssh只允许指定的用户登录的权限设置

    方法一 只允许ssh指定用户登录权限的设置 SSH远程登录的权限直接影响服务器的安全 为ssh设置合理的用户权限是必须的 查看ssh版本的命令 ssh v 设置ssh只允许指定用户登录的方法 在 etc ssh sshd config文件中
  • 【mysql5.7开启 binlog】

    今天发现数据库连接不上了 一看服务器 家被人偷了 库还在只剩下一个表README 以下数据库已被删除 xxx xxx 我们有完整的备份 要恢复它 您必须向我们的比特币地址xxxx支付0 028比特币 BTC 如果您需要证明 请通过以下电子邮
  • grafana设置Alert阈值和邮件报警

    首先我们需要在机器上开启smtp 25服务 这里有一个坑 注意 云主机为了防止滥发邮件已经封掉了smtp的所有通信 所以云主机发邮件是有问题的 安装sendmail ubuntu用apt centos用yum 安装好后一般自动就跑起来了 n
  • 单例模式由浅入深(C# 版)

    单例模式由浅入深 C 版 有时候 我们希望某类只有一个实例 这样的好处是 1 可以实现数据共享 2 避免大量的创建销毁实例的操作 提高性能 为了实现单例模式 通常做法是 1 将构造函数私有化 避免外部直接new对象 2 对外提供一个方法来返
  • docker基础

    docker背景 以linux而言 linux操作系统会有一个主进程pid 1派生出其他进程来控制不同服务例如 pid 2 gt python pid 3 gt java pid4 gt php 三个服务可能会相互影响 使用者期望将这三个不
  • npm wepack-cli --save-dev nodejs -4048 operation not permitted

    其实就是权限不够 方法一在该目录管理员打开终端运行该命令即可 方法二 修改nodejs的权限找到nodejs的目录 之后右键属性 修改完成之后执行npm webpack cli save dev如果还是出现 4048的错误 重启电脑之后即可
  • mavenCentral()、jcenter()、google()仓库

    buildscript里是gradle脚本执行所需依赖 分别是对应的maven库和插件 buildscript repositories google jcenter maven url http maven aliyun com nexu
  • 2020-12-21

    转载一个SpringDataJpa JPA ORM框架的比较文章吧 供自己学习 三者区别 1 JPA是由sun定义的一个ORM规范 提供以下 2 SpringDataJpa是由Spring提供的一套简化JPA开发的框架 Criteria A
  • Hp服务器机箱风扇维修,HP服务器机箱改装(3)

    前几天一直学车 每天都要早上6点半爬起来去学车 所以改装进度有点慢 这两天休息 所以突击了一下 其实进度也不是很快 主要是下刀之前要多想 而且改的时候 要慢工出细活 所以进度不是很大 呵呵 放图 为了前面能装下那个360冷排 所以要把机箱正
  • 部署Swarm - Deploy Swarm

    参考文档 https docs docker com swarm install manual 使用的部署环境 参考文档中是要把Swarm部署到AWS的EC2上的 没有这样的条件 所以选择在本地建立多个虚机机来搭建 操作系统选择centos