k3s / microk8s:单机 / 边缘场景的轻量 K8s

起因

K8s 全套 (kubeadm) 在小机器(2-4 vCPU / 4 GB)跑得费力:

  • etcd + apiserver + controller-manager + scheduler 几 GB RAM
  • 启动 5 分钟
  • 升级痛苦

但有时只想:

  • 边缘设备(树莓派 / IoT gateway)跑 K8s 编排
  • 笔记本本地 dev
  • 单租户产品打包"K8s on appliance"
  • 小公司 1-2 server prod

k3s(Rancher,2019+):单 binary(~50 MB),裁剪 K8s 到 ~512 MB RAM。
microk8s(Canonical):类似目标,更 batteries-included。

k3s 装

# 一键装(server)
curl -sfL https://get.k3s.io | sh -

# kubectl 立刻可用
sudo k3s kubectl get nodes

# 或者复制 kubeconfig 用普通 kubectl
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER ~/.kube/config

完事。1 分钟起一个 K8s。

加 worker node

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

# worker 上
curl -sfL https://get.k3s.io | K3S_URL=https://server:6443 K3S_TOKEN=xxx sh -

k3s 是什么 K8s

  • 完整 K8s API(不是 mini K8s)
  • 替代 etcd 用 SQLite(也支持 etcd / MySQL / PG external)
  • 替代 docker 用 containerd
  • 内置 traefik ingress(可关)
  • 内置 helm controller / local storage provisioner / metrics-server
  • 删了 in-tree cloud provider / 实验性 feature

90% workload 跟 vanilla K8s 一样跑。

资源占用

k3s kubeadm K8s docker swarm
RAM 512 MB 2 GB+ 50 MB
启动 30s 5 min 5s
Binary 50 MB 几百 MB 50 MB

树莓派 4 (4 GB RAM) 跑 k3s 余 3+ GB 给应用 → 完全实用。

HA k3s

# server 1
curl -sfL https://get.k3s.io | sh -s - server --cluster-init

# server 2 / 3
curl -sfL https://get.k3s.io | sh -s - server --server https://server1:6443 --token xxx

3 个 server 自动 embedded etcd HA。
worker 同前面加。

microk8s

Ubuntu 系强推:

sudo snap install microk8s --classic
sudo usermod -aG microk8s $USER

microk8s status
microk8s kubectl get nodes

# 启用 addon
microk8s enable dns ingress storage cert-manager

addon 系统比 k3s 友好:

dns / ingress / cert-manager / metallb / observability / 
istio / linkerd / hostpath-storage / openebs / cilium / dashboard

一行启用,省手动 helm。

k3s vs microk8s

k3s microk8s
母公司 Rancher / SUSE Canonical
分发 shell script snap
多 distro snap 限制(Ubuntu / 部分)
HA embedded etcd 自动 (3+ nodes)
addon 内置少,手动 helm addon 丰富
升级 手动 snap 自动
默认 ingress traefik nginx
体量 50 MB 200 MB+

我倾向 k3s(更轻 + 跨 distro),但 ubuntu 系统 microk8s 顺手。

适合场景

  • edge / IoT:低资源 + 远程管理
  • CI / 测试:临时拉一个 k3s 测 manifest
  • 个人 / 小 团队 prod:1-3 server 足够
  • embedded product:appliance 内置 K8s

不适合:

  • 千节点集群(k3s SQLite 不行;要 PostgreSQL 后端)
  • 重 K8s feature(webhooks 多 / CRD 多) 仍 OK 但优势减
  • 合规要求企业级 K8s 发行版

k3d (k3s in docker)

brew install k3d
k3d cluster create mycluster --servers 3 --agents 2
kubectl get nodes

3 master + 2 worker 在 5 个 docker container 起来 → laptop 测多
节点行为。

比 kind 轻量。

真实部署 case

某 IoT 客户:

  • 100 个边缘 gateway(4 vCPU / 8 GB)
  • 每 gateway 跑 k3s + 几个微服务 + 本地 DB
  • 中心 cluster 用 Rancher 管 100 个 k3s 集群
  • 应用更新通过 Fleet / ArgoCD 推

效果:

  • 单 gateway 装 K8s 5 分钟(自动化 script)
  • 中心可视化所有 edge 状态
  • 应用迭代独立各 gateway

vs 老方案(docker compose + ansible):管理统一 + K8s API 标准化 +
故障恢复更智能。

本地 dev: k3s vs kind vs minikube

# kind (K8s in docker)
kind create cluster

# k3d (k3s in docker)
k3d cluster create

# minikube (VM)
minikube start
启动 资源 多节点
kind 30s
k3d 15s
minikube 1 min 高(VM)

我本地 dev 用 k3d。

升级 k3s

# 同样 curl 命令 + INSTALL_K3S_VERSION
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.30.0+k3s1 sh -

或者用 Rancher / system-upgrade-controller 自动滚动升级 多 node。

monitoring

helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
    -n monitoring --create-namespace

跟 vanilla K8s 一样 helm install。
metrics-server 已内置 (k3s)。

与 Talos Linux 对比

Talos Linux:Linux distro for K8s。OS 本身是 K8s。
极简 + 安全 + immutable。

k3s Talos
Host OS 任意 Talos only
管理 systemd API only(无 ssh)
升级 手动 / 工具 强 immutable
学习

Talos 是新潮选择,适合"K8s as appliance"。

踩过的坑

  1. SQLite 单 server 限制:k3s 默认 SQLite 不支持多 server HA。
    3+ server 要 embedded etcd(默认 --cluster-init)。

  2. storage 默认 hostpath:pod restart 跨 node 数据丢。生产用
    longhorn / NFS / cloud volume。

  3. traefik 内置版本旧:k3s 自带 traefik 跟最新版本可能差几个版本。
    --disable traefik + 自装最新。

  4. resource 限制:CPU 紧张时 etcd / apiserver 慢 → pod schedule
    失败。监控 system pod CPU。

  5. firewall blocking 6443:worker 加入失败常见原因。ufw allow 6443 / 防火墙规则。

精确评价 共 0 人评价
可复现性
可复现 · 0 不可复现 · 0
文风
文风流畅 · 0 文风晦涩 · 0
立场
支持 · 0 反对 · 0

登录后即可对本帖作出评价。

评论区 0 条 · 所有人可在此交流

登录后参与评论。

还没有评论,来说两句。