Registrator
Registrator 通过检查容器在线或停止,来自动为任何 Docker 容器注册和注销服务
Github 地址: https://github.com/gliderlabs/registrator
熟悉下 Registrator 有助于理解 Kubernets 的服务发现机制
SkyDNS
SkyDNS 是一个域名解析服务器。使用 Etcd 作为后端存储
安装、部署可以参考本人博客: 《SkyDNS 编译、部署、使用(备忘)》
本文中启动 SkyDNS 使用的命令为:
sudo nohup ./skydns -machines=http://127.0.0.1:2379 -etcd3=false -addr=0.0.0.0:53 -nameservers=8.8.8.8:53,8.8.4.4:53 -domain="project_x." > ./skydns.log 2>&1 &
安装 Registrator
运行类似以下命令:
#!/bin/bash
docker rm -f registrator
docker run -d --restart=unless-stopped \
--name=registrator \
--net=host \
--volume=/var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
-ip $(hostname) \
skydns2://vm-ubuntu20:2379/dev.project_x
解释下参数:
参数 | 说明 |
---|---|
-ip | 可以填本机IP地址之类的,最佳实践就填写本机主机名,如例子中通过hostname 命令获取 |
skydns2://vm-ubuntu20:2379/dev.project_x | vm-ubuntu20:2379 为 Etcd 地址 dev.project_x 为域名 |
自动注册服务
运行类似以下命令,来观察是否正常自动注册了 Redis 服务:
#!/bin/bash
docker rm -f redis1
docker rm -f redis2
docker run -d --restart=unless-stopped --name redis1 -e SERVICE_ID=redis1 -p 6379:6379 redis
docker run -d --restart=unless-stopped --name redis2 -e SERVICE_ID=redis2 -p 6380:6379 redis
通过 EtcdKeeper 来查看下:
用 dig 命令,做下域名解析,看是否能得到 Redis 这个服务的 ip 列表:
fananchong@vm-ubuntu20:~/registrator$ dig @localhost redis.dev.project_x. SRV
; <<>> DiG 9.16.1-Ubuntu <<>> @localhost redis.dev.project_x. SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59121
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;redis.dev.project_x. IN SRV
;; ANSWER SECTION:
redis.dev.project_x. 3600 IN SRV 10 50 6380 vm-ubuntu20.
redis.dev.project_x. 3600 IN SRV 10 50 6379 vm-ubuntu20.
;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Mar 27 03:55:48 UTC 2021
;; MSG SIZE rcvd: 99
自动解除服务
停掉 Redis 一个服务实例,来观察下,是否能正确查询 ip 列表:
fananchong@vm-ubuntu20:~/registrator$ ./test2.sh
+ date
Sat 27 Mar 2021 04:01:24 AM UTC
+ docker stop redis1
redis1
+ date
Sat 27 Mar 2021 04:01:26 AM UTC
+ dig @localhost redis.dev.project_x. SRV
; <<>> DiG 9.16.1-Ubuntu <<>> @localhost redis.dev.project_x. SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53465
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;redis.dev.project_x. IN SRV
;; ANSWER SECTION:
redis.dev.project_x. 3600 IN SRV 10 100 6380 vm-ubuntu20.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Mar 27 04:01:26 UTC 2021
;; MSG SIZE rcvd: 68
+ date
Sat 27 Mar 2021 04:01:26 AM UTC
其他
使用下 Registrator ,发现有以下几点可以改进的地方:
- 不支持 Etcd clietn v3 接口
- 是按主机为单位注册服务,而不是按集群版本为单位注册服务
- 不支持自动更新 Docker 容器的负载值
欢迎关注本博客,后续会如何扩展 Registrator ,来改进以上问题!