Переход с отдельной базы на кластер etcd в kubernetes

Начну с установки базы не в под, а на мастера.

для быстрой установки можно воспользоваться скриптом

script.sh

#!/bin/bash

ETCD_VERSION=${ETCD_VERSION:-v3.4.3}

curl -L https://github.com/coreos/etcd/releases/download/$ETCD_VERSION/etcd-$ETCD_VERSION-linux-amd64.tar.gz -o etcd-$ETCD_VERSION-linux-amd64.tar.gz

tar xzvf etcd-$ETCD_VERSION-linux-amd64.tar.gz
rm etcd-$ETCD_VERSION-linux-amd64.tar.gz

cd etcd-$ETCD_VERSION-linux-amd64
sudo cp etcd /usr/local/bin/
sudo cp etcdctl /usr/local/bin/

rm -rf etcd-$ETCD_VERSION-linux-amd64

etcdctl version

После установки сразу беру бэкап того что было пока не залез своими руками.

Тут важно понимать что для снятия бэкапа нужен рабочий демон etcd, но во время его накатки он наоборот должен лежать.

Cнятие снапшота 
etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.pem" --cert="/etc/kubernetes/pki/etcd/192.168.253.181.pem" --key="/etc/kubernetes/pki/etcd/192.168.253.181-key.pem" snapshot save test.snap 
Накатка снапшота
etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.pem" --cert="/etc/kubernetes/pki/etcd/192.168.253.181.pem" --key="/etc/kubernetes/pki/etcd/192.168.253.181-key.pem" snapshot restore test.snap --data-dir /var/lib/etcd

Теперь нужно навыпускать сертификаты

Я тут опишу наиболее простой способ выпуска — с помощью  cfssl

сначала ставлю необходимый софт из репы

apt-get install gcc make git -y

Теперь ставлю go

wget https://golang.org/dl/go1.15.6.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version

Ставлю cfssl

git clone https://github.com/cloudflare/cfssl/

cd cfssl

make

cp -p bin/cfssl /usr/bin/
cp -p bin/cfssljson /usr/bin/

Теперь можно готовить сертификаты

cd ~

git clone https://github.com/etcd-io/etcd

cd etcd/hack/tls-setup

тут нужно привести к правильному виду два файла

config/req-csr.json
  {
"CN": "etcd",
"hosts": [
"localhost",
"127.0.0.1",
"192.168.253.181",
"192.168.253.184",
"192.168.253.186"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"O": "autogenerated",
"OU": "etcd cluster",
"L": "the internet"
}
]
}
Makefile
.PHONY: cfssl ca req clean

CFSSL = @env PATH=$(GOPATH)/bin:$(PATH) cfssl
JSON = env PATH=$(GOPATH)/bin:$(PATH) cfssljson

all: ca req

cfssl:
HTTPS_PROXY=127.0.0.1:12639 go get -u -tags nopkcs11 github.com/cloudflare/cfssl/cmd/cfssl
HTTPS_PROXY=127.0.0.1:12639 go get -u github.com/cloudflare/cfssl/cmd/cfssljson
HTTPS_PROXY=127.0.0.1:12639 go get -u github.com/mattn/goreman

ca:
mkdir -p certs
$(CFSSL) gencert -initca config/ca-csr.json | $(JSON) -bare certs/ca

req:
$(CFSSL) gencert \
-ca certs/ca.pem \
-ca-key certs/ca-key.pem \
-config config/ca-config.json \
config/req-csr.json | $(JSON) -bare certs/192.168.253.181
$(CFSSL) gencert \
-ca certs/ca.pem \
-ca-key certs/ca-key.pem \
-config config/ca-config.json \
config/req-csr.json | $(JSON) -bare certs/192.168.253.184
$(CFSSL) gencert \
-ca certs/ca.pem \
-ca-key certs/ca-key.pem \
-config config/ca-config.json \
config/req-csr.json | $(JSON) -bare certs/192.168.253.186
$(CFSSL) gencert \
-ca certs/ca.pem \
-ca-key certs/ca-key.pem \
-config config/ca-config.json \
config/req-csr.json | $(JSON) -bare certs/peer-192.168.253.181
$(CFSSL) gencert \
-ca certs/ca.pem \
-ca-key certs/ca-key.pem \
-config config/ca-config.json \
config/req-csr.json | $(JSON) -bare certs/peer-192.168.253.184
$(CFSSL) gencert \
-ca certs/ca.pem \
-ca-key certs/ca-key.pem \
-config config/ca-config.json \
config/req-csr.json | $(JSON) -bare certs/peer-192.168.253.186

clean:
rm -rf certs

 

 

Эта конфигурация для трех нод, для кажой по две пары сертификат — ключ и корень. Одна для клиентов снаружи, другая для общения внутри кластера.

После получения сертификатов подменяю их на существующей ноде (если хочу чтобы kube-api работал подменяю и там)

 

примерная команда запуска выклядит так :

etcd --name=kuber1 --advertise-client-urls=https://192.168.253.181:2379 --initial-advertise-peer-urls=https://192.168.253.181:2380 --initial-cluster kuber1=https://192.168.253.181:2380,kuber4=https://192.168.253.184:2380,kuber6=https://192.168.253.186:2380 --listen-client-urls=https://127.0.0.1:2379,https://192.168.253.181:2379 --listen-peer-urls=https://192.168.253.181:2380 --listen-metrics-urls=http://127.0.0.1:2381 --client-cert-auth=true --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem --cert-file=/etc/kubernetes/pki/etcd/192.168.253.181.pem --key-file=/etc/kubernetes/pki/etcd/192.168.253.181-key.pem --peer-client-cert-auth=true --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem --peer-cert-file=/etc/kubernetes/pki/etcd/peer-192.168.253.181.pem --peer-key-file=/etc/kubernetes/pki/etcd/peer-192.168.253.181-key.pem --initial-cluster-token etcd-cluster-0 --initial-cluster-state existing --data-dir=/var/lib/etcd

теперь начинается подключение нод. Доставляю все необходимые сертификаты на соответсвтующие ноды, ставлю etcd и готовлю команды

Настройка первой ноды:

сначала проверяю member list

etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.pem" --cert="/etc/kubernetes/pki/etcd/192.168.253.181.pem" --key="/etc/kubernetes/pki/etcd/192.168.253.181-key.pem" member list

нужно избавиться от localhost в определении ноды кластера

etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.pem" --cert="/etc/kubernetes/pki/etcd/192.168.253.181.pem" --key="/etc/kubernetes/pki/etcd/192.168.253.181-key.pem" member update 8e9e05c52164694d --peer-urls="https://192.168.253.181:2380"

Добавляю вторую ноду:

etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.pem" --cert="/etc/kubernetes/pki/etcd/192.168.253.181.pem" --key="/etc/kubernetes/pki/etcd/192.168.253.181-key.pem" member add kuber4 --peer-urls="https://192.168.253.184:2380"

Проверяю что добавилась и запускаю демона на ноде, делаю пока временной командой без ещё не добавленной третьей ноды кластера

etcd 
--name=kuber4 
--advertise-client-urls=https://192.168.253.184:2379 
--initial-advertise-peer-urls=https://192.168.253.184:2380 
--initial-cluster kuber1=https://192.168.253.181:2380,kuber4=https://192.168.253.184:2380 
--listen-client-urls=https://127.0.0.1:2379,https://192.168.253.184:2379 
--listen-peer-urls=https://192.168.253.184:2380 
--listen-metrics-urls=http://127.0.0.1:2381 
--client-cert-auth=true 
--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem 
--cert-file=/etc/kubernetes/pki/etcd/192.168.253.184.pem 
--key-file=/etc/kubernetes/pki/etcd/192.168.253.184-key.pem 
--peer-client-cert-auth=true 
--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem 
--peer-cert-file=/etc/kubernetes/pki/etcd/peer-192.168.253.184.pem 
--peer-key-file=/etc/kubernetes/pki/etcd/peer-192.168.253.184-key.pem 
--initial-cluster-token etcd-cluster-0 
--initial-cluster-state existing 
--data-dir=/var/lib/etcd

Убеждаюсь что она добавилась:

etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.pem" --cert="/etc/kubernetes/pki/etcd/192.168.253.181.pem" --key="/etc/kubernetes/pki/etcd/192.168.253.181-key.pem" member list

Добавляю третью ноду :

etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.pem" --cert="/etc/kubernetes/pki/etcd/192.168.253.181.pem" --key="/etc/kubernetes/pki/etcd/192.168.253.181-key.pem" member add kuber6 --peer-urls="https://192.168.253.186:2380"

Запускаю демона на третьей ноде уже полной командой:

etcd --name=kuber6 --advertise-client-urls=https://192.168.253.186:2379 --initial-advertise-peer-urls=https://192.168.253.186:2380 --initial-cluster kuber1=https://192.168.253.181:2380,kuber4=https://192.168.253.184:2380,kuber6=https://192.168.253.186:2380 --listen-client-urls=https://127.0.0.1:2379,https://192.168.253.186:2379 --listen-peer-urls=https://192.168.253.186:2380 --listen-metrics-urls=http://127.0.0.1:2381 --client-cert-auth=true --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem --cert-file=/etc/kubernetes/pki/etcd/192.168.253.186.pem --key-file=/etc/kubernetes/pki/etcd/192.168.253.186-key.pem --peer-client-cert-auth=true --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.pem --peer-cert-file=/etc/kubernetes/pki/etcd/peer-192.168.253.186.pem --peer-key-file=/etc/kubernetes/pki/etcd/peer-192.168.253.186-key.pem --initial-cluster-token etcd-cluster-0 --initial-cluster-state existing --data-dir=/var/lib/etcd

Проверяю что всё добавилось:

etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.pem" --cert="/etc/kubernetes/pki/etcd/192.168.253.181.pem" --key="/etc/kubernetes/pki/etcd/192.168.253.181-key.pem" member list

Теперь меняю команду запуска на второй ноде.

Кластер собран, можно трамбовать запуск в systemd.

17 комментариев на Переход с отдельной базы на кластер etcd в kubernetes

  1. Der Anbieter ist vertrauenswürdig und verfügt über eine riesige Spielauswahl. Dementsprechend können wir selbstbewusst die wirklich besten Online-Casinos für Spieler aus Österreich präsentieren. Um den Titel „bestes Online-Casino“ zu ergattern, muss ein Anbieter viele Kriterien erfüllen. Der Anbieter stellt euch einen gigantischen Willkommensbonus, einen sicheren Rahmen für das Spiel und eine beeindruckende Auswahl zur Verfügung.
    Aus diesem Grund hat CasinoOnline.de bei seiner Auswahl von deutschen Casinos online mit Echtgeld Spielen auch auf diesen Punkt geachtet. Sie sind bereit, online mit Echtgeld zu spielen. Zusätzlich zum 300 € Willkommensbonus erhalten Neuspieler auch noch 100 Freispiele gratis.

    References:
    https://online-spielhallen.de/beste-online-casinos-deutschland-top-10-nov-2025-2/

  2. In der Regel sind diese Boni Teil von Willkommens- oder Anmeldeangeboten. Einen Bonus ohne Einzahlung in Höhe von 10 € zu erhalten, ist ganz einfach. Selbst wenn Sie nicht gewinnen, sammeln Sie wertvolle Erfahrungen. Kleinere, realistischere Boni sind sicherer und geben Ihnen trotzdem die Chance, Geld zu gewinnen. Es mag seltsam erscheinen, dass ein Casino Bargeld verschenkt, aber es ist eine kluge langfristige Strategie.
    Bei diesen speziellen Angeboten bekommst du entweder für die Anmeldung ein Bonusguthaben oder einfach so über das Stammkundenprogramm zusätzliches Guthaben oder Freispiele spendiert. Mit diesem kannst du echte Geldgewinne erzielen. Dir werden Freispiele oder Bonusguthaben gutgeschrieben.

    References:
    https://online-spielhallen.de/hitnspin-casino-osterreich-jetzt-spielen-800-bonus/

  3. 368bet, not bad! Had a fun time exploring their casino games, and the sports betting section is pretty extensive. Withdrawal process was surprisingly fast. I’d say give it a go, you might just find your new favorite spot! All the best on 368bet

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *