etcd+registrator+confd 服務發現




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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

再運行 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

好像只能使用本機的 etcd. 一般需要用-ip參數指定本機IP。註冊到 registrator 目錄。

用 etcdkeeper 可以查看自動註冊的服務。registrator 不支持 etcd v3.

這裏寫圖片描述

然後配置 confd

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

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

[template]
src = "myconfig.toml.tmpl"
dest = "/tmp/myconfig.toml"
keys = [
    "/registrator",
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

/etc/confd/templates/myconfig.toml.tmpl

[config]
{{- range lsdir "/registrator"}}
{{-     $serviceName := . }}
{{-     $<span class="hljs-variable">serviceDir</span> := <span class="hljs-variable">printf</span> <span class="hljs-string">"/registrator/%s/*"</span> $serviceName }}

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

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

{{- end}}





# End of [config].
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

用 lsdir 列出所有服務目錄,然後用 gets 取服務目錄下的鍵值對。

執行 confd:

~/go/bin/confd -onetime -backend etcd -node http://127.0.0.1:12379
  • 1
[jinqing@localhost confd]$ cat /tmp/myconfig.toml
[config]

[config<span class="hljs-preprocessor">.etcd</span>-<span class="hljs-number">2379</span>]
<span class="hljs-preprocessor"># /registrator/etcd-2379/*</span>
localhost<span class="hljs-preprocessor">.tech</span>:jinqing-etcd:<span class="hljs-number">2379</span> = <span class="hljs-number">192.168</span><span class="hljs-number">.93</span><span class="hljs-number">.183</span>:<span class="hljs-number">12379</span>

[config<span class="hljs-preprocessor">.nginx</span>]
<span class="hljs-preprocessor"># /registrator/nginx/*</span>
localhost<span class="hljs-preprocessor">.tech</span>:jinqing-nginx:<span class="hljs-number">80</span> = <span class="hljs-number">192.168</span><span class="hljs-number">.93</span><span class="hljs-number">.183</span>:<span class="hljs-number">1024</span>

[config<span class="hljs-preprocessor">.registry</span>]
<span class="hljs-preprocessor"># /registrator/registry/*</span>
localhost<span class="hljs-preprocessor">.tech</span>:registry:<span class="hljs-number">5000</span> = <span class="hljs-number">192.168</span><span class="hljs-number">.93</span><span class="hljs-number">.183</span>:<span class="hljs-number">5000</span>

# End of [config].

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16





閱讀更多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章