金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
etcd+registrator+confd 服务发现

(金庆的专栏 2018.6)

因为k8s使用 etcd, 所以选 etcd 作为服务发现的 DB.

registrator 可以为 docker 方式运行的服务自动注册到 etcd.

confd 读取 etcd, 生成配置文件。

先运行一个etcd用于测试:

docker run -d \
  -p 12379:2379 \
  --name jinqing-etcd \
  quay.io/coreos/etcd \
   /usr/local/bin/etcd \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://0.0.0.0:12379

再运行 registrator:

docker run -d --rm \
    --name=jinqing-registrator \
    --net=host \
    --volume=/var/run/docker.sock:/tmp/docker.sock \
    gliderlabs/registrator:latest \
      -ip="192.168.93.183" \
      etcd://127.0.0.1:12379/registrator

好像只能使用本机的 etcd. 一般需要用-ip参数指定本机IP。注册到 registrator 目录。

用 etcdkeeper 可以查看自动注册的服务。registrator 不支持 etcd v3.

然后配置 confd

mkdir -p /etc/confd/{conf.d,templates}

/etc/confd/conf.d/myconfig.toml

[template]
src = "services.toml.tmpl"
dest = "/tmp/services.toml"
keys = [
    "/registrator",
]

/etc/confd/templates/services.toml.tmpl

[config]
{{- range lsdir "/registrator"}}
{{-     $serviceName := . }}
{{-     $serviceDir := printf "/registrator/%s/*" $serviceName }}

    [config.{{ $serviceName }}]
    # {{ $serviceDir }}

{{-     range gets $serviceDir }}
    {{ base .Key }} = {{ .Value }}
{{-     end }}

{{- end}}

# End of [config].

用 lsdir 列出所有服务目录,然后用 gets 取服务目录下的键值对。

执行 confd:

~/go/bin/confd -onetime -backend etcd -node http://127.0.0.1:12379

[jinqing@localhost confd]$ cat /tmp/services.toml
[config]

    [config.etcd-2379]
    # /registrator/etcd-2379/*
    localhost.tech:jinqing-etcd:2379 = 192.168.93.183:12379

    [config.nginx]
    # /registrator/nginx/*
    localhost.tech:jinqing-nginx:80 = 192.168.93.183:1024

    [config.registry]
    # /registrator/registry/*
    localhost.tech:registry:5000 = 192.168.93.183:5000

# End of [config].
posted on 2018-06-13 14:27 金庆 阅读(1059) 评论(0)  编辑 收藏 引用 所属分类: 4. Linux/Unix

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理