idetcd

ソース ホーム

次のコマンドで有効にします
idetcd:github.com/jiachengxu/idetcd

idetcd - ドメイン名の衝突なしでクラスタ内のノードを識別するために使用される etcd ベースの CoreDNS プラグインです。

説明

idetcd は、ドメイン名の衝突なしでクラスタ内のノードを識別するために使用されます。基本的なアイデアは非常にシンプルです。クラスタを開始するときにすべてのノードで CoreDNS サーバーを設定し、ノードは etcd の空きドメイン名を取得して自己公開します。

構文

idetcd {
	endpoint ENDPOINT...
	limit LIMIT
	pattern PATTERN
}
  • エンドポイントは etcd エンドポイントを定義します。既定値は「https://#:2379」です。
  • 制限はクラスタ内のノード番号の最大制限を定義します。クラスタ内のノード番号がこの制限に達した後にノードが自己公開しようとした場合は、失敗します。
  • パターンは、クラスタ内のすべてのノードが従うドメイン名パターンを定義します。ここではパターンに Go テンプレートを使用します。

次の例では、5 つのノードを含むクラスタを起動します。すべてのノードで、このプロジェクトを次のように取得できます。

$ go get -u github.com/jiachengxu/idetcd

次のステップに進む前に、既に etcd インスタンスを設定済みであることを確認し、エンドポイントを書き留めておいてください。

次に、CoreDNS サーバーの設定を指定する Corefile を main.go と同じディレクトリに追加する必要があります。簡単な Corefile の例を以下に示します。詳細については、CoreDNS GitHub リポジトリ にアクセスしてください。

. {
    idetcd {
        endpoint ETCDENDPOINTS
        limit 5
        pattern worker{{.ID}}.tf.local.
    }
}

その後、次のコマンドでバイナリ ファイルを生成できます。

$ go build -v -o coredns

代わりに、Docker がインストールされている場合は、次のコマンドを実行してビルドすることもできます。

$ docker run --rm -i -t -v $PWD:/go/src/github.com/jiachengxu/idetcd \
      -w /go/src/github.com/jiachengxu/idetcd golang:1.10 go build -v -o coredns

次に、次のコマンドで実行します。

$ ./coredns

その後、クラスタ内のすべてのノードが etcd 内の空きスロットを見つけて自己公開しようとします。成功すると、同じクラスタ内のすべてのノードで、すべてのノードのドメイン名を次のコマンドで取得できます。

$ dig +short worker4.tf.local @localhost

IPv6 もサポートされています。

$ dig +short worker4.tf.local AAAA @localhost

AWS との統合

CoreDNS を idetcd プラグインと組み合わせて使用してクラスタを構成することは、一般的な構成プロセスとは異なる 1 回限のプロセスです。たとえば、AWS 上の複数のインスタンスを含むクラスタを設定する場合は、すべてのインスタンスに同じ構成を使用し、init プロセスですべてのインスタンスを自己公開できます。これは、cloud-initユーザーデータで使用することで実現できます。AWS インスタンスが起動時に実行する bash スクリプトの例を次に示します。

#!/bin/bash
set -x
## Install docker.
yum install -y docker
echo
chkconfig docker on
service docker start
echo
## Install git.
yum install -y git
git clone https://github.com/jiachengxu/idetcd.git /home/ec2-user/idetcd
cd /home/ec2-user/idetcd
## Using docker to build the binary file of CoreDns with idetcd plugin specified.
docker run --rm -v $PWD:/go/src/github.com/jiachengxu/idetcd -w /go/src/github.com/jiachengxu/idetcd golang:1.10 go build -v -o coredns
## Create a Corefile for specifying the configuration of CoreDNS.(Don't forget to replace the ETCDENDPOINTS and NUMBER with your own etcd endpoints and limit of node in the cluster!)
cat > Corefile << EOF
. {
    idetcd {
        endpoint ETCDENDPOINTS
        limit NUMBER
        pattern worker{{.ID}}.tf.local.
    }
}
EOF
./coredns