私は何を変更し、プロファイルが最後に変更されたものを時間を知りませんか?しかし、また、プロファイルを変更したり、手動でトリガプロジェクトがサービスを再起動再発行するには?理由は、間違った設定ファイルの行、通常の展開に影響を与えることが見いだされませんでしたか?あなたは、これらの問題のために悩まされているかどうか?50+オンラインプロジェクト、数百人+設定ファイル、我々は多くの場合、これらの設定ファイルがない愛を乱用し、それが変更を行うための時間です!この記事では、コーヒーや簡単な操作とメンテナンスを飲んで、これらの問題を解決するために行くことができます
Configuration Centerの選択
選択原則:シンプルで、落ちやすい、プラットフォームを選択していない言語を選択していない、できるだけ依存しています。
Disconf、アポロおよびその他のプログラム、最終的な選択Etcd + Confdプログラムを比較すると、上側とEtcdの原則に沿ったもので、私たちは何百回も、Kubernetesの展開で使用しなければなりませんでした。
チャートの設定センター
- ETCDの更新データをフェッチするために、クライアントなどの店舗データEtcd、Confdに使用されるサーバとして、C / Sを使用してセンターの統合コンフィギュレーションモード
- WebUIのを書いた管理を容易にするために、EtcdのWebUIのサービスは、主にEtcdサービス、データへのアクセスと対話するために実際にあるEtcd
- Confdは、最終を生成するために、構成ファイルに応じて設定されたクラスタ、パディングデータとテンプレートファイルの形式をEtcdするプロファイルデータに基づいて位置を固定プル
- プロファイル生成を配合することができる後
check_cmd
およびreload_cmd
コマンドは、構成ファイルをチェックし、リロード
Configuration Centerの展開
Etcdクラスタ
- システム環境
- システム:Debianの8
- Etcd:v3.3.9
- サーバーアドレス
- 192.168.107.101
- 192.168.107.102
- 192.168.107.103
すべてのサーバーは、ディレクトリを作成し、etcdをインストールするには、次のコマンドを実行する必要があります
1.インストールパッケージをダウンロードし、解凍etcd
# wget https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
# tar -zxvf etcd-v3.3.9-linux-amd64.tar.gz
2.コピーの実装を容易にするためには/ usr / binディレクトリにプログラムは、書き込み行きetcd、直接実行、二つの文書があるetcdとectdctl、
# mv etcd-v3.3.9-linux-amd64/etcd* /usr/bin/
3. etcdプロファイルディレクトリを作成/etc/etcd
し、データ格納ディレクトリを/home/data/etcd
# mkdir /etc/etcd /home/data/etcd
次のようにノードの3つのノードetcdプロファイルがあります
ノード1を設定
# cat /etc/etcd/etcd.conf
name: 'node1'
data-dir: /home/data/etcd
listen-peer-urls: http://192.168.107.101:2380
listen-client-urls: http://192.168.107.101:2379,http://127.0.0.1:2379
initial-cluster-state: 'new'
initial-cluster-token: 'etcd-cluster-conf'
advertise-client-urls: http://192.168.107.101:2379
initial-advertise-peer-urls: http://192.168.107.101:2380
initial-cluster: node1=http://192.168.107.101:2380,node2=http://192.168.107.102:2380,node3=http://192.168.107.103:2380
ノード2の設定
# cat /etc/etcd/etcd.conf
name: 'node2'
data-dir: /home/data/etcd
listen-peer-urls: http://192.168.107.102:2380
listen-client-urls: http://192.168.107.102:2379,http://127.0.0.1:2379
initial-cluster-state: 'new'
initial-cluster-token: 'etcd-cluster-conf'
advertise-client-urls: http://192.168.107.102:2379
initial-advertise-peer-urls: http://192.168.107.102:2380
initial-cluster: node1=http://192.168.107.101:2380,node2=http://192.168.107.102:2380,node3=http://192.168.107.103:2380
ノード3の設定
# cat /etc/etcd/etcd.conf
name: 'node3'
data-dir: /home/data/etcd
listen-peer-urls: http://192.168.107.103:2380
listen-client-urls: http://192.168.107.103:2379,http://127.0.0.1:2379
initial-cluster-state: 'new'
initial-cluster-token: 'etcd-cluster-conf'
advertise-client-urls: http://192.168.107.103:2379
initial-advertise-peer-urls: http://192.168.107.103:2380
initial-cluster: node1=http://192.168.107.101:2380,node2=http://192.168.107.102:2380,node3=http://192.168.107.103:2380
各ノードの構成後に起動されています
バックグラウンドで実行する必要があり、それを使用することをお勧めしますscreen
ツールを
# /usr/bin/etcd --config-file /etc/etcd/etcd.conf
完了したすべての3つのノードを開始した後、することができetcdctl member list
、クラスタコマンドの一覧を表示し、クラスタの状態を確認しました
# etcdctl member list
732ca490026f580d: name=node3 peerURLs=http://192.168.107.103:2380 clientURLs=http://192.168.107.103:2379 isLeader=false
bc16d35c3ad1c5ee: name=node2 peerURLs=http://192.168.107.102:2380 clientURLs=http://192.168.107.102:2379 isLeader=true
f7a043d3b65cd4a4: name=node1 peerURLs=http://192.168.107.101:2380 clientURLs=http://192.168.107.101:2379 isLeader=false
Confd
1.ダウンロードconfdと置く/usr/bin/
使いやすいディレクトリを
# wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64
# mv confd-0.16.0-linux-amd64 /usr/bin/confd
# chmod +x /usr/bin/confd
2.新しいプロファイルディレクトリのconfdを作成します。
# mkdir /etc/confd/{conf.d,templates}
新しいリソース・ファイルを作成する3. .toml
ファイルの最後には、固定形式となっています
# cat /etc/confd/conf.d/nginx.conf.toml
[template]
src = "nginx.conf.tmpl"
dest = "/tmp/nginx.conf"
keys = [
"/conf/project/env/nginx/nginx.conf",
]
check_cmd = "/usr/sbin/nginx -t -c {{.src}}"
reload_cmd = "/usr/sbin/service nginx reload"
ここでは、パラメータの新しいリソースファイルnginxの設定を持っています:
- SRC:nginxの設定ファイルであるテンプレートファイル、テンプレートTMPLの場所の場所を指定します。
- destが:/ tmpのに/下を指定するために、ここで私たちをテストするために、最終的に生成または更新された設定ファイルへの絶対パスを指定します。
- キー:キーを使用するには、内部のテンプレートファイルは、対応するプロジェクトプロファイル内のキーetcdです
- check_cmd:Checkコマンドは、コンフィギュレーション・ファイルを更新した後に実行されるが、ここでチェックnginxの設定ファイルで、我々は、構文エラーがあるかどうか、完全です
reload_cmd:ここにあなたがチェックした後、構成によってコマンドを実行することができ、検査がステップ上問題ありません、それは設定ファイルを再読み込みするreloadコマンドを実行します
- 接頭辞:例えば、/ confので当社の主要初めに基づいており、プレフィックスキーを設定し、設定を追加することができ
prefix="/conf"
、それが省略され、/ confにアップで下キーですることができます - 所有者:ユーザープロファイルを生成するように構成されました
MODE:アクセス許可を構成しますが、プロファイルを作成します
4.新しいテンプレートファイルを作成します。
# cat /etc/confd/templates/nginx.conf.tmpl
{{getv "/conf/project/env/nginx/nginx.conf"}}
- confdテンプレート構文があり、多くの、特に公式サイトをチェックし、ここではそれらを繰り返しません
- 値が内部etcd存在として私たちは、コンフィギュレーション・ファイルの内容全体なので、そこはそれに先のファイルに埋め込まれている値の値を取得するだけgetv命令を必要とします
FBIテスト
まあetcdクラスタの展開とconfdサービスは、その後、我々は、彼らが通常に動作できるかどうかをテストします
1.サーバーのKV値を作成しますEtcd
# etcdctl set /conf/project/env/nginx/nginx.conf 'user www-data;
> worker_processes 4;
>
> pid /var/run/nginx.pid;
> error_log /home/logs/nginx/error.log warn;
>
> events {
> use epoll;
> worker_connections 51200;
> }
>
> http {
> default_type application/octet-stream;
>
> server {
> listen 80;
> server_name domain.com;
>
> root /home/project/webroot;
> index index.shtml index.html;
> }
> }'
# 查看设置key的内容
# etcdctl get /conf/project/env/nginx/nginx.conf
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
error_log /home/logs/nginx/error.log warn;
events {
use epoll;
worker_connections 51200;
}
http {
default_type application/octet-stream;
server {
listen 80;
server_name domain.com;
root /home/project/webroot;
index index.shtml index.html;
}
}
- Etcd API v2およびサブバージョンv3では、二つのバージョンに大きな差、v3の多くを最適化し、私たちは、バージョンV2を使用している互換性の問題を考慮
- デフォルトでは、環境変数をすることができ、v2リリースである
export ETCDCTL_API=3
ことにより、V2、V3のバージョンに切り替えることetcdctl -v
により、APIバージョンv3のを見ることができetcdctl version
、APIのバージョンを表示します
2. [スタート] confd
# confd -watch -backend etcd -node=http://192.168.107.101:2379 -node=http://192.168.107.102:2379 -node=http://192.168.107.103:2379
2018-08-23T13:46:13+08:00 onlinegame.i.nease.net confd[17084]: INFO Backend set to etcd
2018-08-23T13:46:13+08:00 onlinegame.i.nease.net confd[17084]: INFO Starting confd
2018-08-23T13:46:13+08:00 onlinegame.i.nease.net confd[17084]: INFO Backend source(s) set to http://192.168.107.101:2379, http://192.168.107.102:2379, http://192.168.107.103:2379
2018-08-23T13:46:13+08:00 onlinegame.i.nease.net confd[17084]: INFO Target config /tmp/nginx.conf out of sync
2018-08-23T13:46:13+08:00 onlinegame.i.nease.net confd[17084]: INFO Target config /tmp/nginx.conf has been updated
設定パラメータ説明
- -watch:オープンウォッチモード、ファイルの変更を監視etcd流通センター、一度変更は更新が今ここに存在し、このオプションは、クライアントが設定・センターを更新しません変更されません。
- -backend:バックエンドのタイプは、多くの種類が、飼育係、領事、ボールト、etcd現在サポートしているのRedis、ファイル、牧場主など、いくつかのバックエンド障壁の種類ごとに個別に設定可能があるconfd、コンクリートができる
confd --help
コマンドを表示します -node:etcdノードアドレス、複数のノードは、その後、私たちはここに3ノードクラスタをetcd三回はとても「-node」を書き、とても良い、より-nodeを書きます
- -onetime:の頂上置き換えるために使用することができる
-watch
パラメータを使用すると、このパラメータを使用することができ、あなたがリアルタイムで更新された設定ファイルを使用しない場合は、終了して一度作動し、一回だけ更新したかっ示し -interval:の上置き換えるために使用することができ
-watch
、このパラメータによって制御することができ、あなたは圧力etcdサーバーを減らしたい、だけでなく、クライアントの設定ファイルが必要な場合は、自動的に更新することができ、バックエンドのデータを取るためにすべての何秒を示すパラメータを
3.あなたは正しく内容を決定/tmp/nginx.confために上部のログを経て文書が適切に同期され、更新されている/tmp/nginx.conf見ることができます
WebUIのケリガン
あなたはすべての設定ファイルは、右、コマンドラインで更新されないのですか?管理を容易にするために、私は(本当に3日)3日間を過ごしケリガンという名前のWebUIを、書いた、ディレクトリツリーを有効にする、オンライン・コンフィギュレーションを表示し、設定を変更し、構成の更新履歴やその他の便利な機能をレビュー
設定ページでは、このページには、情報を接続して構成することができetcd
アイテムのリストの最初に、左側(アイテム情報同期CMDB)
プロジェクトのリストをクリックし、該当する規則に従ってツリーが提示しetcd内のディレクトリ構造を外出
現在のコンフィギュレーション・ファイルの内容が表示されます右側のプロフィールをクリックしてください
コンフィギュレーション、同じ新しいページを編集するために、「編集」ボタンをクリックしますが、編集は、パスを変更することが許可されていません
「履歴」ボタンをクリックして、歴史のプロフィールページに行き、このページには、すべての変更ヒストリー構成ファイルを示し
最後に書かれました
- これは醜いインタフェースバースト言うことではありません!私は男を持っているまさか、フロントラインテストの後端プラスは、何のセル設計を行いませんので、見て、ない最も重要な機能に簡単にそれを使用します
- なぜないのK8Sをconfigmap?私たちは、もともとも有効にするには、コンテナを再起動する必要があり、そうのない使用がないのconfigmap流通センターK8Sでやってみたかったが、すべてのプロジェクトがでK8Sで実行されていないとconfigmapを変更します
- etcd誰もが安全ではない、ああを感じて、それを修正することができますか?実際には、我々は、アカウントのパスワード認証を使用して、そして唯一の内部ネットワーク、リミットIPされ、セキュリティは、あなたが知っている、別の解決策は、SSLを行くetcdですが、証明書を入れてクライアント側では、この記事の詳細をあまりにも多くの問題を使用していません記録etcdユーザ認証方式:Etcdの基本認証認証セキュリティ設定
- クライアント側の設定ファイルの更新を確認するために、どのように成功したのですか?あなたは一度だけ活性化されている場合は、コマンドを有効にするかどうかを判断することができますが、時計モードまたはインターバルであればそう、startコマンドの後に正常に実行されました。。唯一の人間の肉は、それをチェックし、私は良い方法はありません
あなたは記事の助けにあなたを思うなら、もっとたくさんの友達が見れるように共有して転送してください。あなたは読書が楽しくないと感じる場合は、以下の記事を読むことをお勧めします。