K3s 轻量 Kubernetes 集群搭建:中小团队的容器编排入门方案

K3s 轻量 Kubernetes 集群搭建封面图

本文将教你如何用一台入门级 VPS(虚拟专用服务器)在 30 分钟内搭建 K3s 集群,帮助中小团队以最低成本迈入容器编排的大门。对于大多数中小团队来说,搭建一套完整的 Kubernetes(K8s,容器编排平台)集群往往意味着高昂的硬件成本和复杂的运维门槛。动辄 4GB 以上内存的最低配置、繁琐的证书管理、独立的 etcd 存储集群——这些对 5 人以下的开发团队而言,几乎是不可承受之重。K3s 是由 Rancher 开源的轻量级 Kubernetes 发行版,专为资源受限和边缘场景设计,512MB 内存即可启动,1GB 内存就能稳定运行轻量工作负载。

为什么选择 K3s 而不是完整 Kubernetes

在决定搭建方案之前,先搞清楚 K3s 和标准 K8s 的核心差异。K3s 把 K8s 的所有组件打包进一个不到 100MB 的二进制文件,去掉了云驱动插件、存储驱动等中小团队用不上的模块,默认使用 SQLite 替代 etcd 作为数据存储。这意味着它对硬件的要求大幅降低——512MB 内存就能启动,1GB 内存就能稳定运行轻量工作负载。

具体来说,K3s 相比标准 K8s 的优势主要体现在三个方面:

  • 资源占用低:标准 K8s 控制面至少需要 2 核 4GB 内存,K3s 单节点集群在 1 核 1GB 的机器上即可运行,实际测试中 idle 状态内存占用约 300-400MB
  • 安装步骤简单:一条命令完成安装,无需手动配置证书、etcd 或网络插件,内置 Flannel(网络插件,负责 Pod 间通信)和 Traefik(反向代理,负责流量入口路由)
  • 运维负担小:自动证书轮换、内置 Helm(K8s 包管理工具)、支持 systemd 自动重启,中小团队无需专职运维即可维护

K3s 与标准 Kubernetes 资源占用对比图

当然,K3s 也有明确的适用边界。如果你的集群规模超过 50 个节点、需要复杂的多租户隔离或者对 etcd 有强依赖,标准 K8s 或托管 K8s 服务会更合适。但对于中小团队的开发测试、小型 SaaS 产品部署、边缘计算节点管理这类场景,K3s 是性价比最高的选择。

搭建前的环境准备

开始安装之前,需要确认硬件和网络条件满足最低要求。以下是经过实际验证的推荐配置:

  • 最低配置:1 核 CPU、512MB 内存、10GB 磁盘(仅能跑控制面 + 1-2 个轻量 Pod)
  • 推荐配置:2 核 CPU、2GB 内存、20GB 磁盘(可稳定运行 5-10 个容器工作负载)
  • 操作系统:Ubuntu 20.04/22.04 LTS 或 Debian 11,K3s 官方对这两个系统支持最完善
  • 网络要求:服务器需要公网 IP 或内网可达,6443 端口(K8s API Server 默认端口)和 8472/UDP(Flannel VXLAN 端口)需要放行

如果你使用的是 Hostease VPS,建议选择 2GB 内存的方案,操作系统选 Ubuntu 22.04,开箱即用。对于需要更高性能的场景,独立服务器 可以提供更充裕的计算和存储资源。

在正式安装前,还需要关闭 swap(交换分区,K8s 官方要求关闭以保证调度器决策准确性):

sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

K3s 单节点集群安装步骤

K3s 的安装过程比标准 K8s 简单得多。单节点集群只需要一条命令,整个过程通常在 2 分钟内完成。

步骤一:安装 K3s Server

curl -sfL https://get.k3s.io | sh -s - server --disable=traefik

这里使用 --disable=traefik 是为了让你后续可以自由选择 Ingress 方案(如 Nginx Ingress 或 Caddy),而不是被绑定在 Traefik 上。如果你更倾向开箱即用,去掉这个参数即可,K3s 会自动部署 Traefik 作为默认入口。

安装完成后,用以下命令验证服务状态:

sudo systemctl status k3s

如果看到 active (running),说明控制面已成功启动。

步骤二:配置 kubectl 访问

K3s 安装完成后会自动生成 kubeconfig(K8s 集群访问凭证文件),路径为 /etc/rancher/k3s/k3s.yaml。你需要把它复制到用户目录并设置正确的权限:

mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
chmod 600 ~/.kube/config

然后测试集群是否可达:

kubectl get nodes

预期输出类似:

NAME        STATUS   ROLES                  AGE   VERSION
k3s-node1   Ready    control-plane,master   60s   v1.28.4+k3s2

STATUS 列显示 Ready 就表示集群已就绪。

K3s 单节点集群架构分层图

验证集群并部署第一个应用

集群安装成功后,部署一个 Nginx(高性能 Web 服务器)容器来验证整个编排流程是否正常运转。

kubectl create deployment nginx-demo --image=nginx:latest --port=80
kubectl expose deployment nginx-demo --type=NodePort --port=80
kubectl get svc nginx-demo

第三条命令会输出一个 NodePort 端口号(通常在 30000-32767 范围内),通过 http://你的服务器IP:NodePort 即可在浏览器访问 Nginx 默认页面。

如果页面正常显示,说明 K3s 集群的调度、网络、存储三条链路都已打通。这一步看似简单,却验证了从镜像拉取、Pod 调度到 Service 路由的完整流程——这正是容器编排的价值所在:你不需要手动管理容器在哪台机器运行、如何分配端口、如何处理重启,K3s 全部帮你搞定。

对于需要同时管理多个网站的团队,K3s 配合 WordPress 托管方案 可以实现多站点隔离部署,每个站点独立的容器和配置,互不干扰。

常见问题与排查思路

在实际搭建过程中,有几个高频问题值得注意:

  • 节点一直处于 NotReady 状态:通常是 swap 未关闭或防火墙阻断了 8472/UDP 端口,运行 sudo k3s check-config 可以快速诊断环境问题
  • Pod 拉取镜像失败:检查 DNS(域名解析服务,将域名转换为 IP 地址)解析是否正常,可以先运行 nslookup docker.io 验证;如果是国内服务器,建议配置镜像加速器
  • 内存不足导致 OOM(Out of Memory,内存溢出):K3s 虽然轻量,但 512MB 内存只够跑控制面,如果要部署应用,至少需要 1GB;可以通过 kubectl top nodes 查看实际资源使用情况
  • 证书过期导致 API 不可达:K3s 默认自动轮换证书,但如果你手动修改过系统时间,可能导致证书校验失败,运行 sudo k3s certificate rotate 手动更新

这些排查步骤覆盖了 K3s 集群最常见的故障场景。遇到更复杂的问题时,可以参考 K3s 官方文档的 Troubleshooting 章节,或者在 服务器运维博客 中找到更多实战经验。

下一步行动建议

K3s 集群水平扩展示意图

完成单节点 K3s 集群搭建后,你可以根据团队实际需求继续扩展:

  • 添加 Worker 节点:在另一台服务器上运行 K3s agent 加入集群,实现多节点调度,只需一条命令并提供 server 节点的 token
  • 配置持久化存储:默认的 local-path 存储不支持跨节点迁移,生产环境建议引入 Longhorn(分布式块存储)或 NFS 方案
  • 接入 CI/CD 流水线:将 K3s 集群与 GitHub Actions 或 GitLab CI 对接,实现代码提交后自动构建镜像并滚动更新
  • 启用监控告警:部署 Prometheus + Grafana 监控栈,实时掌握集群 CPU、内存、网络等指标

如果你正在寻找一台稳定、性价比高的服务器来运行 K3s 集群,Hostease VPS 方案 提供从 1GB 到 8GB 的多种配置,支持按需升级,配合 SSD(固态硬盘)存储和 99.9% 可用性 SLA(服务等级协议),可以满足从开发测试到小型生产环境的全场景需求。总结来看,K3s 让中小团队用最低成本迈入容器编排的大门,关键是从单节点开始验证,确认业务跑通后再逐步扩展,避免一上来就搭建复杂的多节点集群反而增加运维负担。

发表评论