先安装consul-server集群:https://www.cnblogs.com/cjsblogs/p/9146492.html
安装consul-client
下载consul:
docker pull docker.io/consul:latest
创建calico配置文件:
mkdir -p /opt/platform/consul/config/ /opt/platform/consul/data vim /opt/platform/consul/config/client.json { "datacenter": "quark-test-consul", "data_dir": "/consul/data", "server": false, "ui": false, "bind_addr": "172.16.5.45", "client_addr": "0.0.0.0", "bootstrap_expect": 0, "retry_join": ["172.16.150.25","172.16.150.26","172.16.150.27"], "retry_interval": "10s", "rejoin_after_leave": true, "skip_leave_on_interrupt": true }
这里client不需要开启UI及server,所以均为false,以及bootstrap_expect设为0不参与leader节点竞争。
启动consul-client
docker run -d \ --net=host \ --name consul \ -v /opt/platform/consul/config:/consul/config \ -v /opt/platform/consul/data:/consul/data \ consul agent
安装registrator
下载镜像
这里必须要注意:registrator的lastest版本已经2年没更新了,他的最新主板本是master,一定要注意,因为旧的版本无法发现跟自己不是同一个网络的容器
docker pull docker.io/gliderlabs/registrator:master #启动镜像 docker run -d \ --name=registrator \ --net=host \ -v /var/run/docker.sock:/tmp/docker.sock \ gliderlabs/registrator:master \ consul://127.0.0.1:8500
这里consul需要读取docker socket信息,所以需要映射docker.sock路径
a. consul的api地址最好填写和registrator在一台机器上的consul地址,因为如果你填了远端的IP,则在consul端口显示你的服务地址为远端+本地端口,这个也是consul设计问题或者说是BUG
b. 如果consul api地址填了远端的,并且注册成功,然后因为一些原因改成本地的,重新注册,就会出现一个服务重复注册的情况,造成这个情况的原因是service的key与serviceid无关,所在集群中会造成服务的重复情况(坑爹),所以切记consul地址一定要填本地,安全起见,全部写成127.0.0.1。以及在启动容器的时候添加-e SERVICE_ID参数,指定service id,然后在注册前做判断。如果出现重复情况,可以尝试清空出现数据异常的consul节点的data目录。