使用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 を使ってサービスディスカバリする
bannerAds