Ubuntu K3s高可用集群部署
本文将使用 Ubuntu 系统,如选择 CentOS 系统,亦可作为参考,其步骤与命令大同小异,万变不离其宗。
一、环境信息
- 操作系统:ubuntu24.04
- 内存: 32GB
- CPU: 16核
- 网络: 能够互访,能够访问互联网
| hostname | IP | 备注 |
|---|---|---|
| ubuntu-01 | 172.xx.x.61 | master1 |
| ubuntu-03 | 172.xx.x.63 | slave1 |
| ubuntu-04 | 172.xx.x.64 | slave2 |
| ubuntu-05 | 172.xx.x.65 | master2 |
| ubuntu-06 | 172.xx.x.66 | master3 |
| ubuntu-07 | 172.xx.x.67 | slave3 |
| ubuntu-09 | 172.xx.x.69 | slave4 |
二、准备工作
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模型复制到对应文件夹。