在树莓派上玩 K3s:从安装到实战,打造你的私人 Kubernetes 集群
Posted on Sat 24 January 2026 in Tech
| Abstract | 在树莓派上玩 K3s:从安装到实战 |
|---|---|
| Authors | Walter Fan |
| Category | tech note |
| Status | v1.0 |
| Updated | 2026-01-24 |
| License | CC-BY-NC-ND 4.0 |
你有没有过这样的经历:想学 Kubernetes,但云服务器太贵(一个月几百块起步),本地装 minikube 又吃掉大半内存,跑两个 Pod 电脑风扇就开始起飞。
然后你看着角落里吃灰的树莓派,心想:这玩意儿能跑 K8s 吗?
答案是:能,而且比你想象的简单。
K3s 就是为这个场景而生的——一个只有不到 70MB 的轻量级 Kubernetes 发行版,专门为树莓派、边缘设备、IoT 场景优化。它不是"阉割版 K8s",而是"生产级 K8s 的精简版",该有的功能都有,只是去掉了你在边缘场景用不到的东西(比如云厂商的存储驱动)。
这篇文章会带你:
- 在树莓派上 10 分钟装好 K3s
- 理解 K3s 能干什么、适合什么场景
- 跑几个实际的例子,让你的树莓派"活"起来
读完你会发现:原来"在家搭一个 Kubernetes 集群"这件事,门槛没那么高。
一、K3s 是什么?为什么选它?
1.1 K3s vs K8s:一张图说清楚
| 对比项 | K8s (标准版) | K3s (轻量版) |
|---|---|---|
| 二进制大小 | 数百 MB | < 70 MB |
| 内存占用 | 1GB+ | 512MB 可运行 |
| 依赖 | etcd, Docker/containerd, ... | 内置 SQLite/etcd, 内置 containerd |
| 安装复杂度 | 一堆组件要配 | 一条命令搞定 |
| 生产可用 | 是 | 是(CNCF 认证) |
| 适用场景 | 云端、大规模集群 | 边缘、IoT、开发测试、Home Lab |
K3s 的设计哲学是:把 Kubernetes 的核心能力打包成一个二进制文件,去掉云厂商特定的插件、legacy 代码和不常用的功能,让它能在资源受限的设备上跑起来。
1.2 为什么树莓派 + K3s 是绝配?
- 省电:4 台树莓派 5 组成的集群,idle 功耗只有 10W 左右,一个月电费几块钱
- 便宜:一台树莓派 5(8GB)大概 600 块,比云服务器划算太多
- 真实:这是一个真正的多节点 Kubernetes 集群,不是模拟器
- 好玩:可以跑各种 self-hosted 服务,学习 DevOps 技能
二、准备工作
2.1 硬件要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| 树莓派型号 | Pi 4 (4GB) | Pi 5 (8GB) |
| 存储 | 32GB microSD | 64GB+ SSD (USB 启动) |
| 电源 | 官方电源适配器 | 5V/3A+ 稳定电源 |
| 网络 | 有线以太网 | 有线(比 WiFi 稳定) |
小贴士:如果你打算跑多个 Pod 或者存储密集型应用,强烈建议用 SSD 替代 SD 卡。SD 卡的写入寿命有限,长期运行 K8s 会把它写坏。
2.2 系统准备
- 安装 64 位 Raspberry Pi OS Lite
去 Raspberry Pi Imager 下载官方烧录工具,选择: - OS: Raspberry Pi OS Lite (64-bit) - 不要选带桌面的版本,浪费资源
烧录时记得在设置里:
- 开启 SSH
- 设置用户名密码
- 配置 WiFi(如果需要)
- 设置 hostname(比如 k3s-master)
- 首次启动后的基础配置
```bash # SSH 连接到树莓派 ssh pi@k3s-master.local # 或者用 IP 地址 ssh pi@192.168.1.xxx
# 更新系统 sudo apt update && sudo apt upgrade -y
# 安装必要工具 sudo apt install -y curl wget vim ```
- 启用 cgroup(关键步骤)
K3s 需要 cgroup 来管理容器资源。编辑启动配置:
bash
sudo vim /boot/firmware/cmdline.txt
在行末添加(不要换行,保持一行):
cgroup_memory=1 cgroup_enable=memory
保存后重启:
bash
sudo reboot
- 验证 cgroup 是否生效
bash
cat /proc/cgroups | grep memory
# 应该看到 memory 那行的 enabled 是 1
三、安装 K3s(真的只要一条命令)
3.1 单节点安装(最简单)
curl -sfL https://get.k3s.io | sh -
就这样。等个一两分钟,K3s 就装好了。
验证安装:
# 查看节点状态
sudo kubectl get nodes
# 输出示例:
# NAME STATUS ROLES AGE VERSION
# k3s-master Ready control-plane,master 1m v1.28.5+k3s1
# 查看所有 Pod
sudo kubectl get pods -A
3.2 配置 kubectl 免 sudo
默认情况下,kubectl 需要 sudo 权限。这样配置后可以直接用:
# 复制配置文件到用户目录
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
# 设置环境变量
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc
source ~/.bashrc
# 现在可以不用 sudo 了
kubectl get nodes
3.3 从本地电脑访问集群
你肯定不想每次都 SSH 到树莓派上操作。把 kubeconfig 复制到你的电脑:
# 在树莓派上
sudo cat /etc/rancher/k3s/k3s.yaml
把输出的内容复制到你电脑的 ~/.kube/config,然后把 server: https://127.0.0.1:6443 改成树莓派的实际 IP:
server: https://192.168.1.xxx:6443
现在你可以在自己电脑上操作树莓派上的 K3s 集群了。
3.4 多节点集群(可选)
如果你有多台树莓派,可以组成一个真正的集群:
在 Master 节点获取 Token:
sudo cat /var/lib/rancher/k3s/server/node-token
在 Worker 节点安装并加入集群:
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.xxx:6443 K3S_TOKEN=<上面获取的token> sh -
验证:
kubectl get nodes
# 应该看到多个节点
四、K3s 能干什么?典型用例
装好了 K3s,然后呢?这里列几个我实际在用的场景:
4.1 Home Lab:自托管各种服务
把那些"我不想付订阅费"的服务自己跑起来:
| 服务 | 用途 | 推荐镜像 |
|---|---|---|
| Nextcloud | 私有云盘(替代 Dropbox/Google Drive) | nextcloud:latest |
| Bitwarden | 密码管理器 | vaultwarden/server |
| Home Assistant | 智能家居中枢 | homeassistant/home-assistant |
| Pi-hole | 全屋广告过滤 DNS | pihole/pihole |
| Jellyfin | 私人影音服务器 | jellyfin/jellyfin |
| Gitea | 私有 Git 服务 | gitea/gitea |
示例:部署一个 Pi-hole
# pihole.yaml
apiVersion: v1
kind: Namespace
metadata:
name: pihole
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: pihole
namespace: pihole
spec:
replicas: 1
selector:
matchLabels:
app: pihole
template:
metadata:
labels:
app: pihole
spec:
containers:
- name: pihole
image: pihole/pihole:latest
env:
- name: TZ
value: "Asia/Shanghai"
- name: WEBPASSWORD
value: "your-secure-password"
ports:
- containerPort: 80
name: http
- containerPort: 53
name: dns-tcp
protocol: TCP
- containerPort: 53
name: dns-udp
protocol: UDP
volumeMounts:
- name: pihole-config
mountPath: /etc/pihole
volumes:
- name: pihole-config
hostPath:
path: /opt/pihole
type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
name: pihole
namespace: pihole
spec:
type: LoadBalancer
selector:
app: pihole
ports:
- name: http
port: 80
targetPort: 80
- name: dns-tcp
port: 53
targetPort: 53
protocol: TCP
- name: dns-udp
port: 53
targetPort: 53
protocol: UDP
kubectl apply -f pihole.yaml
# 查看状态
kubectl get pods -n pihole
kubectl get svc -n pihole
4.2 学习 Kubernetes:真实环境练手
比起 minikube 这类模拟器,K3s 提供的是一个真正的 K8s 环境,你可以练习:
- Deployment、Service、Ingress:核心概念
- ConfigMap、Secret:配置管理
- PersistentVolume:存储
- Helm Chart:包管理
- GitOps (ArgoCD/Flux):持续部署
练手示例:部署一个 Nginx + 自动扩缩容
# nginx-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 100m
memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
name: nginx-demo
spec:
type: NodePort
selector:
app: nginx-demo
ports:
- port: 80
targetPort: 80
nodePort: 30080
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-demo-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-demo
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
kubectl apply -f nginx-demo.yaml
# 访问
curl http://<树莓派IP>:30080
# 查看 HPA 状态
kubectl get hpa
4.3 边缘计算 / IoT 网关
这是 K3s 的"正经"用途——在边缘设备上运行容器化工作负载:
- 数据采集:从传感器收集数据,本地预处理后上报
- AI 推理:在边缘跑轻量级 ML 模型(比如图像识别)
- 协议转换:MQTT / Modbus / OPC-UA 等工业协议转换
示例场景:树莓派 + 温湿度传感器 + K3s
传感器 → 树莓派 GPIO → Pod (数据采集) → Pod (MQTT Broker) → 云端
4.4 CI/CD Runner
把树莓派变成你的私有 CI/CD 执行器:
- GitLab Runner:跑 GitLab CI 任务
- GitHub Actions Self-hosted Runner:跑 GitHub Actions
- Jenkins Agent:跑 Jenkins 任务
好处:不用付云厂商的计算费用,适合个人项目或小团队。
五、最佳实践和注意事项
5.1 存储:别用 SD 卡当主力
| 方案 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
| SD 卡 | 便宜、方便 | 写入寿命短、速度慢 | 临时测试 |
| USB SSD | 速度快、寿命长 | 贵一点 | 长期运行 |
| NFS/NAS | 集中存储、易备份 | 依赖网络 | 多节点共享数据 |
配置 SSD 启动(树莓派 5):
# 用 raspi-config 配置启动顺序
sudo raspi-config
# Advanced Options → Boot Order → USB Boot
5.2 网络:用 Traefik 暴露服务
K3s 默认自带 Traefik 作为 Ingress Controller。配置一个域名访问你的服务:
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: myapp.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app
port:
number: 80
配合本地 DNS(或者修改 /etc/hosts),就可以用域名访问了。
5.3 监控:轻量级方案
不要在树莓派上跑完整的 Prometheus + Grafana 栈,太重了。推荐:
- k9s:终端里的 K8s 管理界面,超轻量
```bash # 安装 k9s curl -sS https://webinstall.dev/k9s | bash
# 使用 k9s ```
- Lens:桌面版 K8s 管理工具,在你电脑上运行,连接树莓派集群
5.4 备份:定期备份 etcd/SQLite
# K3s 默认用 SQLite,数据在这里
/var/lib/rancher/k3s/server/db/
# 简单备份
sudo cp -r /var/lib/rancher/k3s/server/db/ ~/k3s-backup-$(date +%Y%m%d)
5.5 安全:别把集群暴露到公网
- 用 WireGuard/Tailscale 做内网穿透,而不是直接暴露端口
- 定期更新 K3s:
curl -sfL https://get.k3s.io | sh - - 不要用
--disable-agent等不安全选项
六、常见问题 FAQ
Q1: K3s 和 MicroK8s 怎么选?
| K3s | MicroK8s | |
|---|---|---|
| 维护方 | Rancher (SUSE) | Canonical (Ubuntu) |
| 安装方式 | curl 脚本 | snap |
| ARM 支持 | 原生支持 | 支持但偶有问题 |
| 资源占用 | 更轻量 | 稍重 |
| 生态 | Rancher 生态 | Ubuntu 生态 |
我的建议:树莓派选 K3s,Ubuntu 服务器选 MicroK8s。
Q2: 树莓派 4GB 够用吗?
- 跑 K3s 本身:够
- 跑 2-3 个轻量服务:够
- 跑 5+ 个服务或者有状态应用:建议 8GB
Q3: 为什么我的 Pod 一直 Pending?
# 看看原因
kubectl describe pod <pod-name>
# 常见原因:
# 1. 资源不足:检查 requests/limits 配置
# 2. 存储问题:PVC 没有对应的 PV
# 3. 镜像拉取失败:检查网络或镜像名
Q4: 怎么卸载 K3s?
# 卸载 Server 节点
/usr/local/bin/k3s-uninstall.sh
# 卸载 Agent 节点
/usr/local/bin/k3s-agent-uninstall.sh
七、总结
回顾一下核心要点:
| 主题 | 关键信息 |
|---|---|
| K3s 是什么 | 轻量级 K8s 发行版,< 70MB,专为边缘/IoT 设计 |
| 安装 | curl -sfL https://get.k3s.io \| sh -,一条命令搞定 |
| 典型用例 | Home Lab 自托管、K8s 学习、边缘计算、CI/CD Runner |
| 最佳实践 | 用 SSD、配置 Ingress、轻量监控、定期备份 |
下一步可以做什么:
- 装好 K3s,跑一个 Hello World
- 部署一个你真正会用的服务(比如 Pi-hole 或 Nextcloud)
- 如果有多台树莓派,组个多节点集群
- 试试 Helm 和 ArgoCD,体验 GitOps
最后,如果你还在犹豫要不要折腾——那就别犹豫了。一台吃灰的树莓派 + 一个小时的时间,你就能拥有一个真正的 Kubernetes 集群。比起在云上花钱,这个投入产出比太香了。
参考资料
- K3s 官方文档
- K3s GitHub 仓库
- Raspberry Pi 官方文档
- Awesome K3s - GitHub
- PicoCluster: Installing K3s on Raspberry Pi 5
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。