Blog
k3s 单节点:轻量 Kubernetes 实验室
2026 年开年给自己定了个小目标:系统补一下 K8s 手感,但不在家里烧多台控制面。选了 k3s 单节点——安装简单,自带常用组件,资源占用比完整上游集群友好。下面是四周学习日志,按周记,而不是按官方文档目录抄。
第零天:装上,确认还活着
curl -sfL https://get.k3s.io | sh -
sudo kubectl get nodes
sudo kubectl get pods -A
节点 Ready 之后,默认能看到 traefik、local-path provisioner 一类组件,够练。kubeconfig 在 /etc/rancher/k3s/k3s.yaml,拷到自己用户目录并改权限,避免整天 sudo。第一天只做这一件事:能 get nodes,能看 kube-system 里的 Pod,不急着装 Service Mesh。若安装脚本默认装了不需要的组件,可以之后再关;第零天原则是「先有一个能响应的集群」,不是「一次装成生产级」。
第一周:Deployment、Service、探针
本周目标是把「期望副本数」和真实 Pod 对上号。写 Deployment,改镜像 tag,看滚动更新是否按 maxUnavailable 来;故意写错镜像,看事件里怎么报错。Service 用 ClusterIP 先在集群内 curl 通,再理解 NodePort 为什么不该随手对公网裸奔。
探针方面:liveness 乱杀进程的教训来过一次——检查路径写错,Pod 一直重启,业务日志像鬼打墙。readiness 没就绪时不要接流量,这点在 Ingress 后面更明显。周末复盘一句话:声明式不是「写了就忘」,是「写了要会看 status 和 events」。
第二周:Ingress 与证书
入口流量从哪进、TLS 在哪终结,是本周主题。用自带 traefik 或换成自己更熟的 Ingress 控制器都可以,关键是路径规则与后端 Service 名称别写飘。证书用内网 CA 或 Let's Encrypt 的实验域名,走通申请与续期思路;家庭实验室 HTTPS 绿锁,主要是练流程,不是追求公网完美。
踩坑:注解写在错误的资源上、Service 端口与容器端口差一层、DNS 还指着旧 IP。把「浏览器打不开」拆成:DNS → 入口 → 后端 Pod → 应用本身,一层层查,比重启集群有用。本周笔记里强制自己用 describe 和 logs 各排通两个故障,不靠网页一点就过——手感来自终端,不来自仪表盘截图。
第三周:PVC、PV 与状态
无状态 Deployment 玩熟后,上 PVC。local-path 适合实验,创建、挂载、删 Pod 数据还在的路径走一遍。体会:Pod 可以扔,卷的生命周期另算。删 namespace 前确认回收策略,别把还想留的数据卷一起收走。
重要结论提前写进日志:local-path 不适合把「唯一一份」生产数据库只放在单节点上。重要数据仍落到 NAS 上的卷,或集群外数据库。单节点 k3s 没有多副本控制面,也没有跨节点调度的退路——存储类的现实比 YAML 语法更致命。
第四周:Helm 与「不该塞进去的」
Helm 装一个仪表盘或常用 chart,强迫自己读 values,别盲抄整页配置。改 values 升级 release,看历史版本能否回滚。标签与注解开始多起来时,用 kubectl get 的自定义列和 label selector 找资源,避免在网页 UI 里迷路。
刻意没碰的:Service Mesh、全套 Operator、把所有 Compose 服务一股脑迁进集群。不适合的事情列在周记末尾——生产数据库不备份就塞进去;没理解网络模型就 NodePort 裸奔;把单节点 k3s 当高可用生产控制面。学习环境与生产环境的心智模型要分开。
四周之后:和 Compose 怎么共存
实验室拆法:Compose 继续跑稳态自托管(博客、相册、监控);k3s 跑实验与学习负载。别为了「全上 K8s」而全上,运维复杂度是真实成本。四周里我至少三次想把监控也迁进集群,最后都忍住了——学习目标是手感,不是制造双份告警风暴。
单节点 k3s 教不会大规模运维的全部,但 YAML 手感、排障顺序、存储与入口的边界,一个假期能练出来。资源上单节点也要限额:给实验 namespace设 ResourceQuota,避免一次错误的副本数把整机 CPU 打满、连 SSH 都卡。日志写到这里收束:会走路之后,再考虑要不要第二台节点——那是下一季的事;本季的验收标准只有一条:合上电脑两周后,还能独立写出 Deployment、Service、Ingress 和 PVC 并排通一次故障。
四周之后我留下的三样东西
实验收摊时,集群里并没有跑生产相册。留下的是:
- 一份自己写的
kustomization示例,以后抄结构用 - 对「存储类与权限」的敬畏——这比记 kubectl 子命令值钱
- 明确边界:Compose 继续管稳态服务,k3s 只留学习与偶尔的 operator 尝鲜
有人四周后把全家服务迁进 k3s,也能运行。我的 splitch 是精力账:家庭实验室的乐趣之一是控制复杂度曲线,而不是在简历式架构上证明自己。单节点 k3s 完成了它的教学任务,就够了。