从零搭一套跨云 k3s 集群:一个超级个体的折腾笔记

手里攒了几台小服务器,分散在不同的云、不同的地域,平时各管各的,越来越乱。某天我冒出一个念头:能不能用 Kubernetes 把它们统一管起来?于是有了这一整天的折腾。记录在这,给同样想试的人省点坑。

k8s 还是 k3s

先说结论:学习和中小规模,直接上 k3s。它是经过 CNCF 认证的完整 Kubernetes,API、生态、kubectl 全都通用,只是把控制平面打包得极轻。原生 k8s 光控制平面就能吃掉一台小机器,对我这种 2核4G 的机器划不来。纠结”k3s 还是 k8s”其实是个伪命题——你学到的就是 k8s 本身。

跨云,是这次最大的坎

我的机器分属两个云厂商,彼此不在同一个内网。k8s 要求节点之间能两两互通,跨云走公网既不安全也麻烦。解法是加一层 overlay 虚拟网络——我用的是 Tailscale,所有节点装上之后自动组成一张虚拟内网,k3s 在这层之上组集群,全程不用动任何云安全组,SSH 也不受影响。

国内特色三连坑

  • 拉不动镜像:节点去 GitHub / docker.io 经常超时,连最基础的 pause 镜像都拉不下来。解法是配国内镜像加速源。
  • 装工具失败:本机用 Homebrew 装 kubectl 也卡在 GitHub 的 ghcr.io 上,换成国内 Homebrew 镜像才好。
  • 本地连不上集群:Tailscale 的中继链路 TCP 不稳,kubectl 直连 6443 超时。最后用一条 SSH 隧道把本地端口转发到 master,反而最稳。

你会发现,在国内搞这套,一大半时间是在和网络较劲,而不是和 Kubernetes 本身。

然后呢

集群跑起来了,三个节点跨云互通,本地 kubectl、k9s、图形面板都能管。但折腾到最后,我又把生产服务搬回了 Docker——为什么,下一篇细说。