K1集群板上搭建K3S

K3S介绍

K3s 是一个专为资源受限环境(如 IoT 设备、边缘计算和小型集群)设计的轻量级 Kubernetes 发行版。它由 Cloud Native Computing Foundation (CNCF) 认证,并提供了完整的 Kubernetes 功能,但占用空间更小。

核心特性

  • 轻量级:体积仅为典型 Kubernetes 安装的 10%。
  • 易于安装:简单的安装过程,几乎不需要额外配置。
  • 自动更新:内置自动更新机制,确保始终运行最新版本。
  • 嵌入式数据库:默认使用 SQLite 数据库,无需外部数据库支持。
  • 支持 ARM 架构:非常适合在低功耗设备(如 Raspberry Pi 或自定义 RISC-V 板)上运行。
  • 极低的资源需求:专为 CPU 和内存资源有限的系统设计,运行高效。

环境准备

获取IP地址

启动好集群板之后,先获取各个板子的IP地址: 方法1:直接打开路由器的管理界面,找到各个节点IP。 方法2:用串口工具连接到集群板子调试,输入命令:

ifconfig

方法3:在另一机器上用fping扫描网段IP

没有fping的话需要先安装fping

   sudo apt update
  sudo apt install fping
  fping -a 192.168.2.1 192.168.2.255 -g -q
  192.168.2.113
  192.168.2.116
  192.168.2.117
  192.168.2.120

再通过arp工具查看IP对应的MAC地址

   arp   
  地址                     类型   硬件地址           标志 Mask           接口
  192.168.2.116           ether   fe:fe:fe:12:34:58   C                     end1
  192.168.2.117           ether   fe:fe:fe:12:34:59   C                     end1
  192.168.2.113           ether   fe:fe:fe:12:34:66   C                     end1
  192.168.2.120           ether   fe:fe:fe:12:34:67   C                     end1

MAC 地址前面几位相同的便是我们的集群,这样就可以获取到各个K1核心板的IP了。

当前示例中集群IP为:192.168.2.113、192.168.2.116、192.168.2.117、192.168.2.120,其中120的为主节点。

安装k3s

通过ssh连接上四个节点

下载k3s

下载社区打包好的k3s执行文件

https://github.com/CARV-ICS-FORTH/k3s/releases
    bit-brick-desktop% ls
  k3s-riscv64.gz.aa k3s-riscv64.gz.ab k3s-riscv64.gz.ac

解压可执行k3s可执行文件

由于预编译好的k3s包已被分为三个文件,因此需要将三个文件合并为一个文件并且解压加上执行权限

        bit-brick-desktop% cat k3s-riscv64.gz.a* > k3s-riscv64.gz
      bit-brick-desktop% gzip -d k3s-riscv64.gz
      bit-brick-desktop% chmod +x k3s-riscv64

执行一下 k3s-riscv64命令,确认是否可以运行

    bit-brick-desktop% ./k3s-riscv64 
  NAME:
  k3s-riscv64 - Kubernetes, but small and simple

  USAGE:
  k3s-riscv64 [global options] command [command options] [arguments...]

  VERSION:
  v1.31.1+k3s-34f8fa8d (34f8fa8d)

  COMMANDS:
  server           Run management server
  agent           Run node agent
  kubectl         Run kubectl
  crictl           Run crictl
  ctr             Run ctr
  check-config     Run config check
  token           Manage bootstrap tokens
  etcd-snapshot    
  secrets-encrypt Control secrets encryption and keys rotation
  certificate     Manage K3s certificates
  completion       Install shell completion script
  help, h         Shows a list of commands or help for one command

  GLOBAL OPTIONS:
   --debug                     (logging) Turn on debug logs [$K3S_DEBUG]
   --data-dir value, -d value (data) Folder to hold state default /var/lib/rancher/k3s or ${HOME}/.rancher/k3s if not root [$K3S_DATA_DIR]
   --help, -h                 show help
   --version, -v               print the version

将k3s-riscv64文件复制到/usr/local/bin/下,并更名为k3s

    bit-brick-desktop% sudo cp k3s-riscv64 /usr/local/bin/k3s

注意:上面的步骤在四个节点都要执行

Master节点安装k3s

我的主节点是192.168.2.120

先下载k3s.sh脚本

    curl -sfL https://get.k3s.io > k3s.sh 
   chmod +x k3s.sh

执行k3s.sh脚本

    bit-brick-desktop%  INSTALL_K3S_EXEC="server --advertise-address 192.168.2.120" INSTALL_K3S_SKIP_DOWNLOAD="true" bash -x ./k3s.sh      

INSTALL_K3S_SKIP_DOWNLOAD="true" 表示跳过下载k3s二进制文件,直接使用本地的k3s二进制文件。

查看服务状态

    systemctl status k3s
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; preset: enabled)
Active: active (running) since Tue 2025-04-22 15:25:10 CST; 1min 1s ago
Docs: https://k3s.io
Main PID: 881 (k3s-server)
Tasks: 54
Memory: 630.7M (peak: 648.7M)
CPU: 2min 22.682s
CGroup: /system.slice/k3s.service
├─ 881 "/usr/local/bin/k3s server"
└─1742 "containerd "

正常应输出 active (running)。

查看节点状态

使用命令查看节点

    sudo kubectl get nodes

结果如下

    spacemit-k1-x-bit-brick-board% sudo kubectl get nodes
[sudo] bit-brick 的密码:
NAME STATUS ROLES AGE VERSION
spacemit-k1-x-bit-brick-board Ready control-plane,master 2m51s v1.31.1+k3s-34f8fa8d

主节点应显示 Ready(若显示 NotReady,通常是网络插件未配置)。

获取加入令牌

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

此Token用于工作节点加入集群。

Agent节点安装k3s

k3s中不允许存在相同的主机名,先把各个节点设置唯一主机名

sudo hostnamectl set-hostname node-113

当然也可以在安装K3S时指定node名称 以此类推

以192.168.2.113为例:

# 以192.168.2.113为例:

K3S_URL=https://192.168.2.120:6443 \
K3S_TOKEN="K105d480b39525f7b32cd63980819ab20284ba0f3edf4d41e9db3edc7428b205fbd::server:92e4391689e15760421cda0859751854" \
INSTALL_K3S_SKIP_DOWNLOAD="true" \
INSTALL_K3S_EXEC="agent --node-name node-113" \
bash -x ./k3s.sh

同样的在116节点安装


K3S_URL=https://192.168.2.120:6443 \
K3S_TOKEN="K105d480b39525f7b32cd63980819ab20284ba0f3edf4d41e9db3edc7428b205fbd::server:92e4391689e15760421cda0859751854" \
INSTALL_K3S_SKIP_DOWNLOAD="true" \
INSTALL_K3S_EXEC="agent --node-name node-116" \
bash -x ./k3s.sh

同样的在117节点安装

  K3S_URL=https://192.168.2.120:6443 \
K3S_TOKEN="K105d480b39525f7b32cd63980819ab20284ba0f3edf4d41e9db3edc7428b205fbd::server:92e4391689e15760421cda0859751854" \
INSTALL_K3S_SKIP_DOWNLOAD="true" \
INSTALL_K3S_EXEC="agent --node-name node-117" \
bash -x ./k3s.sh

一切就绪后在主节点中执行命令查看节点状态

spacemit-k1-x-bit-brick-board% sudo kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-113 Ready <none> 2m29s v1.31.1+k3s-34f8fa8d 192.168.2.113 <none> Bianbu 2.1 6.6.63 containerd://1.7.21-k3s2
node-116 Ready <none> 53s v1.31.1+k3s-34f8fa8d 192.168.2.116 <none> Bianbu 2.1 6.6.63 containerd://1.7.21-k3s2
node-117 Ready <none> 9s v1.31.1+k3s-34f8fa8d 192.168.2.117 <none> Bianbu 2.1 6.6.63 containerd://1.7.21-k3s2
spacemit-k1-x-bit-brick-board Ready control-plane,master 22m v1.31.1+k3s-34f8fa8d 192.168.2.120 <none> Bianbu 2.1 6.6.63 containerd://1.7.21-k3s2

至此我们就完成了在K1集群K3S集群的安装,可以通过K3S来管理我们的集群板了。^_^

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部