【问题标题】:k3s - High Availability on raspberry pis - problems setting upk3s - 树莓派上的高可用性 - 设置问题
【发布时间】:2020-01-21 10:03:15
【问题描述】:

我正在尝试使用两个 raspberry pi 4s 为 k3s 设置高可用性,但无法让第二个服务器链接到第一个。

感谢任何帮助使其正常工作。

Embedded DBExternal 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 -

服务在两个 rpi 上都运行没有错误,但第二个服务器没有显示为连接到第一个


编辑

必须使用一些变体才能使其与嵌入式数据库一起使用,这可以让第二/第三台服务器加入初始集群

(使用K3S_TOKENK3S_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

但是,Server 2 和 Server 3 上的 Pod 无法与连接到 Server 1 的 Pod 通信。

我已经为此提出了a separate issue,因为我最初认为这是一个不同的问题


【问题讨论】:

  • 可能是法兰绒配置不适合您绑定的 eth0 吗?

标签: kubernetes high-availability k3s


【解决方案1】:

在我看来,您正确地提取了令牌并将其放入第二台服务器,但您没有在安装脚本中调用它:这样第二台服务器甚至不会尝试与第一台服务器同步,相反,它只是旋转一个新集群并创建一个新令牌。

也不需要 --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 实例,但最终必须这样做。 是否被 K3S 自己的 dqlite 或 etcd 代替我还不知道。

【讨论】:

  • 我设法让它与嵌入式数据库一起工作(有点 - 请参阅我对原始帖子的编辑)和命令的变体
猜你喜欢
  • 2021-09-30
  • 2014-08-15
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多