Swarm 系列 5-- 手动配置 Swarm

本贴最后更新于 2206 天前,其中的信息可能已经事过境迁

手动配置 swarm

  • swarm 项目参考地址:https://github.com/docker/swarm
  • 可以下载编译 swarm 来手动运行 swarm。swarm 是一个容器编排工具,go 编译出一个可执行文件,配合相应的配置即可运行。

1. 手动运行

  • 编译后手动运行,参考:Docker Swarm discovery
  • 需要自定义配置服务发现服务,代码中默认是使用 docker Hub 的开放注册服务。生产环境需要配置自己的 distributed key/value store 注册服务。
  • 所以本地采用 etcd
启动etcd
james@james-CW65:/media/james/linux/yangz/software/etcd/etcd-v3.3.0-rc.1-linux-amd64 > ./etcd --config-file etcd_default.conf
2018-03-06 11:51:20.890647 I | etcdmain: Loading server configuration from "etcd_default.conf"
2018-03-06 11:51:20.893130 I | etcdmain: etcd Version: 3.3.0-rc.1
2018-03-06 11:51:20.893167 I | etcdmain: Git SHA: d3c2acf
2018-03-06 11:51:20.893185 I | etcdmain: Go Version: go1.9.2
2018-03-06 11:51:20.893202 I | etcdmain: Go OS/Arch: linux/amd64
2018-03-06 11:51:20.893219 I | etcdmain: setting maximum number of CPUs to 4, total number of available CPUs is 4
2018-03-06 11:51:20.893242 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
2018-03-06 11:51:20.893342 N | etcdmain: the server is already initialized as member before, starting as etcd member...
2018-03-06 11:51:20.893452 I | embed: listening for peers on http://172.19.128.93:2380
2018-03-06 11:51:20.893481 I | embed: pprof is enabled under /debug/pprof
2018-03-06 11:51:20.893526 I | embed: listening for client requests on 172.19.128.93:2379

加入集群,在每个机器运行swarm agent。可以看到默认每分钟,agent去注册一次。
--advertise参数是Address of the Docker Engine joining the cluster. Swarm manager(s) MUST be able to reach the Docker Engine at this address. [$SWARM_ADVERTISE]
代码中的限制是:--advertise should be of the form ip:port or hostname:port
所以使用swarm必须通过tcp方式与docker daemon通信,不能用sock文件了。
MacBook-Air:src air$ swarm join --advertise=172.19.128.148:2375 etcd://172.19.128.93:2379
INFO[0000] Initializing discovery without TLS
INFO[0000] Registering on the discovery service every 1m0s...  addr=172.19.128.148:2375 discovery=etcd://172.19.128.93:2379
INFO[0060] Registering on the discovery service every 1m0s...  addr=172.19.128.148:2375 discovery=etcd://172.19.128.93:2379
INFO[0120] Registering on the discovery service every 1m0s...  addr=172.19.128.148:2

开启swarm管理节点:
--host, -H [--host option --host option]				ip/socket to listen on [$SWARM_HOST]

MacBook-Air:ac-agent air$ swarm manage -H tcp://172.19.128.148:2377  etcd://172.19.128.93:2379
INFO[0000] Initializing discovery without TLS
INFO[0000] Listening for HTTP                            addr=172.19.128.148:2377 proto=tcp

开始使用swarm:
可以看出在该节点上使用swarm的管理节点来获取集群信息,由于swarm是安装在一个没装docker的机器上,节点也是。所以没有获取到节点的容器任何信息。
james@james-CW65:/media/james/linux/yangz/software/etcd/etcd-v3.3.0-rc.1-linux-amd64 > docker -H tcp://172.19.128.148:2377  info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: swarm/1.2.8
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint, whitelist
Nodes: 1
 (unknown): 172.19.128.148:2375
  └ ID:
  └ Status: Pending
  └ Containers: 0
  └ Reserved CPUs: 0 / 0
  └ Reserved Memory: 0 B / 0 B
  └ Labels:
  └ Error: Cannot connect to the Docker daemon at tcp://172.19.128.148:2375. Is the docker daemon running?
  └ UpdatedAt: 2018-03-06T04:11:37Z
  └ ServerVersion:
Plugins:
 Volume:
 Network:
 Log:
Swarm:
 NodeID:
 Is Manager: false
 Node Address:
Kernel Version: 16.7.0
Operating System: darwin
Architecture: amd64
CPUs: 0
Total Memory: 0B
Name: MacBook-Air.local
Docker Root Dir:
Debug Mode (client): false
Debug Mode (server): false
Experimental: false
Live Restore Enabled: false

WARNING: No kernel memory limit support


james@james-CW65:/media/james/linux/yangz/software/etcd/etcd-v3.3.0-rc.1-linux-amd64 > ./etcdctl --endpoint http://172.19.128.93:2379 get /docker/swarm/nodes/172.19.128.148:2375
172.19.128.148:2375
  • 在另一台机器上使用 swarm
加入集群,指定注册地址和服务发现服务地址:
james@james-CW65:/media/james/linux/yangz/software/docker > ./swarm_linux join --advertise=172.19.128.93:2375 etcd://172.19.128.93:2379
INFO[0000] Initializing discovery without TLS
INFO[0000] Registering on the discovery service every 1m0s...  addr=172.19.128.93:2375 discovery=etcd://172.19.128.93:2379
会显示2个节点,但是由于docker没有开放tcp连接,没办法获取docker信息
james@james-CW65:/media/james/linux/yangz/software/etcd/etcd-v3.3.0-rc.1-linux-amd64 > docker -H tcp://172.19.128.148:2377 info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: swarm/1.2.8
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint, whitelist
Nodes: 2
 (unknown): 172.19.128.148:2375
  └ ID:
  └ Status: Pending
  └ Containers: 0
  └ Reserved CPUs: 0 / 0
  └ Reserved Memory: 0 B / 0 B
  └ Labels:
  └ Error: Cannot connect to the Docker daemon at tcp://172.19.128.148:2375. Is the docker daemon running?
  └ UpdatedAt: 2018-03-06T05:18:00Z
  └ ServerVersion:
 (unknown): 172.19.128.93:2375
  └ ID:
  └ Status: Pending
  └ Containers: 0
  └ Reserved CPUs: 0 / 0
  └ Reserved Memory: 0 B / 0 B
  └ Labels:
  └ Error: Cannot connect to the Docker daemon at tcp://172.19.128.93:2375. Is the docker daemon running?
  └ UpdatedAt: 2018-03-06T06:16:52Z
  └ ServerVersion:
Plugins:
 Volume:
 Network:
 Log:
Swarm:
 NodeID:
 Is Manager: false
 Node Address:
Kernel Version: 16.7.0
Operating System: darwin
Architecture: amd64
CPUs: 0
Total Memory: 0B
Name: MacBook-Air.local
Docker Root Dir:
Debug Mode (client): false
Debug Mode (server): false
Experimental: false
Live Restore Enabled: false

WARNING: No kernel memory limit support


MacBook-Air:src air$ swarm list  etcd://172.19.128.93:2379
INFO[0000] Initializing discovery without TLS
172.19.128.148:2375
172.19.128.93:2375
MacBook-Air:src air$
  • 注意这里 swarm 仅仅提供一个集群功能。将 docker 连成了一个整体。但是在该集群上吗并不能使用新版 docker 的命令行或 API client 来操作服务,会报错 404。
  • 不要混淆了独立 swarm 和 swarm mode 的区别。这里我们创建的是 swarm 集群,并不提供服务级别的功能。参考:使用 Docker Toolbox 创建 Swarm 集群的问题-概念混淆导致
  • 实际运行这样也是不能创建服务的。发现只有使用 docker swarm init 来从 docker Hub 上获取的 token 才能使用 swarm mode。为什么不在 docekr swarm init 的时候提供 kv 数据存储的参数,来本地注册呢。看 swarm 源代码也可以看出再创建集群的时候,使用的是默认的 docker hub 的数据库,真不知道这个为什么不让用户用自己的。
const tokenDeprecationErr = "Token based discovery is now deprecated and might be removed in the future.\nIt will be replaced by a default discovery backed by Docker Swarm Mode.\nOther mechanisms such as consul and etcd will continue to work as expected.\n"

func create(c *cli.Context) {
	if len(c.Args()) != 0 {
		log.Fatalf("the `create` command takes no arguments. See '%s create --help'.", c.App.Name)
	}
	discovery := &token.Discovery{}
	discovery.Initialize("", 0, 0, nil)
	token, err := discovery.CreateCluster()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Fprintf(os.Stderr, tokenDeprecationErr)
	fmt.Println(token)
}

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    475 引用 • 899 回帖 • 1 关注
  • swarm
    4 引用 • 2 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 582 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 100 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 489 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 1 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 19 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 429 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 2 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 1 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    185 引用 • 318 回帖 • 352 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 689 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    475 引用 • 899 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 54 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    9 引用 • 83 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    163 引用 • 1446 回帖
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 498 关注
  • 分享

    有什么新发现就分享给大家吧!

    240 引用 • 1729 回帖
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 125 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 690 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    261 引用 • 662 回帖 • 1 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 434 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    178 引用 • 120 回帖 • 4 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 9 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 674 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 16 关注