当NAS的功能越来越丰富,运行的Docker容器越来越多时,简单的docker-compose已经难以满足复杂应用的管理需求。Kubernetes作为容器编排的事实标准,正在从企业数据中心走入家庭实验室。通过轻量级K3s发行版,你可以在NAS上搭建一套完整的Kubernetes集群,实现服务自动发现、负载均衡、滚动升级和故障自愈等企业级特性。本文将从集群搭建到应用部署,带你全面掌握NAS上的Kubernetes实战方案。

一、为什么NAS需要Kubernetes以及K3s的轻量化优势
当你在NAS上运行超过10个Docker容器时,管理复杂度会急剧上升——容器之间的依赖关系、健康检查、自动重启、日志收集、配置管理等问题逐一浮现。docker-compose可以管理单个主机上的多容器编排,但一旦涉及多节点部署、服务扩缩容或零停机更新,它的能力就显得捉襟见肘。
Kubernetes(简称K8s)是Google开源的容器编排平台,设计目标是管理大规模容器化应用。完整的K8s集群包含API Server、etcd、Scheduler、Controller Manager等多个组件,资源开销不小——至少需要2核4GB才能跑起来。对于家庭NAS场景,Rancher公司推出的K3s是完美选择。K3s将K8s的所有核心组件打包为单一二进制文件,去除了不常用的功能模块,内存占用低至512MB,5分钟即可完成安装。它是CNCF认证的Kubernetes发行版,与标准K8s的API完全兼容,所有K8s的工具和Helm Chart都可以直接使用。
K3s特别适合以下NAS场景:多台NAS或miniPC组成集群实现高可用服务;需要自动故障转移的关键服务(如Home Assistant、Grafana);频繁更新的服务需要零停机滚动升级;以及希望学习云原生技术同时获得实用价值的进阶用户。
硬件需求评估:单节点K3s最低配置1核2GB(仅运行轻量级Pod),推荐2核4GB起步以获得良好体验。三节点集群(一主两从)总共需要6核12GB以上。NAS上的K3s通常与存储服务(如NFS/CIFS共享)共存,建议至少预留4核8GB给K3s相关服务。存储方面,K3s可以使用NAS自身的存储卷提供持久化存储,或者通过Longhorn等K8s原生存储方案实现分布式存储。
二、K3s集群搭建与存储卷配置
K3s的安装极其简单。单节点安装只需一条命令:curl -sfL https://get.k3s.io | sh -。安装完成后,K3s会自动启动并配置好kubeconfig文件(位于/etc/rancher/k3s/k3s.yaml)。使用kubectl命令验证集群状态:kubectl get nodes,看到"Ready"状态即表示安装成功。
多节点集群搭建稍复杂但也不难。在主节点执行安装时添加server参数:curl -sfL https://get.k3s.io | sh -s - server --cluster-init。安装完成后获取Node Token:cat /var/lib/rancher/k3s/server/node-token。在工作节点上执行:curl -sfL https://get.k3s.io | K3S_URL=https://主节点IP:6443 K3S_TOKEN=刚才的token sh -。添加完成后在主节点执行kubectl get nodes即可看到所有节点。
在NAS上部署K3s的推荐方式是Docker容器运行。TrueNAS SCALE和群晖DSM都可以通过Docker运行K3s容器,但需要注意几个关键点:网络模式必须使用host或macvlan以确保Pod网络正常通信;挂载的/var/lib/rancher目录用于持久化K3s数据;/run/k3s/containerd目录挂载containerd的运行时数据。docker-compose配置示例:services段中设置privileged: true和network_mode: host,映射/var/lib/rancher和/kubelet等关键目录。
持久化存储是K3s在NAS上运行的必备组件。K3s默认支持hostPath和local存储类,但对于生产级使用,推荐部署Longhorn——一个轻量级的Kubernetes原生存储方案。Longhorn可以在K3s集群的多个节点之间自动复制数据,提供高可用的持久卷。通过Helm一键安装:helm install longhorn longhorn/longhorn -n longhorn-system --create-namespace。安装后在K8s中创建PVC时指定storageClassName: longhorn即可使用分布式存储。
如果不想引入Longhorn的额外开销,也可以使用NAS已有的NFS/SMB共享作为后端存储。K3s内置的NFS Subdir External Provisioner可以通过Helm安装,配置NAS的NFS共享路径后,自动为每个PVC创建子目录,实现存储的动态供给。
三、在K3s上部署NAS服务的实战案例
案例一:部署高可用Home Assistant。使用Helm Chart安装Home Assistant Operator:首先添加Helm仓库并更新,然后使用values.yaml自定义配置(持久卷大小、Ingress域名、资源限制等)。K3s自动为Home Assistant创建Deployment、Service和Ingress资源。当Pod崩溃或节点故障时,K3s会自动在其他节点上重新调度Pod,服务几分钟内即可恢复。配合MetalLB(裸金属负载均衡器),可以为每个服务分配独立的集群IP地址。
案例二:部署Grafana监控栈。使用kube-prometheus-stack Helm Chart一键安装Prometheus + Grafana + AlertManager全链路监控方案。该Chart会自动部署node-exporter采集各节点硬件指标、kube-state-metrics采集K8s集群状态、以及自动配置Grafana仪表板。相比手动在NAS上安装这些组件,K8s方案的优势在于配置即代码(GitOps)、自动服务发现、滚动升级零停机。
案例三:部署Nextcloud私有网盘。通过Helm安装Nextcloud Chart,配置MariaDB数据库(或使用外部的PostgreSQL)、Redis缓存、Nginx Ingress和Let's Encrypt自动SSL证书。K8s的Secret资源安全存储数据库密码和API密钥,ConfigMap管理应用配置,所有敏感信息都不写入YAML明文。升级Nextcloud版本时只需修改Chart版本号执行helm upgrade,K8s会自动执行滚动更新——先启动新版本Pod确认健康后再终止旧版本,全程零停机。
Ingress配置是服务对外暴露的关键。K3s默认内置Traefik作为Ingress Controller,同时推荐安装cert-manager实现Let's Encrypt自动证书管理。配置Ingress资源时指定域名和TLS选项,cert-manager会自动申请SSL证书并定期续期。对于家庭内网环境,可以配合自签名CA或内部DNS(如AdGuard Home)实现HTTPS访问。
日常运维建议:使用K9s(终端UI工具)替代kubectl管理集群,可视化查看Pod状态、日志和资源使用;通过Rancher(Web管理界面)实现图形化集群管理,特别适合不熟悉命令行的用户;定期执行kubectl top pods查看资源使用情况,为每个Pod设置合理的requests和limits防止资源争抢。


评论(0)