0. 概念与思路
在开始敲击命令之前,我们需要先建立对 K3s 的认知模型,并理解本教程的设计思路。
1. 什么是 K3s?
K3s 是由 Rancher Labs(现 SUSE)推出的轻量级 Kubernetes 发行版。它不是 Kubernetes 的“缩水版”,而是通过裁剪非必要功能、打包依赖,实现了与上游 Kubernetes 完全兼容(CNCF 认证)但体积更小、资源占用更低的发行版。
1.1 "5 Less" 核心特性
- Less Size(体积更小):二进制文件小于 100MB。
- Less Resources(资源更省):512MB 内存即可运行。
- Less Complexity(复杂度更低):单一二进制文件,集成了 Containerd、Flannel、CoreDNS、Traefik 等组件。
- Less Dependencies(依赖更少):内核依赖项极少,开箱即用。
- Less Steps(步骤更简):一条命令即可完成集群搭建。
1.2 架构差异:K3s vs K8s
| 特性 | Kubernetes (K8s) | K3s |
|---|---|---|
| 数据存储 | Etcd (内存消耗大) | SQLite (默认), Etcd, MySQL, Postgres |
| 容器运行时 | Docker/Containerd (需单独配置) | 内置 Containerd |
| 网络插件 | 需单独安装 (Calico/Flannel) | 内置 Flannel (支持更换) |
| Ingress | 需单独安装 (Nginx/Traefik) | 内置 Traefik |
| 组件进程 | kube-apiserver, kubelet 等独立进程 | 所有控制平面组件运行在一个 Server 进程中 |
| 云提供商 | 内置大量 Cloud Provider 代码 | 移除内置代码,使用 CSI/CCM 接口 |
2. 为什么选择 K3s?(应用场景)
K3s 的设计初衷并非替代云厂商托管的 K8s(如 EKS/GKE),而是填补边缘计算和轻量级环境的空白。
2.1 典型场景
- 边缘计算与 IoT:
- 在树莓派、工控机、ATM 机等资源受限设备上运行。
- 利用 K3s 的单二进制特性,实现无人值守的自动化部署。
- 开发与测试环境:
- 开发人员在笔记本上快速启动 K8s 集群,且不拖慢系统。
- CI/CD 流水线中快速拉起临时集群进行集成测试(Docker-in-Docker 场景)。
- 私有化交付:
- 软件供应商将应用打包在 K3s 中,整体交付给客户,降低客户的运维门槛。
- 中小企业生产环境:
- 对于几十个节点的集群,K3s + Etcd 的组合完全能够胜任生产负载,且运维成本远低于标准 K8s。
3. 教程设计思路
本教程并非简单的命令堆砌,而是遵循从单点突破到全局掌控的学习路径。
3.1 阶段演进
- 阶段一:单机上手(Chapter 1-3)
- 目标:让集群跑起来,应用部署上去。
- 重点:安装脚本、国内镜像源配置(痛点)、基本工作负载。
- 思考:如何解决国内网络环境下的拉取问题?如何理解 Pod 是最小调度单元?
- 阶段二:组网与连接(Chapter 4-5)
- 目标:让服务可被访问,让节点跨越物理限制。
- 重点:Service 类型详解、Tailscale 跨地域组网(亮点)。
- 思考:如何让家里的树莓派和云服务器组成一个内网互通的集群?
- 阶段三:生产加固(Chapter 6-9)
- 目标:从“能用”到“好用”、“敢用”。
- 重点:存储持久化、HTTPS 证书自动化、监控告警、数据备份。
- 思考:如果节点挂了数据怎么办?如何知道集群快撑不住了?
- 阶段四:验证与验收(Chapter 10)
- 目标:验证成果,确保质量。
- 重点:自动化测试脚本、故障排查手册。
4. 学习建议
- 动手实践:Kubernetes 是“练”出来的,不是“看”出来的。请务必准备至少一台 Linux 虚拟机(建议 Ubuntu 20.04/22.04)。
- 关注原理:在执行命令时,思考“为什么 K3s 不需要初始化 kubeadm init?”、“Flannel 是如何打通容器网络的?”。
- 拥抱失败:遇到 CrashLoopBackOff 不要慌,学会用
kubectl describe和kubectl logs才是进阶的关键。
准备好了吗?让我们开始 基础部署 之旅。