K3S 轻量级 Kubernetes 搭建教程
K3S 是 Rancher Labs 推出的轻量级 Kubernetes 发行版,将完整的 K8S 功能压缩到不到 100MB 的单一二进制文件中。K3S 使用 SQLite 替代 etcd 作为默认数据存储,内置了 Flannel 网络插件和 Traefik Ingress 控制器,非常适合在搬瓦工 VPS 这类资源受限的环境中运行。
一、K3S 与标准 K8S 对比
- 内存占用:K3S 约 512MB,标准 K8S 需要 2GB+。
- 安装方式:K3S 一条命令完成,K8S 需要多个组件分别安装。
- 存储后端:K3S 默认 SQLite,K8S 使用 etcd。
- 内置组件:K3S 内置 Flannel、CoreDNS、Traefik、ServiceLB。
- 兼容性:K3S 完全兼容 K8S API,kubectl 和 Helm 均可正常使用。
二、环境要求
- 操作系统:Ubuntu 20.04+、Debian 11+、CentOS 7+。
- 内存:最低 512MB,推荐 1GB 以上。
- CPU:最低 1 核。
- 磁盘:至少 10GB 可用空间。
搬瓦工 VPS 购买地址:bwh81.net,使用优惠码 NODESEEK2026 享受 6.77% 折扣。
三、安装 K3S Server(主节点)
3.1 一键安装
curl -sfL https://get.k3s.io | sh -
安装完成后 K3S 会自动启动并配置为系统服务。
3.2 验证安装
systemctl status k3s
k3s kubectl get nodes
k3s kubectl get pods -A
3.3 配置 kubectl
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
chmod 600 ~/.kube/config
安装标准 kubectl(可选):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
四、自定义安装选项
4.1 禁用默认组件
# 不安装 Traefik(使用自己的 Ingress Controller)
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik" sh -
# 不安装 ServiceLB
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable servicelb" sh -
# 同时禁用多个组件
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik --disable servicelb" sh -
4.2 使用外部数据库
curl -sfL https://get.k3s.io | sh -s - server \
--datastore-endpoint="mysql://user:pass@tcp(db-host:3306)/k3s"
五、添加 Agent 节点
5.1 获取 Server Token
cat /var/lib/rancher/k3s/server/node-token
5.2 在 Agent 节点上安装
curl -sfL https://get.k3s.io | K3S_URL=https://SERVER_IP:6443 K3S_TOKEN=YOUR_TOKEN sh -
5.3 验证节点加入
在 Server 节点上查看:
kubectl get nodes -o wide
六、部署应用
6.1 部署 Nginx
kubectl create deployment nginx --image=nginx:alpine --replicas=2
kubectl expose deployment nginx --port=80 --type=LoadBalancer
K3S 内置的 ServiceLB 会自动为 LoadBalancer 类型的 Service 分配外部端口。
6.2 使用 YAML 部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
memory: "32Mi"
cpu: "50m"
limits:
memory: "64Mi"
cpu: "100m"
---
apiVersion: v1
kind: Service
metadata:
name: web-app
spec:
selector:
app: web-app
ports:
- port: 80
targetPort: 80
type: LoadBalancer
kubectl apply -f web-app.yaml
6.3 配置 Ingress
K3S 内置 Traefik 作为 Ingress Controller:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-app-ingress
spec:
rules:
- host: app.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app
port:
number: 80
七、安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
使用 Helm 部署应用:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-redis bitnami/redis --set architecture=standalone
八、K3S 管理
# 查看 K3S 服务日志
journalctl -u k3s -f
# 重启 K3S
systemctl restart k3s
# 停止 K3S
systemctl stop k3s
# 完全卸载 K3S Server
/usr/local/bin/k3s-uninstall.sh
# 完全卸载 K3S Agent
/usr/local/bin/k3s-agent-uninstall.sh
九、常见问题
K3S 启动失败
journalctl -u k3s --no-pager | tail -50
常见原因是端口被占用(6443)或内存不足。
kubectl 连接被拒绝
确保 kubeconfig 文件路径正确:
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get nodes
Pod 网络不通
检查 Flannel 网络是否正常:
kubectl get pods -n kube-system | grep flannel
kubectl logs -n kube-system -l app=flannel
总结
K3S 是在搬瓦工 VPS 上运行 Kubernetes 的最佳选择,资源占用低、安装简单、功能完整。安装后可以继续配置 Helm 包管理器、ArgoCD GitOps、Rancher 管理平台 等工具。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 享受 6.77% 折扣。