K3S实战:5分钟在树莓派上搭建轻量级Kubernetes集群(含避坑指南)
·
K3S实战:5分钟在树莓派上搭建轻量级Kubernetes集群(含避坑指南)
边缘计算和物联网设备的普及让轻量级Kubernetes发行版成为刚需。作为Rancher实验室专为资源受限环境设计的解决方案,K3S以其不到50MB的二进制体积和极简架构,正在重塑ARM设备上的容器编排体验。本文将带你在树莓派4B(4GB内存版)上完成从零部署到应用发布的完整流程,过程中会特别针对ARM架构的常见陷阱提供解决方案。
1. 硬件准备与系统优化
树莓派作为典型的ARM架构设备,其SD卡读写性能和CPU散热能力直接影响K3S集群稳定性。建议选择Raspberry Pi OS Lite(64位)作为基础系统,安装完成后执行以下关键优化:
# 禁用交换分区(Kubernetes官方建议)
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo systemctl disable dphys-swapfile
# 启用cgroups(K3S依赖项)
echo "cgroup_memory=1 cgroup_enable=memory" | sudo tee -a /boot/cmdline.txt
# 配置SSD替代SD卡(可选但强烈推荐)
sudo blkid /dev/sda2 | awk '{print $2}' | sed 's/"//g' | sudo tee -a /etc/fstab
存储性能对比测试数据:
| 存储介质 | 随机读取(IOPS) | 顺序写入(MB/s) | 适合场景 |
|---|---|---|---|
| 普通SD卡 | 150-300 | 10-15 | 开发测试 |
| 高速SD卡 | 500-800 | 20-30 | 轻度生产 |
| USB3 SSD | 3000+ | 200+ | 生产环境 |
注意:树莓派4B的USB3接口实际带宽约为400MB/s,建议选择低功耗SSD以避免供电不足
2. 集群部署实战
2.1 单节点快速部署
使用官方一键安装脚本时,ARM设备需要显式指定架构参数:
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik" INSTALL_K3S_ARCH="arm64" sh -
关键参数解析:
--disable traefik:在资源有限时禁用默认Ingress控制器--resolv-conf /run/systemd/resolve/resolv.conf:解决DNS解析问题--kubelet-arg="eviction-hard=memory.available<100Mi":调整内存驱逐阈值
验证安装:
sudo kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP
raspberry Ready master 2m v1.24.3+k3s1 192.168.1.100
2.2 多节点集群扩展
在第二台树莓派上加入集群时,需要特别注意证书SAN配置:
curl -sfL https://get.k3s.io | \
K3S_URL=https://主节点IP:6443 \
K3S_TOKEN=从主节点获取的token \
INSTALL_K3S_ARCH="arm64" \
sh -s - agent --node-ip 当前节点IP
常见问题处理:
-
节点NotReady状态:
# 检查CNI插件日志 journalctl -u k3s -f | grep flannel # 典型解决方案:重置网络配置 sudo systemctl restart systemd-networkd -
证书过期错误:
# 手动更新证书 sudo k3s certificate rotate
3. ARM架构专属优化技巧
3.1 容器镜像兼容性
使用docker manifest inspect命令验证镜像是否支持ARMv7/ARM64:
docker manifest inspect alpine:latest | grep architecture
推荐的基础镜像:
arm64v8/alpine(官方ARM64构建)balenalib/rpi-raspbian(树莓派专用)multiarch/qemu-user-static(跨架构模拟)
3.2 资源配额管理
示例Pod资源限制配置:
apiVersion: v1
kind: Pod
metadata:
name: stress-test
spec:
containers:
- name: main
image: arm64v8/stress-ng
resources:
limits:
cpu: "2"
memory: "512Mi"
requests:
cpu: "0.5"
memory: "256Mi"
command: ["stress-ng", "--cpu", "4", "--vm", "1", "--vm-bytes", "500M"]
4. 生产级部署方案
4.1 高可用架构设计
树莓派集群的推荐拓扑:
[外部负载均衡]
|
----------------------------------------
| | |
[Master 1] [Master 2] [Master 3]
|| || ||
[Worker 1] [Worker 2] [Worker 3]
关键配置参数:
# Master节点启动参数
--cluster-init \
--tls-san yourdomain.com \
--datastore-endpoint="mysql://username:password@tcp(数据库地址)/k3s"
# Worker节点连接参数
--server https://负载均衡IP:6443 \
--node-external-ip 公网IP
4.2 持久化存储方案
对比三种常用方案:
| 方案 | 读写性能 | 可靠性 | 配置复杂度 |
|---|---|---|---|
| hostPath | ★★★★ | ★★ | ★ |
| NFS | ★★ | ★★★ | ★★★ |
| Longhorn (ARM版) | ★★★ | ★★★★ | ★★★★ |
Longhorn安装命令:
helm repo add longhorn https://charts.longhorn.io
helm install longhorn longhorn/longhorn \
--namespace longhorn-system \
--create-namespace \
--set defaultSettings.defaultDataPath="/mnt/ssd"
5. 性能监控与调优
5.1 精简监控套件
推荐使用kube-prometheus-stack的ARM兼容配置:
prometheus:
prometheusSpec:
resources:
limits:
cpu: 500m
memory: 512Mi
grafana:
resources:
limits:
cpu: 300m
memory: 256Mi
5.2 关键指标告警规则
针对树莓派的特殊规则示例:
- alert: HighTemperature
expr: node_hwmon_temp_celsius > 70
for: 5m
labels:
severity: warning
annotations:
summary: "节点温度过高 ({{ $value }}°C)"
description: "持续高温可能导致CPU降频"
实际部署中发现,在树莓派集群上运行K3S时,定期执行kubectl drain配合节点重启能有效缓解内存泄漏问题。建议每周维护窗口执行:
sudo kubectl drain <节点名> --ignore-daemonsets --delete-emptydir-data
sudo reboot
更多推荐
所有评论(0)