跳到主要内容

基于K3S和zerotier-planet实现跨云搭建K8S集群

K3S官方文档:https://docs.k3s.io/zh/
本文参考自:https://guqing.io/archives/how-to-install-k3s-cluster-using-servers-from-different-regions

环境准备

节点规划

保证两台服务器已通过zerotier-planet实现内网互通,节点规划如下,K3s默认已包含containerd,所以不用安装docker环境

阿里云 10.20.30.5 k8s-master    Debian GNU/Linux 11 (bullseye)
腾讯云 10.20.30.8 k8s-node1 Ubuntu 20.04 LTS

zerotier-planetzerotier-one冲突解决

由于在腾讯云上安装了zerotier-planet,端口9993已占用,导致zerotier-one安装后无法启动,执行sudo zerotier-one -d错误信息如下

zerotier-one: fatal error: cannot bind to local control interface port 9993

解决办法:在/var/lib/zerotier-one/目录下新建自定义配置文件local.conf,修改端口为1194

{"settings":{"primaryPort":1194}}

之后重启启动zerotier-one

sudo service zerotier-one restart

云主机启用 IPv4 Forwarding

分别在两台主机/etc/sysctl.conf文件中添加配置

net.ipv4.ip_forward=1

执行systel -p使配置生效

设置hostname

分别在两台机器上设置hostname

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1

安装K3S server节点

节点信息

IP: 10.20.30.5
K3S版本: v1.28.4+k3s2

在master服务器上安装server节点

# master节点ip
export MASTER_NODE_IP=10.20.30.5
# master节点zerotier网卡,实现局域网访问(ifconfig)
export MASTER_NODE_IFACE=ztti2hffii
# 这里安装使用flannel host-gw模式, 不使用vxlan see: https://github.com/flannel-io/flannel/issues/1243
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --node-ip $MASTER_NODE_IP --flannel-iface $MASTER_NODE_IFACE --flannel-backend=host-gw

安装完成后使用kubectl get nodes -o wide查看节点情况,可以看到节点状态已就绪 K3S Server节点 接下来获取master节点K3S_TOKEN用于安装worker节点

cat /var/lib/rancher/k3s/server/node-token

安装K3S worker节点

节点信息

IP: 10.20.30.8
K3S版本: v1.28.4+k3s2

在node1服务器上安装worker节点

# master节点ip
export MASTER_NODE_IP=10.20.30.5
# 上文中获取到的master节点的K3S_TOKEN
export K3S_TOKEN=XXXXXXXXXXX
# worker节点ip
export WORKER_NODE_IP=10.20.30.8
# worker节点zerotier网卡,实现局域网访问(ifconfig)
export WORKER_NODE_IFACE=ztti2hffii
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://${MASTER_NODE_IP}:6443 K3S_TOKEN=$K3S_TOKEN sh -s - --node-ip $WORKER_NODE_IP --flannel-iface $WORKER_NODE_IFACE

安装完成后在master节点使用kubectl get nodes -o wide查看节点情况,可以看到两个节点状态都已就绪 K3S 双节点

配置Docker国内镜像源

由于k3s两台服务器位于国内,pod使用的镜像还是从DockerHub拉取,速度较慢,很容易出现ImagePullBackOff错误,我们需要配置Docker国内镜像源来加速。

# 在master节点上新增配置文件,添加加速地址,mirror地址自行登录阿里云获取
cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
"docker.io":
endpoint:
- "https://XXXX.mirror.aliyuncs.com"
- "https://registry-1.docker.io"
EOF
# 重启服务
systemctl restart k3s
# 拉取个镜像测试下
> crictl pull appropriate/curl
Image is up to date for sha256:d37e1f717dc01df3a838955d29a149c569352c0991b1d7cf11b4ebca8c6c7f55
> crictl images
IMAGE TAG IMAGE ID SIZE
docker.io/appropriate/curl latest d37e1f717dc01 2.78MB

至此 跨云的K3S集群已经搭建完毕。

搭建Kuboard面板

官网地址:https://kuboard.cn/learning

# 安装
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 卸载
kubectl delete -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 查看是否就绪
kubectl get pods -n kuboard -o wide

浏览器访问:http://10.20.30.5:30080/
输入初始用户名和密码,并登录
用户名: admin
密码: Kuboard123