属于大家的
VPS知识分享站

k3s 部署:单节点、多节点与 2 核 4G 实测

先说结论:k3s 是轻量版 Kubernetes,单节点 2 核 4G 能跑,适合小团队、边缘和自托管;多节点建议 3 台 2 核 4G 起步,生产再上 4 核 8G。它省掉了 K8s 的部分组件和资源开销,但不等于“零运维”,存储、网络、备份仍要自己管。

k3s 适合谁:

  • 想用 K8s 但不想维护重型集群的小团队
  • 边缘节点、IoT、门店设备
  • 自托管多个服务,想要统一编排
  • 学习 K8s,资源有限

不适合:大规模生产、需要完整 K8s 生态和托管控制面、没有容器基础的团队。

单节点安装

curl -sfL https://get.k3s.io | sh -
sudo systemctl status k3s
sudo k3s kubectl get nodes

安装脚本会把 k3s 注册为 systemd 服务,默认带 Traefik ingress、local-path 存储和 metrics-server。单节点适合测试和小流量,控制面和业务跑在同一台,故障就全挂。

单节点 k3s 服务器运行容器
单节点适合测试和小流量,控制面与业务同机。

多节点怎么加

第一台作为 server,拿到 token;其他 server 用 K3S_TOKEN 加入,agent 也类似:

# server 节点
curl -sfL https://get.k3s.io | K3S_TOKEN=你的token sh -s - server \
  --tls-san 你的域名或IP

# agent 节点
curl -sfL https://get.k3s.io | K3S_URL=https://server:6443 \
  K3S_TOKEN=你的token sh -

生产建议 3 台 server 做高可用,agent 按业务加。server 之间需要 6443 互通,agent 需要 6443 和 8472(flannel)等端口,安全组提前放行。

server 与 agent 节点通过 token 加入集群
多节点要放行 6443 和 8472,先测网络再扩容。

网络和防火墙

  • 6443:K8s API
  • 8472/UDP:flannel VXLAN
  • 10250:kubelet
  • 80/443:ingress

云安全组只放需要的来源,别把 6443 开到公网。多节点跨机房时,flannel 的 MTU 和延迟要测,必要时换网络插件。

存储

k3s 自带 local-path provisioner,PV 落在节点本地盘,Pod 漂移后数据不跟着走。单节点够用;多节点要持久化,建议接 NFS、Longhorn 或云盘 CSI。

kubectl get storageclass
kubectl get pvc -A

部署一个应用

kubectl create deployment web --image=nginx:alpine --replicas=2
kubectl expose deployment web --port=80 --type=ClusterIP
kubectl get pods,svc

生产用 YAML 管理,别只用 kubectl 命令;镜像打固定 tag,配 resources requests/limits,避免一个 Pod 吃满节点。

暴露服务

k3s 默认带 Traefik,用 Ingress 暴露域名;没有域名可以先用 NodePort 测试。HTTPS 用 cert-manager 或 Traefik 的证书配置。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
spec:
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 80
Ingress 将流量路由到 Pod,并挂载存储卷
Traefik 默认够用,持久化要另接存储。

备份和升级

备份 etcd 或 k3s 的 datastore,备份 PVC 数据,记录 YAML 和镜像版本。升级前先看 release notes,测试环境跑一遍;单节点升级会短暂中断。

# 单节点默认 sqlite,备份 /var/lib/rancher/k3s/server/db
sudo tar czf k3s-db-backup.tgz /var/lib/rancher/k3s/server/db

常见坑

  • 安全组没放 8472,节点加不进来
  • local-path 数据不跨节点,Pod 漂移丢数据
  • 没设 resources,Pod 把节点打满
  • 单节点当生产,控制面和业务一起挂
  • 镜像用 latest,回滚困难
  • 没备份 datastore,集群坏了重建

资源规划

k3s 自身占几百 MB,剩下给系统 Pod 和业务;每个 Pod 设 requests/limits,别让一个应用吃满节点。2 核 4G 建议只跑轻量服务。

监控

用 metrics-server 看资源,Prometheus 看集群和业务;节点 NotReady、Pod 重启、磁盘压力都要告警。

资源、存储、网络、备份四件事做好,k3s 才稳。

别把“能装”当成“能生产”,先小规模验证再放量。

小规模验证,逐步放量,是最稳的路径,好。

常见问题 FAQ

Q1:2 核 4G 能跑 k3s 吗?

能跑单节点和几个小 Pod,系统本身占几百 MB;跑数据库、监控、多个应用会紧,建议 4 核 8G。

Q2:k3s 和 K8s 有什么区别?

k3s 是 CNCF 认证的轻量发行版,去掉云厂商插件、用 sqlite 默认存储、打包常用组件,资源占用更小。

Q3:单节点够用吗?

测试、小流量、边缘够用;生产要控制面高可用,至少 3 台 server,业务多副本。

Q4:数据怎么持久化?

单节点用 local-path,多节点接 NFS/Longhorn/云盘 CSI;数据库建议用独立服务或 Operator,别只靠本地盘。

Q5:需要 Traefik 吗?

k3s 默认带,够用;要更灵活的网关可以换成 Nginx Ingress 或 APISIX。

总结

k3s 适合“想用 K8s 但资源有限”的场景:单节点 2 核 4G 起步,多节点 3 台起,生产加资源和备份。存储、网络、安全组、备份是重点,别把它当零运维。

需要几台机器搭 k3s 测试集群,可以按小时开萤光云香港 CN2 VPS,先跑通单节点再加 agent。

相关推荐

赞(0)
未经允许不得转载:VPS知识分享站 » k3s 部署:单节点、多节点与 2 核 4G 实测