Swarm 系列 5-- 手动配置 Swarm

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

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

    494 引用 • 928 回帖
  • swarm
    4 引用 • 2 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • 叶归
    5 引用 • 16 回帖 • 9 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖 • 2 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 99 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24799 引用 • 101981 回帖 • 1 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 2 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 570 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    87 引用 • 122 回帖 • 622 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9405 引用 • 42849 回帖 • 110 关注
  • Word
    13 引用 • 40 回帖
  • Docker

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

    494 引用 • 928 回帖
  • 反馈

    Communication channel for makers and users.

    126 引用 • 929 回帖 • 267 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    226 引用 • 476 回帖 • 1 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 1 关注
  • gRpc
    11 引用 • 9 回帖 • 90 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    172 引用 • 516 回帖
  • OnlyOffice
    4 引用 • 24 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 2 关注
  • Caddy

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

    12 引用 • 54 回帖 • 165 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 901 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 29 关注