使用registrator工具自动将CoreOS上的Docker容器服务信息注册到SkyDNS2上
简述
使用名为 registrator 的服务来检测、注册和删除专用容器。这些容器运行在 CoreOS 上,并且是一些将端口暴露给外部的 Docker 服务(如 rails、redis 和 elasticsearch)。该服务会自动将这些服务注册到 skydns2 上。
关于注册伦理的基本原则
- CoreOS 上の Docker コンテナのサービス情報を registrator を使って etcd へ自動登録する
关于SkyDNS的基本知识
- CoreOS クラスタ上で SkyDNS2 を使ってサービスディスカバリする
请查阅
将 Docker 服务自动注册到 SkyDNS2 中的注册服务器。
启动 skydns2 容器
# on CoreOS machine
# SkyDNS2 の Docker イメージ作成
core@core-01 ~ $ git clone https://github.com/skynetservices/skydns.git
core@core-01 ~ $ cd skydns
core@core-01 ~ $ docker build -t skydns2 .
# SkyDNS のデフォルト設定を etcd にセット
core@core-01 ~ $ curl -L -XPUT http://172.17.8.101:4001/v2/keys/skydns/config -d value='{"nameservers": ["8.8.8.8:53","8.8.4.4:53"]}'
# SkyDNS2 コンテナ起動
# SkyDNS2 の UDP 53 ポートをホストの Private IPの 53 ポートに bind
core@core-01 ~/skydns $ docker run \
-d \
--name skydns2 \
-p 172.17.8.101:53:53/udp \
-e ETCD_MACHINES='172.17.8.101:4001,172.17.8.102:4001,172.17.8.103:4001' \
skydns2:latest \
-addr=0.0.0.0:53
使用SkyDNS2作为后端的registrator容器的启动
core@core-01 ~ $ docker run \
-d \
--name registrator \
-h $HOSTNAME \
-v /var/run/docker.sock:/tmp/docker.sock \
progrium/registrator \
-ip=172.17.8.101 skydns2://172.17.8.101:4001/skydns.local
有关注册表URL的详细信息,请参阅SkyDNS2后端- progrium / registrator自述文件。
尝试启动 Redis 容器
core@core-01 ~ $ docker run -d --name redis.1 -e SERVICE_ID=1 -p 6379:6379 redis
当启动Redis容器时,Registrator将会检测它,并向Skydns2引用的Etcd路径设置键值对。
core@core-01 ~ $ etcdctl ls --recursive /skydns/local
/skydns/local
/skydns/local/skydns
/skydns/local/skydns/redis
/skydns/local/skydns/redis/redis-1
将在CoreOS机器上使用的DNS更改为skydns2。
core@core-01 ~ $ cat /etc/resolv.conf
# This file is managed by systemd-resolved(8). Do not edit.
#
# Third party programs must not access this file directly, but
# only through the symlink at /etc/resolv.conf. To manage
# resolv.conf(5) in a different way, replace the symlink by a
# static file or a different symlink.
#nameserver 10.0.2.3
nameserver 172.17.8.101 # -> 書き換え
请注意,如果您直接进行更改,稍后可能会被还原。要永久进行更改,请使用cloud-config。
我试试看打个ping。
core@core-01 ~ $ ping 1.redis.skydns.local
PING 1.redis.skydns.local (172.17.8.101) 56(84) bytes of data.
64 bytes from 172.17.8.101: icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from 172.17.8.101: icmp_seq=2 ttl=64 time=0.021 ms
^C
--- 1.redis.skydns.local ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.021/0.024/0.027/0.003 ms
core@core-01 ~ $ ping redis.skydns.local
PING redis.skydns.local (172.17.8.101) 56(84) bytes of data.
64 bytes from 172.17.8.101: icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from 172.17.8.101: icmp_seq=2 ttl=64 time=0.042 ms
64 bytes from 172.17.8.101: icmp_seq=3 ttl=64 time=0.019 ms
^C
--- redis.skydns.local ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.019/0.029/0.042/0.010 ms
简单解释
域名
只需要一种选择,请将以下内容以中文进行释义:
根据registrator的参数,传入的skydns2://172.17.8.101:4001/skydns.local中的skydns.local部分是指具有SkyDNS权威的域名,并且被设置在etcd中如下:
/skydns/local/skydns
只需传递注册器 skydns2://172.17.8.101:4001/staging.skydns.local 并启动即可。
/skydns/local/skydns/staging/
和…一起设置。
服务名称
当使用Docker镜像作为服务名称时,可以使用redis镜像。
/skydns/local/skydns/redis
当按照此方式设置后,可以使用名为logspout的镜像。
/skydns/local/skydns/logspout
这样,就形成了一个套装。
redis.skydns.local 可用
服务编号 fú qū ID)
在容器启动时,环境变量SERVICE_ID的值将被用作服务ID。就像之前的例子一样。
core@core-01 ~ $ docker run -d --name redis.1 -e SERVICE_ID=1 -p 6379:6379 redis
当启动时,
/skydns/local/skydns/redis/1
被设置。现在,
1. redis.skydns.local 可用。
使用Cloud-Config启动SkyDNS2后端注册器。
coreos:
units:
- name: registrator.service
command: start
content: |
[Unit]
Description=Registrator
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill registrator
ExecStartPre=-/usr/bin/docker rm registrator
ExecStartPre=/usr/bin/docker pull progrium/registrator:latest
ExecStart=/usr/bin/docker run --name registrator -h %H -v /var/run/docker.sock:/tmp/docker.sock progrium/registrator:latest -ip=$private_ipv4 skydns2://$private_ipv4:4001/skydns.local
ExecStop=/usr/bin/docker stop registrator
[Install]
WantedBy=multi-user.target
请在中文中同义转述以下内容,只需提供一种选项:
参考
-
- progrium/registrator
-
- skynetservices/skydns
-
- CoreOS 上の Docker コンテナのサービス情報を registrator を使って etcd へ自動登録する
- CoreOS クラスタ上で SkyDNS2 を使ってサービスディスカバリする