概述
Kubernetes 功能强大,但原版太重了。内存要吃 2GB 起步,组件多、维护复杂,小 VPS 根本跑不动。
K3s 是 Rancher 团队做的轻量版 K8s,把所有核心组件打包成一个二进制文件,不到 100MB。单节点 512MB 内存就能跑,内置了 traefik 做 Ingress、sqlite 做后端存储(可选换 PostgreSQL)。对于个人开发、小规模部署来说,K3s 是最省资源的选择。
这篇教程带你从零在 VPS 上装好 K3s,跑一个 Nginx 服务验证集群正常工作。
准备工作
你需要以下条件:
- 一台 Linux VPS(推荐 Ubuntu 22.04+ 或 Debian 12+)
- 至少 512MB 内存、10GB 磁盘
- root 权限或 sudo 权限
- 一台能运行 kubectl 的本地电脑(Windows/Mac/Linux 都行)
- 开放 K3s 默认端口 6443(TCP)
💡 提示:单节点 K3s 适合开发和小型项目。如果需要高可用,可以用多节点集群方案。
步骤
第一步:安装 K3s
在 VPS 上执行一键安装脚本:
curl -sfL https://get.k3s.io | sh -
安装完成后,K3s 会作为 systemd 服务自动启动:
# 查看服务状态
sudo systemctl status k3s
# 查看节点状态
sudo k3s kubectl get nodes
你应该能看到一个 Ready 状态的节点,名字是主机名。
第二步:配置 kubectl 到本地
把集群的 kubeconfig 复制到本地电脑:
# 在 VPS 上查看配置路径
sudo cat /etc/rancher/k3s/k3s.yaml
把输出内容保存为本地 ~/.kube/config,然后修改 server 字段,把 127.0.0.1 改为 VPS 的公网 IP:
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTi...
server: https://你的VPS_IP:6443 # 改这里
name: default
然后在本地验证连接:
kubectl get nodes
kubectl cluster-info
能看到节点信息和 K3s 服务地址就说明配置成功了。
第三步:部署一个 Nginx 服务
写一个部署清单 nginx-deploy.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: ClusterIP
selector:
app: nginx
ports:
- port: 80
targetPort: 80
应用配置:
kubectl apply -f nginx-deploy.yaml
查看 Pod 状态:
kubectl get pods -l app=nginx
kubectl get svc nginx
等状态变成 Running 后,通过 ClusterIP 访问:
kubectl port-forward svc/nginx 8080:80 &
curl http://localhost:8080
能看到 Nginx 欢迎页面就说明集群部署成功了。
第四步:通过 Ingress 暴露服务
K3s 内置了 traefik,可以直接用 Ingress 暴露服务。创建 nginx-ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: nginx.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
应用并验证:
kubectl apply -f nginx-ingress.yaml
kubectl get ingress
然后在本地 hosts 文件加一条记录(VPS_IP nginx.yourdomain.com),浏览器访问 http://nginx.yourdomain.com 就能看到 Nginx 页面。
第五步:常用管理命令
# 查看所有资源
kubectl get all
# 查看 Pod 日志
kubectl logs -l app=nginx
# 进入 Pod 内部
kubectl exec -it <pod-name> -- sh
# 扩容到 5 个副本
kubectl scale deployment nginx --replicas=5
# 回滚到上一个版本
kubectl rollout undo deployment nginx
# 删除服务
kubectl delete -f nginx-deploy.yaml
验证
确认集群正常运行的检查清单:
# 1. 节点状态为 Ready
kubectl get nodes
# 2. 所有 Pod 都在 Running
kubectl get pods -A | grep -v Running
# 3. 系统组件正常
kubectl get pods -n kube-system
# 4. Ingress 配置生效
kubectl get ingress
如果所有检查都通过,K3s 集群就搭建完成了。
常见问题
Q:安装后 kubectl 命令找不到?
K3s 安装脚本会自动把 kubectl 软链接到 /usr/local/bin/kubectl。如果还是不行,手动创建:
ln -s /var/lib/rancher/k3s/data/current/bin/kubectl /usr/local/bin/kubectl
Q:内存不够,512MB 跑不起来?
K3s 本身占用约 150-200MB 内存。如果 512MB 还是紧张,可以禁用内置的 traefik 和 local-path-provisioner:
curl -sfL https://get.k3s.io | sh -s - --disable traefik --disable local-path-provisioner
然后用外部方案替代。
Q:如何备份集群数据?
K3s 默认用 etcd 存储数据,备份很简单:
sudo k3s etcd-snapshot save /tmp/k3s-backup.tar.gz
恢复:
sudo k3s etcd-snapshot restore /tmp/k3s-backup.tar.gz
Q:多节点集群怎么搭建?
主节点安装完成后,从节点用 token 加入:
# 在主节点获取 token
sudo cat /var/lib/rancher/k3s/server/node-token
# 在从节点执行(替换 TOKEN 和 MASTER_IP)
curl -sfL https://get.k3s.io | sh -s - server --token TOKEN --server https://MASTER_IP:6443
Q:如何清理 K3s?
/usr/local/bin/k3s-uninstall.sh
现在你的 VPS 上跑着一个完整的 Kubernetes 集群了。后续可以部署各种应用:Nginx、Redis、PostgreSQL、你自己的 Web 服务都行。要不要试试部署一个你自己的项目?