web-dev-qa-db-ja.com

Kubernetes用の独自のetcdクラスター

2つの場所(距離300 km)にまたがる独自のKubernetesクラスターを構築し、それをGitLabに統合したいと思います。

私の考えを挙げさせてください。私の質問は、どこかで私の考えに誤りがあり、それを解決するように頼むかどうかです。

  1. VMをセットアップすることしかできず、ホストに直接権限を持たないため、5つのVM(3 + 2)にetcd-clusterをインストールしたいと思います。 Ubuntu18.04にaptを使用してetcdをインストールします。このため、最初はKubernetesは必要ありません。

  2. 奇数のインスタンスはetcdにのみ適用され、コントロールプレーンには適用されませんか?

  3. コントロールプレーン用に個別のVMを設定することは意味がありますか、それともetcdクラスターの3 + 2 VMを再利用できますか?そうでなければ、私はすでに10個のVMを持っているでしょう。

1
uav

数千のサービスと多数のノードを持つ大きなkubernetesクラスターがない限り、別々のetcdクラスターをセットアップし、2つの場所にetcdクラスターをセットアップするかどうかを覚えておいてください。etcdはレイテンシーに非常に敏感であるため、coreosのドキュメントを確認してください。

外部etcdクラスターを使用することを選択した場合、コントロールプレーンに奇数は必要ありません。etcdマシンはクラスター内にあるため、etcdでは奇数のみが必要です。

コントロールプレーンはそれらの間で通信せず、etcdとのみ通信します

2
c4f4t0r

私はいくつかのことを学びました、そしてあなたとそれらを共有したいと思います。

etcdは「@ceedee」のように発音されます。

インストールにapt(Ubuntu18.04のetcd3.2)を使用せず、wgetで最新バージョン(3.3.18)をダウンロードすることにしました。グーグルの最初のヒットはうまくいった。

Installation

cd /opt/
Sudo wget https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux-AMD64.tar.gz
Sudo tar xvf etcd-v3.3.18-linux-AMD64.tar.gz
cd etcd-v3.3.18-linux-AMD64/
Sudo mv etcd etcdctl /usr/local/bin/
Sudo mkdir -p /var/lib/etcd/
Sudo mkdir /etc/etcd/
Sudo groupadd --system etcd
Sudo useradd -s /sbin/nologin --system -g etcd etcd
Sudo chown -R etcd:etcd /var/lib/etcd/

リセット

メンバーフォルダ内のすべてのデータを削除します。

Sudo rm /etc/etcd/*.etcd/member/ /opt/etcd-v*-linux-AMD64/default.etcd/member/ /var/lib/etcd/member/ -fr

または、引数--initial-cluster-token XYZ(5つのメンバーごとに同じ)を変更し、パラメーター--force-new-clusteretcdを開始します。

既存のクラスターを再起動するか、メンバーを追加する場合:--initial-cluster-state newから--initial-cluster-state existingに変更します。

Etcdクラスターからすべてのデータ(値を持つキー)を削除します。

Sudo ETCDCTL_API=3 etcdctl del "" --prefix

構成

Sudo -u etcd etcd \
--name aaa \
--data-dir /var/lib/etcd/ \
--listen-peer-urls http://localhost:2380,http://localhost:7001,http://192.168.4.101:2380,http://192.168.4.101:7001 \
--listen-client-urls http://localhost:2379,http://localhost:4001,http://192.168.4.101:2379,http://192.168.4.101:4001 \
--initial-advertise-peer-urls http://192.168.4.101:2380 \
--initial-cluster aaa=http://192.168.4.101:2380,bbb=http://192.168.4.102:2380,ccc=http://192.168.4.103:2380,eee=http://192.168.4.105:2380,ddd=http://192.168.4.104:2380 \
--initial-cluster-state new \
--initial-cluster-token 2020-02-07T14:53 \
--advertise-client-urls http://192.168.4.101:2379
Sudo -u etcd etcd \
--name bbb \
--data-dir /var/lib/etcd/ \
--listen-peer-urls http://localhost:2380,http://localhost:7001,http://192.168.4.102:2380,http://192.168.4.102:7001 \
--listen-client-urls http://localhost:2379,http://localhost:4001,http://192.168.4.102:2379,http://192.168.4.102:4001 \
--initial-advertise-peer-urls http://192.168.4.102:2380 \
--initial-cluster aaa=http://192.168.4.101:2380,bbb=http://192.168.4.102:2380,ccc=http://192.168.4.103:2380,eee=http://192.168.4.105:2380,ddd=http://192.168.4.104:2380 \
--initial-cluster-state new \
--initial-cluster-token 2020-02-07T14:53 \
--advertise-client-urls http://192.168.4.102:2379
Sudo -u etcd etcd \
--name ccc \
--data-dir /var/lib/etcd/ \
--listen-peer-urls http://localhost:2380,http://localhost:7001,http://192.168.4.103:2380,http://192.168.4.103:7001 \
--listen-client-urls http://localhost:2379,http://localhost:4001,http://192.168.4.103:2379,http://192.168.4.103:4001 \
--initial-advertise-peer-urls http://192.168.4.103:2380 \
--initial-cluster aaa=http://192.168.4.101:2380,bbb=http://192.168.4.102:2380,ccc=http://192.168.4.103:2380,eee=http://192.168.4.105:2380,ddd=http://192.168.4.104:2380 \
--initial-cluster-state new \
--initial-cluster-token 2020-02-07T14:53 \
--advertise-client-urls http://192.168.4.103:2379
Sudo -u etcd etcd \
--name ddd \
--data-dir /var/lib/etcd/ \
--listen-peer-urls http://localhost:2380,http://localhost:7001,http://192.168.4.104:2380,http://192.168.4.104:7001 \
--listen-client-urls http://localhost:2379,http://localhost:4001,http://192.168.4.104:2379,http://192.168.4.104:4001 \
--initial-advertise-peer-urls http://192.168.4.104:2380 \
--initial-cluster aaa=http://192.168.4.101:2380,bbb=http://192.168.4.102:2380,ccc=http://192.168.4.103:2380,eee=http://192.168.4.105:2380,ddd=http://192.168.4.104:2380 \
--initial-cluster-state new \
--initial-cluster-token 2020-02-07T14:53 \
--advertise-client-urls http://192.168.4.104:2379
Sudo -u etcd etcd \
--name eee \
--data-dir /var/lib/etcd/ \
--listen-peer-urls http://localhost:2380,http://localhost:7001,http://192.168.4.105:2380,http://192.168.4.105:7001 \
--listen-client-urls http://localhost:2379,http://localhost:4001,http://192.168.4.105:2379,http://192.168.4.105:4001 \
--initial-advertise-peer-urls http://192.168.4.105:2380 \
--initial-cluster aaa=http://192.168.4.101:2380,bbb=http://192.168.4.102:2380,ccc=http://192.168.4.103:2380,eee=http://192.168.4.105:2380,ddd=http://192.168.4.104:2380 \
--initial-cluster-state new \
--initial-cluster-token 2020-02-07T14:53 \
--advertise-client-urls http://192.168.4.105:2379

これをサービスに入れることができます:

/etc/systemd/system/etcd.service(存在しない場合は作成)(最初のメンバーaaaの例)

[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target

[Service]
User=etcd
Type=notify
Environment=ETCD_DATA_DIR=/var/lib/etcd
Environment=ETCD_NAME=%m
ExecStart=/usr/local/bin/etcd \
--name aaa \
--data-dir /var/lib/etcd/ \
--listen-peer-urls http://localhost:2380,http://localhost:7001,http://192.168.4.101:2380,http://192.168.4.101:7001 \
--listen-client-urls http://localhost:2379,http://localhost:4001,http://192.168.4.101:2379,http://192.168.4.101:4001 \
--initial-advertise-peer-urls http://192.168.4.101:2380 \
--initial-cluster aaa=http://192.168.4.101:2380,bbb=http://192.168.4.102:2380,ccc=http://192.168.4.103:2380,eee=http://192.168.4.105:2380,ddd=http://192.168.4.104:2380 \
--initial-cluster-state new \
--initial-cluster-token 2020-02-07T14:53 \
--advertise-client-urls http://192.168.4.101:2379
Restart=always
RestartSec=10s
LimitNOFILE=40000
Sudo systemctl daemon-reload
# Sudo systemctl enable etcd  # for auto start after reboot
Sudo systemctl restart etcd

誰かが暗号化、つまりクライアント証明書を使って例を示すことができれば、私は感謝します。

クロニー

5台のマシンすべてが同じ時間を持っていることも重要です。そうしないと、ログに多くのエラーが表示されます。このために、私はchronyを使用しました。

Sudo timedatectl set-timezone Europe/Berlin
Sudo timedatectl set-local-rtc 1 --adjust-system-clock
Sudo timedatectl set-local-rtc 0
Sudo systemctl stop systemd-timesyncd.service && Sudo systemctl disable systemd-timesyncd.service
Sudo apt update && Sudo apt --yes install chrony

/etc/chrony/chrony.conf

# I use HTTP connect proxy and can't connect to external ntp servers:
local
bindcmdaddress 0.0.0.0
allow 192.168.0.0/16
cmdallow 192.168.0.0/16
# server 192.168.4.101 prefer iburst  # himself
server 192.168.4.102 prefer iburst
server 192.168.4.103 prefer iburst
server 192.168.4.104  prefer iburst
server 192.168.4.105  prefer iburst
# ...
makestep 1 -1
# Show time etc.:
Sudo timedatectl
# Show ntp network members:
Sudo chronyc sources

ワーカーノードにも同時に供給することを忘れないでください。

チェック

Sudo etcdctl cluster-health

member eee6e5e8935fd1c9 is healthy: got healthy result from http://192.168.4.105:2379
member bbb7b0aca4c13cdc is healthy: got healthy result from http://192.168.4.102:2379
member aaac5ad73f7d224f is healthy: got healthy result from http://192.168.4.101:2379
member ccc20379b7c3a64e is healthy: got healthy result from http://192.168.4.103:2379
member ddd76f34bf32390e is healthy: got healthy result from http://192.168.4.104:2379
cluster is healthy

Sudo etcdctl member list

eee6e5e8935fd1c9: name=eee peerURLs=http://192.168.4.105:2380 clientURLs=http://192.168.4.105:2379 isLeader=false
bbb7b0aca4c13cdc: name=bbb peerURLs=http://192.168.4.102:2380 clientURLs=http://192.168.4.102:2379 isLeader=false
aaac5ad73f7d224f: name=aaa peerURLs=http://192.168.4.101:2380 clientURLs=http://192.168.4.101:2379 isLeader=true
ccc20379b7c3a64e: name=ccc peerURLs=http://192.168.4.103:2380 clientURLs=http://192.168.4.103:2379 isLeader=false
ddd76f34bf32390e: name=ddd peerURLs=http://192.168.4.104:2380 clientURLs=http://192.168.4.104:2379 isLeader=false

0
uav