k3s - высокая доступность на малиновом писе - проблемы с настройкой - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь настроить k3s с высокой доступностью, используя два Raspberry Pi 4S, но не могу заставить второй сервер связываться с первым.

Благодарен за любую помощь, чтобы заставить это работать .

Я пробовал как Embedded DB , так и External DB (mariadb)

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

#embedded db - server 1
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--log k3s.log --bind-address 192.168.X.XXX --write-kubeconfig-mode 644 --docker --cluster-init" sh -

#external db - server 1
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--log k3s.log --bind-address 192.168.X.XXX --write-kubeconfig-mode 644 --docker --cluster-init --datastore-endpoint mysql://username:password@tcp(192.168.X.Y:3307)/k3s" sh -


Получение токена с сервера 1 и добавление на сервер 2

#get token from server 1
pi@rpi4:~ $ sudo cat /var/lib/rancher/k3s/server/node-token
K10b598b7a839cb4d2351f77b7d7c18f12345678bd7f68603434248b4cdf1b333fd::server:4b7b5a1b8b05271298150f008e1b804e

#on server 2...
export K3S_TOKEN="K10b598b7a839cb4d2351f77b7d7c18f12345678bd7f68603434248b4cdf1b333fd::server:4b7b5a1b8b05271298150f008e1b804e"

Затем я пытаюсь подключить второй сервер к кластеру, используя:

#embedded db - server 2
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--log k3s.log --server https://192.168.X.X:6443 --write-kubeconfig-mode 644 --docker" sh -

#external db - server 2
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--log k3s.log --server https://192.168.X.X:6443 --write-kubeconfig-mode 644  --datastore-endpoint mysql://user:password@tcp(192.168.X.X:3307)/k3s --docker" sh -

Службы работают без ошибок на обоих rpis, но второй сервер не отображается как подключенный к первому


Edit

Пришлось использовать немного вариации чтобы заставить его работать со встроенной базой данных, это помогло подключить 2-й / 3-й сервер к начальному кластеру

(с установленными K3S_TOKEN и K3S_URL)

curl -fL https://get.k3s.io | INSTALL_K3S_EXEC="--log k3s.log --flannel-iface=eth0 --write-kubeconfig-mode 644 --no-deploy servicelb --docker" sh -s - server

однако модули на сервере 2 и сервере 3 не могут обмениваться данными с модулями, подключенными к серверу 1. * 1 032 *

Я уже поднял отдельную проблему для этого, поскольку я изначально думал, что это другая проблема


1 Ответ

1 голос
/ 21 января 2020

Мне кажется, вы правильно извлекаете токен и помещаете его на 2-й сервер, но не вызываете его в сценарии установки: таким образом, второй сервер даже не пытается синхронизировать c с первый, скорее он просто раскручивает новый кластер и создает новый токен.

Также опция --server не нужна. Я также попал в эту ловушку: это может быть наследием предыдущих версий, но это не работает. В настоящее время, насколько я понимаю, сервер, получив токен и базу данных, переходит в базу данных и ищет кластер, определенный токеном, если он его находит, он автоматически запускается как HA.

Что я сделать следующее: я сначала создаю токен

A) master1$ NODE_TOKEN=$(echo $(hostname) $(date +%s) | shasum | base64)
   master1$ echo $NODE_TOKEN > node_token

и использую его для раскрутки кластера на первом мастере

B) master1$ curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="-v 2 -l master1.log -t ${NODE_TOKEN} --flannel-iface=enp0s8 --write-kubeconfig-mode 644 --tls-san k3s-cluster-01.lan --node-taint k3s-controlplane=true:NoExecute --datastore-endpoint mysql://k3s:${MYSQL_PASSWORD}@tcp(${IPADDR}:3306)/k3s" sh -

, затем я ставлю его на второго мастера и устанавливаю там тоже

C) master2$ curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="-v 2 -l master2.log -t ${NODE_TOKEN} --flannel-iface=enp0s8 --write-kubeconfig-mode 644 --tls-san k3s-cluster-01.lan --node-taint k3s-controlplane=true:NoExecute --datastore-endpoint mysql://k3s:${MYSQL_PASSWORD}@tcp(${IPADDR}:3306)/k3s" sh -

Что касается HA без внешнего хранилища, я не смог заставить его работать, и в конце концов я сдался. Пока что я использую один экземпляр mysql, но в конечном итоге он должен go. Будь я заменен собственным K3S dqlite или etcd или еще чем-то, я пока не знаю.

...