docker深入2-基于 swarm mode 的服务发现和注册
2017-09-04 12:22
751 查看
docker深入2-基于 swarm mode 的服务发现和注册
2017/10/20
注:【未完待续】标签,表明现在没空继续研究,后续再补上,现在先分享出来,或许有朋友正需要思路和帮助。
2017/10/20
注:【未完待续】标签,表明现在没空继续研究,后续再补上,现在先分享出来,或许有朋友正需要思路和帮助。
一、前言 1、目的 1)研究基于 swarm mode 的服务发现和注册 2)熟悉使用 go 和 python 来写 agent 调用 docker api/sdk 来达到上述目的。 3)docker api/sdk 参考 * docker api and sdk exp * api ref: https://docs.docker.com/engine/api/v1.30/ * sdk go: https://godoc.org/github.com/moby/moby/client * [howto] * # curl -s --unix-socket /var/run/docker.sock http:/v1.30/nodes |jq . |more * # curl -s --unix-socket /var/run/docker.sock http:/v1.30/services |jq . |more * # curl -s --unix-socket /var/run/docker.sock http:/v1.30/tasks |jq . |more 4)示例参考 https://github.com/opera443399/ops/blob/master/doc/Go/src/abc.com/demo/demoDockerAPI/app.go https://github.com/sergkh/docker-etcd-registrator/blob/master/register.py 2、数据流 docker service -> swarm mode manager -> my_test_etcd_registrator -> net_etcd -> LB+confd 3、示例 sergkh 的解决方案 4、参考示例后,自己的解决方案 二、示例 sergkh 的解决方案 1、创建独立的网络 docker network create --driver overlay net_etcd 注1:使用默认的 overlay 网络时,通过服务名无法互相ping通 注2:但通过 docker stack 来创建 compose 时,默认会为 service 创建一个独立的 overlay 网络,因而可以使用服务名 2、启动一个 etcd 服务 docker service create --name my_test_etcd \ --network net_etcd \ --publish 2379:2379 \ --publish 2380:2380 \ --detach=true \ --constraint 'node.role == manager' \ quay.io/coreos/etcd:latest etcd \ --advertise-client-urls http://my_test_etcd:2379 \ --listen-client-urls http://0.0.0.0:2379 3、测试 etcd 服务是否工作 curl 127.0.0.1:2379/v2/keys/ curl -X PUT 127.0.0.1:2379/v2/keys/services -d key1='value1' curl 127.0.0.1:2379/v2/keys/services 4、服务注册 docker service create --name my_test_etcd_registrator \ --network net_etcd \ --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ --env ETCD_HOST="my_test_etcd" \ --env ETCD_PORT="2379" \ --env BASE_DIR="/service" \ --env UPDATE_INTERVAL="30" \ --env RUN_ONCE="False" \ --detach=true \ --constraint 'node.role == manager' \ sergkh/docker-etcd-registrator 5、服务发现 (未完待续,后续有空实现后再更新) 6、问题 1)sergkh 的 docker-etcd-registrator 服务中 python 脚本提取的内容可能不符合我的需求,后续将 fork 后改成自己需要的版本。 https://github.com/sergkh/docker-etcd-registrator/blob/c294b60cfb49a5213d9942b2ef4f99827435c182/register.py#L30 descr['address'] = '{0}:{1}'.format(service.name, ports[0]['TargetPort']) 这里使用的是 TargetPort 而我需要的是 PublishedPort 三、参考示例后,自己的解决方案 (有时间实现后再补充) 1、TODO 实现一个服务注册的 agent 实现一个服务发现的 agent ZYXW、参考 1、https://github.com/sergkh https://github.com/sergkh/docker-etcd-registrator https://hub.docker.com/r/sergkh/nginx-autoproxy/ 2、docker api https://docs.docker.com/engine/api/v1.3 3、docker sdk go https://godoc.org/github.com/moby/moby/client[/code]
相关文章推荐
- 基于etcd+confd通过nginx对docker服务混合注册发现详解 推荐
- docker基于consule和registrator实现服务的发现和注册
- .net core微服务之基于Docker+Consul+Registrator服务注册服务发现
- Docker集群实验环境布署--swarm【3 注册服务监控与自动发现组件--consul】
- 深入理解Docker(镜像、容器、服务、swarm、stack)
- SpringCloud(第 053 篇)CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目
- Docker自发现注册服务基础(一) -- etcd
- Docker Swarm几种发现服务比较
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
- Swarm创建docker集群:服务发现-配置文件法
- 基于Zookeeper的服务注册与发现
- 基于docker部署的微服务架构(一):服务注册中心
- 基于Zookeeper的服务注册与发现
- Swarm创建docker集群:服务发现-etcd
- 关于Docker的服务发现与注册
- 搭建Docker Swarm集群实战(二)(服务发现使用consul)
- docker深入2-使用registrator和consul-template自动注册和变更服务
- 基于Zookeeper的服务注册与发现
- SpringCloud(第 053 篇)CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目
- SpringCloud(第 053 篇)CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目