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 的场景 ✅

  1. 边缘计算/IoT 部署:资源受限的 ARM 设备

  2. 开发与测试环境:快速搭建本地 Kubernetes

  3. CI/CD 管道:作为临时测试集群

  4. 中小型生产环境:节点数小于 50 的集群

  5. 概念验证/演示环境:快速展示 Kubernetes 功能

  6. 教育/培训场景:降低学习门槛和硬件要求

选择传统 K8s 的场景 ⚠️

  1. 超大规模集群:节点数超过 100 个

  2. 需要特定存储/网络方案:k3s 内置方案不满足需求

  3. 企业级功能需求:需要完整的 Kubernetes 生态插件

  4. 深度定制需求:需要修改 Kubernetes 核心组件

k3s 的核心理念

“Kubernetes 不应该只运行在大规模云环境中,而应该无处不在——从数据中心到边缘设备。”

k3s 通过巧妙的架构简化和组件集成,在不牺牲 Kubernetes 核心能力的前提下,极大地降低了使用门槛和资源需求。它不是 Kubernetes 的替代品,而是 Kubernetes 理念在不同场景下的最佳实践,让容器编排技术真正实现了“无处不在”的愿景。

对于大多数中小型应用、边缘计算场景和开发测试需求,k3s 提供了生产就绪且运维友好的完美解决方案,是云原生技术民主化进程中的重要里程碑。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐