1. 概述
Kubernetes(简称 K8s)是一个可移植的开源平台,用于管理容器化的工作负载和服务。它能够编排和管理集群中的应用 Pod,实现诸如零停机部署、容器自愈等高效运维任务。然而,K8s 在本地开发或资源受限的环境中使用成本较高。
如果我们希望在嵌入式系统中使用 Kubernetes,或者想快速搭建一个本地 Kubernetes 集群,K3s 是一个非常合适的选择。
K3s 是一个轻量级的 Kubernetes 发行版,专为资源受限的环境设计。本文将介绍 K3s 的核心特性,并演示如何搭建一个简单的集群。
2. K3s:轻量级的 Kubernetes
K3s 是由 Rancher Labs 维护的 CNCF 沙盒项目,通过简化 Kubernetes 的组件和依赖,实现了轻量化的部署。
K3s 的轻量化特性
- 单文件二进制部署,外部依赖极少
- 硬件要求低,内存占用小
- 支持单节点部署,也支持高可用部署(需外部数据库)
K3s 将标准 Kubernetes 组件打包成一个不到 100MB 的二进制文件,去除了不必要的驱动、可选卷插件和第三方云集成组件。
尽管如此,K3s 依然保留了 Kubernetes 的核心功能,例如:
- 支持 CoreDNS 和 Ingress 控制器
- 内置 SQLite 数据库存储集群信息
- 默认使用 Flannel 作为 CNI 插件
K3s 可在至少 512MB RAM(推荐 1GB)和 1 个 CPU 的 Linux 系统上运行。虽然它是 Kubernetes 的简化版,但其核心架构依然保留了 Master 和 Worker 节点的结构。
此外,K3s 支持与 AWS、GCP 等云厂商集成,只需通过插件即可扩展功能。
3. 安装与配置
3.1 安装方式
K3s 的安装非常简单,推荐使用官方脚本一键安装:
$ curl -sfL https://get.k3s.io | sh -
该命令会下载并运行 K3s 服务。你也可以手动下载发行包安装。
如需自定义安装,例如禁用默认的 Flannel CNI 插件:
$ curl -sfL https://get.k3s.io | sh -s - --flannel-backend none
或使用环境变量方式:
$ INSTALL_K3S_EXEC="--flannel-backend none" k3s server
3.2 集群访问
K3s 默认将配置文件生成在 /etc/rancher/k3s/k3s.yaml
,你可以通过设置环境变量使用该配置:
$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
或者复制到 ~/.kube/config
:
$ mkdir -p ~/.kube
$ sudo k3s kubectl config view --raw | tee ~/.kube/config
$ chmod 600 ~/.kube/config
查看节点状态:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
<cluster-name> Ready control-plane,master 4d3h v1.25.6+k3s1
查看所有 Pod:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system helm-install-traefik-crd-6v28l 0/1 Completed 0 4d2h
...
默认组件包括:
✅ Traefik(Ingress 控制器)
✅ CoreDNS(集群 DNS)
✅ Local Path Provisioner(本地存储供给)
✅ Helm(用于组件管理)
3.3 添加节点
在其他节点上执行以下命令加入集群:
$ curl -sfL https://get.k3s.io | K3S_URL=https://<node-host>:6443 K3S_TOKEN=mynodetoken sh -
Token 可在主节点获取:
$ cat /var/lib/rancher/k3s/server/node-token
节点加入后,Master 会自动识别并调度任务。
4. 示例:部署 Nginx 集群
创建部署
$ kubectl create deployment nginx --image=nginx --port=80 --replicas=3
查看 Pod 状态:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-ff6774dc6-ntxv6 1/1 Running 0 17s
...
创建 Service
$ kubectl create service clusterip nginx --tcp=80:80
查看 Service 详情:
$ kubectl describe service nginx
Name: nginx
Namespace: default
Labels: app=nginx
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP: 10.43.238.194
Port: 80-80 80/TCP
TargetPort: 80/TCP
Endpoints: 10.42.0.10:80,10.42.0.11:80,10.42.0.9:80
创建 Ingress
创建 nginx-ingress.yaml
文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
annotations:
ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
应用配置:
$ kubectl apply -f nginx-ingress.yaml
查看 Ingress 状态:
$ kubectl describe ingress nginx
Name: nginx
Address: 192.168.1.103
Rules:
Host Path Backends
---- ---- --------
*
/ nginx:80 (10.42.0.10:80,10.42.0.11:80,10.42.0.9:80)
Annotations: ingress.kubernetes.io/ssl-redirect: false
现在可以通过浏览器访问 http://192.168.1.103
查看 Nginx 页面。
5. K3s 与 K8s 的区别
特性 | K3s | K8s |
---|---|---|
包大小 | <100MB,单文件二进制 | 多组件分布,体积较大 |
启动速度 | 秒级启动 | 启动较慢 |
架构 | 单进程运行多个组件 | 多进程,组件独立运行 |
支持架构 | 支持 ARM、x86 等多种架构 | 主要支持 x86 |
网络插件 | 默认 Flannel | 支持多种 CNI 插件 |
存储插件 | 默认 Local Path Provisioner | 支持多种存储插件 |
高可用 | 支持但需外部数据库 | 原生支持 ETCD 高可用 |
适用场景 | 本地开发、边缘计算、CI/CD 测试 | 生产环境、大规模集群 |
✅ K3s 优势: 轻量、快速、资源消耗低、适合边缘和测试环境
❌ K3s 劣势: 缺乏企业级特性,高可用需额外配置
6. 总结
K3s 是一个轻量级的 Kubernetes 发行版,适用于资源有限的环境,如本地开发、嵌入式设备或 CI/CD 流水线测试。它保留了 Kubernetes 的核心功能,同时简化了安装和管理流程。
✅ 优点:
- 安装简单
- 占用资源少
- 快速启动
- 支持多种架构
- 兼容 Kubernetes YAML
❌ 注意:
- 不适合生产级高可用部署
- 缺少部分企业级插件
如果你需要快速搭建一个 Kubernetes 环境进行测试或学习,K3s 是一个非常不错的选择。对于生产环境或复杂集群,仍建议使用标准的 Kubernetes。