K3s笔记
K3s是由Rancher Labs开发的轻量级Kubernetes发行版,具有以下核心特点:1)单二进制部署,安装简单;2)资源占用极低(控制平面仅需512MB内存);3)内置containerd、Flannel等组件;4)默认使用SQLite替代etcd;5)100%兼容Kubernetes API。相比传统K8s,k3s更适合边缘计算、开发测试和中小型生产环境,支持在树莓派等资源受限设备运行,
k3s 是由 Rancher Labs(现为 SUSE 旗下)创建并完全开源的一款经过 CNCF 认证的轻量级 Kubernetes 发行版。它的名字源于“K8s”(Kubernetes的缩写)减去5个字母——“Kubernetes - 5 letters = K3s”,直观地表达了其“更轻、更小”的设计理念。
核心定位
-
不是 Kubernetes 的简化版,而是重新打包和优化的发行版
-
100% 与 Kubernetes API 兼容,你可以使用所有熟悉的
kubectl命令 -
单二进制文件部署,简化了安装和运维复杂度
-
资源占用极低,可在从云服务器到树莓派的各种环境中运行
一、k3s 架构精简化解析
2.1 传统 K8s 与 k3s 架构对比
传统 Kubernetes 架构:
┌─────────────────────────────────────┐
│ API Server │ Scheduler │ Controller │
├─────────────────────────────────────┤
│ etcd(独立部署) │
├─────────────────────────────────────┤
│ kubelet │ kube-proxy │ CNI插件 │
├─────────────────────────────────────┤
│ 容器运行时(Docker/containerd) │
└─────────────────────────────────────┘
k3s 架构:
┌─────────────────────────────────────┐
│ 所有控制平面组件合并为单个进程 │
├─────────────────────────────────────┤
│ SQLite 替代 etcd(默认,可选etcd) │
├─────────────────────────────────────┤
│ kubelet + kube-proxy + 容器运行时 │
│ 集成在单个工作节点进程中 │
├─────────────────────────────────────┤
│ 内置 Contour(Ingress)和 Flannel │
└─────────────────────────────────────┘
2.2 k3s 的“瘦身”秘诀
移除的组件/依赖
- 传统的云提供商插件(如 cloud-controller-manager)
- 非默认的 Alpha 功能
- 过时的 API
- Docker 依赖(使用 containerd 作为默认运行时)
合并与集成
- 控制平面组件(API Server、Controller Manager、Scheduler)合并到单个二进制文件中
- 内置了 CNI(容器网络接口)、CSI(容器存储接口)和 Ingress 控制器
- 使用轻量级的 SQLite 作为默认数据存储(替代 etcd)
最小化外部依赖
- 仅需要内核和容器运行时支持
- 所有组件都静态编译到单个二进制文件中
三、核心特性详解
3.1 极简部署体验
# 安装 k3s server(控制平面节点)
curl -sfL https://get.k3s.io | sh -
# 安装 k3s agent(工作节点)
curl -sfL https://get.k3s.io | K3S_URL=https://<server-ip>:6443 K3S_TOKEN=<token> sh -
# 查看安装状态
sudo k3s kubectl get nodes
3.2 默认集成的组件
| 组件 | 作用 | 替代传统 K8s 的 |
|---|---|---|
| containerd | 容器运行时 | Docker 运行时 |
| Flannel | CNI 网络插件 | 需单独安装的 Calico/Weave |
| CoreDNS | DNS 服务 | kube-dns |
| Traefik | Ingress 控制器 | 需单独安装的 Nginx Ingress |
| SQLite | 默认数据存储 | etcd |
| Local Path Provisioner | 本地存储提供程序 | 需单独配置的 StorageClass |
3.3 灵活的数据存储选项
# 使用 SQLite(默认,适合单节点)
sudo k3s server
# 使用 etcd(适合高可用集群)
sudo k3s server --cluster-init --datastore-endpoint="etcd"
# 使用外部数据库(MySQL/PostgreSQL)
sudo k3s server \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
四、k3s 的典型应用场景
4.1 边缘计算与物联网
# 在树莓派上部署 k3s 集群
# 硬件要求:512MB RAM 即可运行
# 应用场景:智能工厂、农业物联网、车载计算单元
# 示例:部署边缘AI推理服务
apiVersion: apps/v1
kind: Deployment
metadata:
name: edge-ai-inference
spec:
replicas: 10 # 在10个边缘节点上部署
template:
spec:
nodeSelector:
kubernetes.io/arch: arm64 # ARM架构支持
containers:
- name: tensorflow-lite
image: edge-ai-model:v1.0
resources:
limits:
memory: "256Mi" # 极低内存需求
4.2 开发与测试环境
# 开发人员本地环境
# 启动单节点集群(只需2秒)
k3d cluster create mycluster --agents 2
# 与传统 minikube 对比
# 内存占用:k3s ~500MB vs minikube ~2GB
# 启动时间:k3s 2-5秒 vs minikube 30-60秒
4.3 中小型生产环境
# 高可用 k3s 集群部署示例(3个服务器节点)
# 第一个服务器节点
k3s server --cluster-init
# 第二、三个服务器节点
k3s server --server https://<first-server-ip>:6443
# 工作节点加入
k3s agent --server https://<server-ip>:6443 --token <token>
五、与传统 Kubernetes 的关键差异
5.1 架构与运维差异
| 维度 | 传统 Kubernetes | k3s |
|---|---|---|
| 安装复杂度 | 中等/高(多组件) | 极低(单命令) |
| 内存占用 | 控制平面 ~2GB+ | 控制平面 ~512MB |
| 磁盘占用 | ~1GB+ | ~100MB |
| 启动时间 | 分钟级 | 秒级 |
| 高可用配置 | 复杂(需外部负载均衡器) | 简单(内置) |
| 数据存储 | 仅支持 etcd | SQLite/etcd/外部数据库 |
| 网络方案 | 需单独安装 | 内置 Flannel |
| 存储方案 | 需单独配置 | 内置 Local Path Provisioner |
六、实战:从零部署 k3s 集群
6.1 单节点开发集群
# 1. 安装 k3s
curl -sfL https://get.k3s.io | sh -
# 2. 获取 kubeconfig
sudo cat /etc/rancher/k3s/k3s.yaml > ~/.kube/config
chmod 600 ~/.kube/config
# 3. 验证安装
kubectl get nodes
kubectl get pods -A
# 4. 部署示例应用
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
6.2 多节点生产集群
# 服务器节点 1(初始化集群)
export K3S_TOKEN=my-secret-token
curl -sfL https://get.k3s.io | K3S_TOKEN=${K3S_TOKEN} sh -s - server \
--cluster-init \
--tls-san <PUBLIC_IP> \
--node-taint CriticalAddonsOnly=true:NoExecute
# 服务器节点 2、3(加入为控制平面)
curl -sfL https://get.k3s.io | K3S_TOKEN=${K3S_TOKEN} sh -s - server \
--server https://<SERVER1_IP>:6443
# 工作节点
curl -sfL https://get.k3s.io | K3S_TOKEN=${K3S_TOKEN} sh -s - agent \
--server https://<SERVER1_IP>:6443
6.3 使用 k3d(k3s in Docker)
# 使用 k3d 创建多节点集群
k3d cluster create mycluster \
--api-port 6443 \
--servers 3 \
--agents 2 \
--port "8080:80@loadbalancer"
# 部署应用并通过端口 8080 访问
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
七、k3s 生态系统与扩展
7.1 k3s 相关工具集
-
k3d:在 Docker 中运行 k3s,用于开发测试
-
k3sup:通过 SSH 快速部署 k3s 集群的工具
-
k3os:专为运行 k3s 而设计的操作系统
-
Rancher:企业级 Kubernetes 管理平台,完美集成 k3s
7.2 生产环境增强
# 配置持久化存储(使用 Longhorn)
# 1. 安装 Longhorn(专为 k3s 优化的分布式块存储)
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.4.0/deploy/longhorn.yaml
# 2. 创建 StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn
provisioner: driver.longhorn.io
parameters:
numberOfReplicas: "2"
staleReplicaTimeout: "30"
八、最佳实践与注意事项
8.1 安全配置建议
# 启用自动证书轮换
k3s server --kubelet-arg="rotate-certificates=true"
# 使用 Pod 安全标准
k3s server --kube-apiserver-arg="enable-admission-plugins=PodSecurity"
# 限制节点可注册数量
k3s server --agent-token=<unique-token> --max-agents=50
8.2 性能调优
# 调整 SQLite 性能(当使用 SQLite 时)
k3s server --datastore-sqlite-journal-mode=WAL
# 优化网络性能
k3s server --flannel-backend=host-gw
# 调整容器运行时
k3s server --container-runtime-endpoint="unix:///run/containerd/containerd.sock"
8.3 监控与维护
# 内置的监控指标端点
curl -k https://localhost:6443/metrics
# 使用轻量级监控方案(如 Prometheus + Grafana)
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
最后小结
选择 k3s 的场景 ✅
-
边缘计算/IoT 部署:资源受限的 ARM 设备
-
开发与测试环境:快速搭建本地 Kubernetes
-
CI/CD 管道:作为临时测试集群
-
中小型生产环境:节点数小于 50 的集群
-
概念验证/演示环境:快速展示 Kubernetes 功能
-
教育/培训场景:降低学习门槛和硬件要求
选择传统 K8s 的场景 ⚠️
-
超大规模集群:节点数超过 100 个
-
需要特定存储/网络方案:k3s 内置方案不满足需求
-
企业级功能需求:需要完整的 Kubernetes 生态插件
-
深度定制需求:需要修改 Kubernetes 核心组件
k3s 的核心理念
“Kubernetes 不应该只运行在大规模云环境中,而应该无处不在——从数据中心到边缘设备。”
k3s 通过巧妙的架构简化和组件集成,在不牺牲 Kubernetes 核心能力的前提下,极大地降低了使用门槛和资源需求。它不是 Kubernetes 的替代品,而是 Kubernetes 理念在不同场景下的最佳实践,让容器编排技术真正实现了“无处不在”的愿景。
对于大多数中小型应用、边缘计算场景和开发测试需求,k3s 提供了生产就绪且运维友好的完美解决方案,是云原生技术民主化进程中的重要里程碑。
更多推荐



所有评论(0)