Ubuntu K3s高可用集群部署

427 阅读9分钟

Ubuntu K3s高可用集群部署

本文将使用 Ubuntu 系统,如选择 CentOS 系统,亦可作为参考,其步骤与命令大同小异,万变不离其宗。
一、环境信息
  • 操作系统:ubuntu24.04
  • 内存: 32GB
  • CPU: 16核
  • 网络: 能够互访,能够访问互联网
hostnameIP备注
ubuntu-01172.xx.x.61master1
ubuntu-03172.xx.x.63slave1
ubuntu-04172.xx.x.64slave2
ubuntu-05172.xx.x.65master2
ubuntu-06172.xx.x.66master3
ubuntu-07172.xx.x.67slave3
ubuntu-09172.xx.x.69slave4
二、准备工作

1、配置hostname

  • k3s依赖于主机的hostname,首先要修改每台服务器的hostname,并确保不一致。(我这里是没有)
# 所有服务器进行以下操作
sudo hostnamectl set-hostname 新主机名

2、设置时区同步时间

# 设置时区
sudo timedatectl set-timezone Asia/Shanghai

# 查看状态是否成功
timedatectl status

# 启用 NTP 同步
sudo timedatectl set-ntp true

# 配置同步服务器
sudo nano /etc/systemd/timesyncd.conf

# 将以下镜像源复制到timesyncd.conf中,保存后退出
[Time]
NTP=time.windows.com
FallbackNTP=ntp.ubuntu.com

# 重启服务
sudo systemctl restart systemd-timesyncd

1.修改Ubuntu软件源配置文件

sudo vim /etc/apt/sources.list

# 将以下镜像源复制到sources.list中,保存后退出
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

2、更新软件包列表(确保软件源是最新的)

sudo apt update

3、安装curl工具命令

sudo apt install -y curl
三、安装K3s集群

1、ubuntu-01服务器安装k3s服务,作为master1

  • cluster-init:默认参数使用sqlite数据库,默认是不支持高可用的,需要切换到内置的etcd数据库中。
curl –sfL \
  https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
  INSTALL_K3S_VERSION=v1.31.5+k3s1 \
  INSTALL_K3S_MIRROR=cn \
  sh -s - server \
  --cluster-init \
  --disable traefik \
  --system-default-registry=registry.cn-hangzhou.aliyuncs.com 

2、查看服务是否启动

sudo systemctl status k3s

root@ubuntu-01:/home/ubuntu# sudo systemctl status k3s
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2025-03-04 13:25:19 UTC; 2h 28min ago
       Docs: https://k3s.io
    Process: 20194 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service 2>/dev/null (code=exited, status=0/SUCCESS)
    Process: 20196 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
    Process: 20197 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 20198 (k3s-server)
      Tasks: 105
     Memory: 1.2G
        CPU: 24min 51.060s

3、如果没有启动成功,则运行以下命令,启动k3s

sudo systemctl start k3s

4、查看集群状态:角色会多一个etcd

sudo kubectl get nodes

root@ubuntu-01:/home/ubuntu# sudo kubectl get nodes
NAME        STATUS   ROLES                       AGE    VERSION
ubuntu-01   Ready    control-plane,etcd,master   153m   v1.31.5+k3s1

5、获取第一主节点token,后续安装k3s要用到

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

root@ubuntu-05:/home/ubuntu# sudo cat /var/lib/rancher/k3s/server/node-token
K10a9e209008cf0a9e78e4bbc8b6ab5c789f896ac103a7838f6168a36edbca3b618::server:8f6168a36edbca3b614621db

6、在ubuntu-05、ubuntu-06服务器中安装k3s,作为master2,master3

  • server:指定到第一主节点服务。
curl –sfL \
  https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
  INSTALL_K3S_VERSION=v1.31.5+k3s1 \
  INSTALL_K3S_MIRROR=cn \
  K3S_TOKEN=K10a9e209008cf0a9e78e4bbc8b6ab5c789f896ac103a7838f6168a36edbca3b618::server:8f6168a36edbca3b614621db \
  sh -s - server \
  --server https://172.xx.x.65:6443

解释:

  • INSTALL_K3S_VERSION:版本号
  • INSTALL_K3S_MIRROR:ubuntu-01服务器ip
  • K3S_TOKEN:服务器token使用命令查看:sudo cat /var/lib/rancher/k3s/server/node-token

7、查看集群状态,出现以下内容就安装成功了

root@ubuntu-01:/home/ubuntu# sudo kubectl get nodes
NAME        STATUS   ROLES                       AGE    VERSION
ubuntu-01   Ready    control-plane,etcd,master   153m   v1.31.5+k3s1
ubuntu-05   Ready    control-plane,etcd,master   153m   v1.31.5+k3s1
ubuntu-06   Ready    control-plane,etcd,master   144m   v1.31.5+k3s1

8、为ubuntu-01(master1)添加从节点slave1,slave2。在ubuntu-01、ubuntu-02两台服务器运行以下命令

curl –sfL \
  https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
  INSTALL_K3S_VERSION=v1.31.5+k3s1 \
  INSTALL_K3S_MIRROR=cn \
  K3S_URL=https://172.xx.x.61:6443 \
  K3S_TOKEN=K10a9e209008cf0a9e78e4bbc8b6ab5c789f896ac103a7838f6168a36edbca3b618::server:8f6168a36edbca3b614621db\
  sh -

9、为ubuntu-05(master2)添加从节点slave3

curl –sfL \
  https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
  INSTALL_K3S_VERSION=v1.31.5+k3s1 \
  INSTALL_K3S_MIRROR=cn \
  K3S_URL=https://172.xx.x.65:6443 \
  K3S_TOKEN=K10a9e209008cf0a9e78e4bbc8b6ab5c789f896ac103a7838f6168a36edbca3b618::server:8f6168a36edbca3b614621db\
  sh -

10、为ubuntu-06(master3)添加从节点slave4

curl –sfL \
  https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
  INSTALL_K3S_VERSION=v1.31.5+k3s1 \
  INSTALL_K3S_MIRROR=cn \
  K3S_URL=https://172.xx.x.66:6443 \
  K3S_TOKEN=K10a9e209008cf0a9e78e4bbc8b6ab5c789f896ac103a7838f6168a36edbca3b618::server:8f6168a36edbca3b614621db\
  sh -

11、查询集群状态,出现以下内容,3主4从K3s集群就搭建完成了

root@ubuntu-01:/home/ubuntu# sudo kubectl get nodes
NAME        STATUS   ROLES                       AGE    VERSION
ubuntu-01   Ready    control-plane,etcd,master   456m   v1.31.5+k3s1
ubuntu-02   Ready    <none>                      434m   v1.31.5+k3s1
ubuntu-03   Ready    <none>                      434m   v1.31.5+k3s1
ubuntu-05   Ready    control-plane,etcd,master   153m   v1.31.5+k3s1
ubuntu-06   Ready    control-plane,etcd,master   144m   v1.31.5+k3s1
ubuntu-07   Ready    <none>                      141m   v1.31.5+k3s1
ubuntu-09   Ready    <none>                      34s    v1.31.5+k3s1
四、安装kuboard

1、默认使用 内嵌containerd,可以通过containerd命令来启动

# 拉取镜像
sudo ctr images pull swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3

# 如果服务器没有连接互联网,通过命令将tar包导入到containerd中
sudo ctr images import kuboard.tar

# 查看镜像是否在containerd中
sudo ctr images ls 
sudo crictl images

# 创建容器
sudo ctr containers create \
--name kuboard \
--net-host \
--env KUBOARD_ENDPOINT="https://172.xx.x.61:6443" \
--env KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
--mount type=bind,src=/root/kuboard-data,dst=/data,options=rbind:ro \
--restart unless-stopped \
swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3

# 启动容器
sudo ctr containers start kuboard

2、如果使用docker启动,则直接通过docker命令来启动

# 拉取镜像
docker pull swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3

# 如果服务器没有连接互联网,通过命令将tar包导入到docker中
docker load -i kuboard.tar

# 查看镜像是否在docker中
docker images

# 运行镜像
sudo docker run -d \
--restart=unless-stopped \
--name=kuboard \
-p 8088:80/tcp \
-p 10081:10081/tcp \
-e KUBOARD_ENDPOINT="https://172.xx.x.61:6443" \
-e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
-v /root/kuboard-data:/data \
swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3
五、配置安装NFS

1、master1安装nfs服务

sudo apt install -y nfs-kernel-server

2、master1配置NFS服务

(1)创建一个目录作为共享目录。例如,我们使用 /nfs 作为共享目录

sudo mkdir /mnt/nfs

(2)在 master1 节点上编辑 /etc/exports 文件,输入以下配置信息。该节点将作为 NFS Server

sudo echo "/nfs *(rw,sync,no_root_squash)" > /etc/exports
  • /nfs:NFS 共享的目录。
  • *:可以访问所有的主机网段。
  • rw:可读写权限。如果是只读权限,则是 ro
  • sync:数据传输采用同步方式。采用同步方式可以保障数据的安全性,但传输速度较慢。如果采用异步方式,则是 async。在异步方式下,数据传输效率高,但安全性差。
  • no_root_squash:NFS 服务共享目录的属性。如果用户是 root,则它对这个目录就有 root 的权限了。

(3)启动NFS服务

# 启动NFS服务
sudo systemctl restart nfs-kernel-server
# 设置其开机自启动
sudo systemctl enable nfs-kernel-server
# 检查一下状态
sudo systemctl status nfs-server

# 出现以下则安装成功
root@ubuntu-01:/mnt/nfs# systemctl status nfs-server
● nfs-server.service - NFS server and services
     Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
    Drop-In: /run/systemd/generator/nfs-server.service.d
             └─order-with-mounts.conf
     Active: active (exited) since Tue 2025-03-11 17:28:41 UTC; 14s ago
   Main PID: 472048 (code=exited, status=0/SUCCESS)
        CPU: 13ms

(4)其他节点依次挂载 NFS 共享目录

# 安装 NFS 客户端软件包
sudo apt install -y nfs-common
# 创建一个挂载点,例如 /mnt/nfs/ubuntu_03
sudo mkdir -p /mnt/nfs/ubuntu_03
# 挂载 NFS 共享目录(以下ip为master1的ip)
sudo mount 172.xx.x.61:/mnt/nfs /mnt/nfs/ubuntu_03

(5)验证挂载是否成功

# 在客户端机器上,验证是否成功挂载 NFS 共享目录。
sudo df -h

# 最后一行出现master1文件夹即为成功
root@ubuntu-03:/mnt/nfs# df -h
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 6.3G  2.5M  6.3G   1% /run
/dev/sda2              98G  8.1G   85G   9% /
/dev/sda6              98G  3.2G   90G   4% /usr
tmpfs                  32G     0   32G   0% /dev/shm
tmpfs                 5.0M     0  5.0M   0% /run/lock
/dev/sda3              49G  246M   47G   1% /boot
/dev/sda7              98G  401M   93G   1% /var
/dev/sda9             1.3T   36K  1.2T   1% /mnt
/dev/sda8              98G  1.3G   92G   2% /var/lib
/dev/sda1             1.1G  6.1M  1.1G   1% /boot/efi
/dev/sda4              98G   56K   93G   1% /home
/dev/sda5              98G   24K   93G   1% /srv
tmpfs                 6.3G  4.0K  6.3G   1% /run/user/1000
172.xx.x.61:/mnt/nfs  1.3T  1.7G  1.2T   1% /mnt/nfs/ubuntu_03()

(6)为了在重启后仍然保持挂载状态,可以在 /etc/fstab 文件中添加一行

vim /etc/fstab

172.xx.x.61:/mnt/nfs  /mnt/nfs/ubuntu_03  nfs  defaults  0  0

注意事项:

1、如果在kuboard启动服务遇到一下报错:

Failed to create pod sandbox: rpc error: code = DeadlineExceeded desc = failed to start sandbox "aac1996483c846816e642b065bdd0a0c5e11ab19945b907813398c3e92009e42": failed to get sandbox image "rancher/mirrored-pause:3.6": failed to pull image "rancher/mirrored-pause:3.6": failed to pull and unpack image "docker.io/rancher/mirrored-pause:3.6": failed to resolve reference "docker.io/rancher/mirrored-pause:3.6": failed to do request: Head "https://registry-1.docker.io/v2/rancher/mirrored-pause/manifests/3.6": dial tcp 128.242.240.218:443: i/o timeout

则可以将mirrored-pause.tar 导入到Containerd中,切记在每一台服务器上都要导入。

2、如果要部署ollama的话:

/nfs/kuboard-ollama-storage-pvc-92cc736b-fe7a-4b17-9665-35a1d3b22de1/models

则可以将models.tar.gz模型复制到对应文件夹。