1. 程式人生 > >etcd+registrator+confd 服務發現

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

再執行 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 = "myconfig.toml.tmpl"
dest = "/tmp/myconfig.toml"
keys = [
    "/registrator",
]

/etc/confd/templates/myconfig.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
[[email protected] confd]$ cat /tmp/myconfig.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].